Что означают события Perf: dTLB-загрузки и dTLB-store?

Пытаюсь понять смысл событий perf: dTLB-load и dTLB-store?


person agood    schedule 16.05.2019    source источник
comment
Знаете ли вы разницу между загрузкой и операцией магазина? например add [rdi], eax одновременно и груз, и магазин. (И каждая часть выполняется отдельно, поэтому обе будут отдельными ссылками TLB).   -  person Peter Cordes    schedule 16.05.2019
comment
В целом я понимаю, что загрузка загружается из памяти, а хранилище записывает обратно в память, но я не понимаю, что такое TLB-хранилище. Из того, что я прочитал, запись TLB может быть изменена (например, изменен грязный бит или действительный бит), но где находится хранилище и почему?   -  person agood    schedule 16.05.2019


Ответы (2)


Когда виртуальная память включена, виртуальный адрес каждого отдельного доступа к памяти необходимо искать в TLB, чтобы получить соответствующий физический адрес и определить разрешения и привилегии доступа (или вызвать исключение в случае недопустимого сопоставления). События dTLB-loads и dTLB-stores представляют собой поиск TLB для загрузки памяти данных или доступа к хранилищу соответственно. Это perf определение этих событий. но точное значение зависит от микроархитектуры.

На Westmere, Skylake, Kaby Lake, Coffee Lake, Cannon Lake (и, вероятно, Ice Lake) dTLB-loads и dTLB-stores отображаются на MEM_INST_RETIRED.ALL_LOADS и MEM_INST_RETIRED.ALL_STORES соответственно. На Sandy Bridge, Ivy Bridge, Haswell, Broadwell, Goldmont, Goldmont Plus они сопоставлены с MEM_UOP_RETIRED.ALL_LOADS и MEM_UOP_RETIRED.ALL_STORES соответственно. В Core2, Nehalem, Bonnell, Saltwell они отображаются в L1D_CACHE_LD.MESI и L1D_CACHE_ST.MESI соответственно. (Обратите внимание, что на Bonnell и Saltwell официальные названия событий L1D_CACHE.LD и L1D_CACHE.ST, а коды событий, используемые perf, задокументированы только в томе 3 руководства Intel, а не в других источниках Intel по событиям производительности.) События dTLB-loads и dTLB-stores не поддерживаются в Silvermont и Airmont.

На всех текущих процессорах AMD dTLB-loads отображается на LsDcAccesses, а dTLB-stores не поддерживается. Однако LsDcAccesses подсчитывает поиск TLB как для загрузок, так и для хранилищ. На процессорах других производителей dTLB-loads и dTLB-stores не поддерживаются.

См. События аппаратного кэша и производительность, чтобы узнать, как сопоставить perf основные события с собственными событиями.

Количество событий dTLB-loads и dTLB-stores для одной и той же программы на разных микроархитектурах может отличаться не только из-за различий в микроархитектурах, но и из-за разного значения самих событий. Следовательно, даже если микроархитектурное поведение программы на микроархитектурах оказалось одинаковым, количество событий все равно может быть другим. Краткое описание встроенных событий во всех микроархитектурах Intel можно найти здесь, а более подробное описание некоторых микроархитектур можно найти на здесь.

Связано: как интерпретировать производительность iTLB-load, iTLB-load- промахи.

person Hadi Brais    schedule 16.05.2019

TLB-хранилище - это не запись в TLB, это запись по виртуальному адресу в основной памяти, который должен читать запись TLB.

Таким образом, TLB-хранилище - это TLB-ссылка, созданная операцией хранилища.

person Peter Cordes    schedule 16.05.2019