Если вы можете получить доступ к системе на основе «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, которые должны вспомнить.)