Измерение стоимости обработки пропусков TLB в x86-64 - PullRequest
10 голосов
/ 18 февраля 2012

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

Спасибо Arka

1 Ответ

16 голосов
/ 13 марта 2012

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

На Westmere наилучшая оценка потери производительности при ожидании обработки пропусков TLB, вероятно, основана на счетчике производительности оборудования Событие 08H, маска 04H "DTLB_LOAD_MISSES.WALK_CYCLES", который описывается каксчитая, что "Обработчик пропусков циклов" занят просмотром страниц из-за пропадания загрузки в 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 циклов.

  • Если также имеется ошибка в кешах перевода страниц верхнего уровня, потребуется несколько поездок в память, чтобы найти и извлечь нужную запись таблицы страниц (например, https://stackoverflow.com/a/9674980/1264917).
  • На некоторых процессорах счетчики кэша L2 могут сообщать вам, сколько обходов таблиц выпало и пропущено в L2, но не в Nehalem. (Это не очень поможет в этом случае, так как обходы TLB, попадающие в L3,также довольно быстро, и вам действительно нужны прогулки по TLB, которые должны вспомнить.)
...