Имеется ли доступ к TLB после сброса строки кэша?

Предполагая, что мы намеренно взломали DTLB и хотели бы продолжить очистку определенной строки кэша от L1-3, используя clflush в области памяти, которая (наиболее вероятно) не пересекается с адресами, на которые указывают записи TLB; действительно ли это вернет базовый адрес страницы кэшируемой строки, которую мы сбрасываем, обратно в TLB?

Короче, clflush трогает TLB вообще? Я предполагаю, что из-за того, что эта инструкция учитывает согласованность, она впоследствии запишет эту строку обратно в память (очевидно, потребуется поиск TLB).


person awdz9nld    schedule 14.08.2014    source источник


Ответы (1)


Из Руководства разработчика программного обеспечения для архитектур Intel® 64 и IA-32, Том 2A: Справочник по набору инструкций, AL: «Аннулирует строку кэша, содержащую линейный адрес, указанный в исходном операнде со всех уровней иерархии кэша процессора (данные и инструкции). . "

Поскольку он использует линейный (виртуальный) адрес, адрес необходимо преобразовать, а это означает, что при промахе TLB потребуется обход таблицы страниц. (Как правило, это справедливо даже для другого типа инструкций, которые выталкивают записи кеша на более высокие уровни кеша, поскольку кеши L1 обычно физически помечены для x86. В общем, маркировка виртуальным адресом вышла из моды. физический адрес для тегов означает, что физический адрес необходим для проверки кеша на предмет попадания, поэтому, даже если он не был отправлен в память, потребуется перевод.)

Хотя было бы возможно избежать загрузки TLB для таких обращений, дополнительная сложность такой обработки в особых случаях почти наверняка не будет рассматриваться как стоящая, учитывая, что CLFLUSH обычно не используется.

person Paul A. Clayton    schedule 14.08.2014