По карапуз он BKDG от AMD 15h (стр 588), то possbile отключить аппаратную предвыборки, установив некоторые биты MSRC001_1022Perf статистика по AMD 15h
MSRC001_1022 Data Cache Configuration (DC_CFG)
Bits --> Description
63:16 --> Reserved.
15 --> DisPfHwForSw. Read-write. Reset: 0. 1=Disable hardware prefetches for software prefetches.
14 --> Reserved.
13 --> DisHwPf. Read-write. Reset: 0. 1=Disable the DC hardware prefetcher.
12:10 --> Reserved.
9:5 --> Reserved.
4 --> DisSpecTlbRld. Read-write. Reset: 0. 1=Disable speculative TLB reloads.
3:0 --> Reserved.
Для того, чтобы отключить все предварительной выборки конфиги, Я должен написать 0xA008 до , что MSR. Я сделал это для всех 32 ядер с помощью
[root <at> tiger exe]# wrmsr -a 0xc0011022 0xA008
[root <at> tiger exe]# rdmsr -a -x -0 0xc0011022
000000000000a008
...
Однако, когда я бег перфорации вместе с командой, статистика предвыборки отличен от нуля!
[root <at> tiger exe]# perf stat -e
L1-dcache-loads:uk,L1-dcache-prefetches:uk,L1-dcache-prefetch-misses:uk ./bzip2_base.amd64-m64-gcc44-nn
spec_init
Tested 64MB buffer: OK!
Performance counter stats for './bzip2_base.amd64-m64-gcc44-nn':
55,341,597,193 L1-dcache-loads:uk
1,047,662,614 L1-dcache-prefetches:uk
0 L1-dcache-prefetch-misses:uk
35.921618464 seconds time elapsed
Ожидаю увидеть 0 перед L1-dcache-prefetches. Не так ли?
Как я могу отлаживать счетчики, чтобы узнать, как они сопоставлены с MSR?
счетчики отладки с '-V' или' -vvv' [опции перманентной записи] (http://man7.org/linux/man-pages/man1/perf-record.1.html), некоторые из них распечатывают все аргументы, используемые в вызове 'perf_event_open'. Они могут быть синтетическими, поэтому проверьте часть ядра 'perf_events' (какая у вас версия ядра?) - они находятся в [' arch/x86/events/amd/core.c'] (http: //elixir.free- electron.com/linux/v4.8/source/arch/x86/events/amd/core.c): L1D OP_PREFETCH RESULT_ACCESS = '0x0267,/* Prefetcher данных: попытки загрузки * /' и l1-dcache равны '0x0040,/* Доступ к кэшу данных */' – osgx