Прочистването на кеш линия има ли достъп до TLB?

Ако приемем, че умишлено сме разбили DTLB и бихме искали да продължим да изчистваме конкретен кеш ред от L1-3, използвайки clflush в област на паметта, която (най-вероятно) е различна от адресите, посочени от TLB записите; това всъщност ще върне ли основния адрес на страницата на реда на кеша, който изтриваме обратно в TLB?

Накратко, clflush докосва ли изобщо TLB? Предполагам, че поради тази инструкция, зачитаща кохерентността, впоследствие ще запише този ред обратно в паметта (очевидно се нуждае от TLB справка.)


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


Отговори (1)


От Ръководство за разработчици на софтуер за Intel® 64 и IA-32 Architectures, том 2A: Справочник за набор от инструкции, A-L: „Невалиден редът на кеша, който съдържа линейния адрес, указан с операнда източник от всички нива на йерархията на кеша на процесора (данни и инструкции) ."

Тъй като използва линейния (виртуален) адрес, адресът трябва да бъде преведен, което означава, че ще е необходима разходка в таблицата на страницата при пропуск на TLB. (Това обикновено би бил случаят дори за различен вид инструкции, които избутват записи в кеша до по-високи нива на кеша, тъй като L1 кешовете обикновено са физически маркирани за x86. Като цяло, маркирането с виртуалния адрес е излязло от полза. Използването на физически адрес за етикети означава, че физическият адрес е необходим за проверка на кеша за попадение, така че дори и да не е изпратен в паметта, ще е необходим превод.)

Въпреки че би било възможно да се избегне зареждането на TLB за такива достъпи, допълнителната сложност на такава обработка на специални случаи почти със сигурност няма да се разглежда като заслужаваща труда, като се има предвид, че CLFLUSH не се използва често.

person Paul A. Clayton    schedule 14.08.2014