Пытаюсь понять смысл событий perf: dTLB-load и dTLB-store?
Что означают события Perf: dTLB-загрузки и dTLB-store?
Ответы (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- промахи.
TLB-хранилище - это не запись в TLB, это запись по виртуальному адресу в основной памяти, который должен читать запись TLB.
Таким образом, TLB-хранилище - это TLB-ссылка, созданная операцией хранилища.
add [rdi], eax
одновременно и груз, и магазин. (И каждая часть выполняется отдельно, поэтому обе будут отдельными ссылками TLB). - person Peter Cordes   schedule 16.05.2019