LINUX.ORG.RU

Головоломка с кешем инструкций L1


0

1

Процессоров все больше, ядра все круче, параллельность выше..

Как указывать кеш инструкций L1 для компиляции в gcc, если процессоров два, и к тому же они еще и делятся на два виртуальных ядра гипертрейдингом..

С кешем L2 все понятно 2 процессора на 2 виртуальных ядра, то указанное значение делим на 4.

Общий кеш L2 процессора в примере 1024К. При значении 256К на ядро получаем наиболее высокие показатели обмена:

#cat /sys/devices/system/cpu/cpu0/cache/index2/size
512 K

sysbench --test=memory --memory-block-size=128K --max-time=30 run
80859.12 MB transferred (2695.28 MB/sec)

sysbench --test=memory --memory-block-size=256K --max-time=30 run
90526.25 MB transferred (3017.51 MB/sec)

sysbench --test=memory --memory-block-size=512K --max-time=30 run
81594.00 MB transferred (2719.76 MB/sec)

sysbench --test=memory --memory-block-size=1024K --max-time=30 run
46810.00 MB transferred (1560.29 MB/sec)

По идее L1 у каждого процессора свой. Но как быть с виртуальностью ядер каждого процессора делить меж ними кеш пополам или нет????

Заранее благодарен.

★★
Ответ на: комментарий от glibych

яничегонепонял.жпг

~ #  cat /proc/cpuinfo | grep "cache size"
cache size	: 2048 KB
cache size	: 2048 KB
~ # sysbench --test=memory --memory-block-size=2048K --max-time=30 run | grep "MB/sec"
66156.00 MB transferred (2205.19 MB/sec)
~ # sysbench --test=memory --memory-block-size=1792K --max-time=30 run | grep "MB/sec"
87542.00 MB transferred (2918.01 MB/sec)
~ # sysbench --test=memory --memory-block-size=1536K --max-time=30 run | grep "MB/sec"
102400.50 MB transferred (3425.64 MB/sec)
~ # sysbench --test=memory --memory-block-size=1280K --max-time=30 run | grep "MB/sec"
102400.00 MB transferred (4553.84 MB/sec)
~ # sysbench --test=memory --memory-block-size=1024K --max-time=30 run | grep "MB/sec"
102400.00 MB transferred (4923.30 MB/sec)
~ # sysbench --test=memory --memory-block-size=768K --max-time=30 run | grep "MB/sec"
102400.50 MB transferred (5254.89 MB/sec)
~ # sysbench --test=memory --memory-block-size=512K --max-time=30 run | grep "MB/sec"
102400.00 MB transferred (5554.41 MB/sec)
~ # sysbench --test=memory --memory-block-size=256K --max-time=30 run | grep "MB/sec"
102400.00 MB transferred (5219.42 MB/sec)

почему 512?

seed_stil ★★
()
Ответ на: яничегонепонял.жпг от seed_stil
~ # sysbench --num-threads=2 --test=memory --memory-block-size=1792K --max-time=30 run | grep "MB/sec"
102401.25 MB transferred (4693.60 MB/sec)
~ # sysbench --num-threads=2 --test=memory --memory-block-size=1280K --max-time=30 run | grep "MB/sec"
102400.00 MB transferred (5699.83 MB/sec)
~ # sysbench --num-threads=2 --test=memory --memory-block-size=1024K --max-time=30 run | grep "MB/sec"
102400.00 MB transferred (6116.81 MB/sec)
~ # sysbench --num-threads=2 --test=memory --memory-block-size=768K --max-time=30 run | grep "MB/sec"
102400.50 MB transferred (9571.63 MB/sec)
~ # sysbench --num-threads=2 --test=memory --memory-block-size=512K --max-time=30 run | grep "MB/sec"
102400.00 MB transferred (9041.24 MB/sec)
~ # sysbench --num-threads=2 --test=memory --memory-block-size=256K --max-time=30 run | grep "MB/sec"
102400.00 MB transferred (8413.01 MB/sec)
seed_stil ★★
()
Ответ на: комментарий от seed_stil

Да, два ядра, два потока общих, на сайте интела тоже утверждают про это.

Попробуй повторить тест с 256к, 512к, 1024к и 2048к после чистой загрузки системы.

glibych ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.