Измерение стоимости обработки пропусков TLB в x86-64 - программирование
Подтвердить что ты не робот

Измерение стоимости обработки пропусков TLB в x86-64

Я хочу оценить накладные расходы на производительность из-за промахов TLB на машине x86-64 (Intel Nehalem) под управлением Linux. Я хочу получить эту оценку, используя некоторые счетчики производительности. Есть ли у кого-нибудь какие-то указатели на лучший способ оценить это?

Спасибо Arka

4b9b3361

Ответ 1

Если вы можете получить доступ к системе на основе "Westmere", характеристики производительности вашего кода должны быть очень похожими на то, что у вас есть на "Nehalem", но у вас будет доступ к новому событию счетчика производительности оборудования, которое измеряет почти именно то, что вы хотите.

На Westmere лучшая оценка производительности, потерянная во время ожидания пропусков TLB, возможно, связана с счетчиком производительности оборудования Event 08H, Mask 04H "DTLB_LOAD_MISSES.WALK_CYCLES", который описывается как подсчет "Cycles Page Miss Handler занят с пропуском страницы из-за ошибки загрузки во втором уровне TLB". Это описано в "Руководствах разработчиков программного обеспечения Intel® 64 и IA-32" Том 3B: Руководство по системному программированию, часть 2 "(номер документа: 253669), доступный в Интернете по адресу http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-3b-part-2-manual.html

Причина, по которой это событие необходимо, заключается в том, что время обработки пропусков TLB занимает основное место, необходимое для чтения строки кэша, содержащей запись в таблице страниц. Если эта строка кэша находится в кэше L2, тогда накладные расходы пропусков TLB будут очень маленькими (порядка 10 циклов). Если строка находится в кеше L3, то может быть, 25 циклов. Если строка находится в памяти, то ~ 200 циклов.

  • Если в кэшах перевода страницы верхнего уровня есть промаха, для поиска и получения требуемой записи в таблице страниц потребуется несколько попыток, например, fooobar.com/info/47316/...).
  • На некоторых процессорах счетчики кэш-памяти L2 могут рассказать вам, сколько табличных прогулок попало и пропустило в L2, но не на Nehalem. (Это вряд ли поможет в этом случае, так как прогулки по TLB, которые попадают в L3, также довольно быстры, и вы действительно хотите, чтобы входы TLB приходили в память.)