События, вероятно, идентичны Скайлэйку, так что, вероятно, в нескольких шагах от работы. @Том
читал интересную статью под названием «Атака по боковому каналу с высоким разрешением на кэш последнего уровня» и хотел найти функцию хеширования индекса для моей собственной машины, то есть Intel Core i7-7500U (архитектура Kaby Lake) - следуя указаниям из этой работы.
Для обратного инжиниринга хеш-функции в документе упоминается первый шаг:
for (n=16; ; n++)
{
// ignore any miss on first run
for (fill=0; !fill; fill++)
{
// set pmc to count LLC miss
reset_pmc();
for (a=0; a<n; a++)
// set_count*line_size=2^19
load(a*2^19);
}
// get the LLC miss count
if (read_pmc()>0)
{
min = n;
break;
}
}
Как я могу кодироватьreset_pmc()
а такжеread_pmc()
в С ++? Из всего, что я читал онлайн, я думаю, что для этого требуется встроенный код ассемблера, но я понятия не имею, какие инструкции использовать, чтобы получить количество пропусков LLC. Я был бы признателен, если кто-то может указать код для этих двух шагов.
Я использую Ubuntu 16.04.1 (64-разрядная версия) на рабочей станции VMware.
П.С .: Я нашел упоминание об этихLONGEST_LAT_CACHE.REFERENCES
а такжеLONGEST_LAT_CACHE.MISSES
в главе 18 том 3ВРуководство разработчика программного обеспечения Intel Architectures, но я не знаю, как их использовать.