TLB пропускает против кеша?
Может ли кто-нибудь объяснить, пожалуйста, разницу между пропуском TLB (трансляционного буфера) и кешем?
Мне кажется, я обнаружил, что TLB относится к какому-то адресу виртуальной памяти, но мне было не совсем понятно, что это на самом деле означает?
Я понимаю, что ошибки кеширования возникают, когда блок памяти (размер строки кеша) загружается в (L3?) Кеш, и если требуемый адрес не содержится в текущих строках кеша - это пропуск кеша.
3 ответа
Все современные операционные системы используют виртуальную память. Каждый адрес, сгенерированный процессором, является виртуальным. Существуют таблицы страниц, которые отображают такие виртуальные адреса на физические адреса. А TLB - это просто кеш записей таблицы страниц.
С другой стороны, L1, L2, L3 кэшируют содержимое основной памяти.
Промах TLB происходит, когда отображение virtual memory address => physical memory address
для процессора запрошенный виртуальный адрес отсутствует в TLB. Затем эта запись должна быть извлечена из таблицы страниц в TLB.
Отсутствие кеша происходит, когда процессору требуется что-то, чего нет в кеше. Затем данные ищутся в первичной памяти (RAM). Если его там нет, данные должны быть извлечены из вторичной памяти (жесткого диска).
Следующая последовательность после загрузки первого адреса инструкции (т.е. виртуального адреса) в ПК делает концепцию пропуска TLB и пропуска кэша очень ясной.
Первая инструкция • Доступ к первой инструкции
- Возьми стартовый ПК
- Доступ к iTLB с помощью VPN, извлеченного из ПК: iTLBmiss
- Вызвать обработчик iTLBmiss
- Рассчитать адрес PTE
- Если PTEs кэшируются в данных L1 и L2, ищите их по адресу PTE: там вы тоже пропустите
- Доступ к таблице страниц в основной памяти: PTE недействителен: ошибка страницы
- Вызвать обработчик ошибок страницы
Выделите фрейм страницы, прочитайте страницу с диска, обновите PTE, загрузите PTE в iTLB, перезапустите выборку • Теперь у вас есть физический адрес
Доступ к Icache: скучаю
- Отправить запрос на пополнение на более высокий уровень: вы пропустите везде
- Отправить запрос контроллеру памяти (северный мост)
- Доступ к основной памяти
- Чтение строки кэша
- Пополните все уровни кеша, когда строка кеша возвращается к процессору
- Извлеките соответствующую инструкцию из строки кэша со смещением блока. • Это самая длинная задержка в доступе к инструкции / данным.
источник https://software.intel.com/en-us/articles/recap-virtual-memory-and-cache
Как упоминаются оба процесса. С точки зрения производительности, потеря кэша не обязательно останавливает процессор. Небольшое количество кеш-ошибок может быть допущено с использованием алгоритмических методов предварительной выборки. Однако пропадание TLB приводит к остановке ЦП, пока TLB не будет обновлен с новым адресом. Другими словами, предварительная выборка может маскировать промах кэша, но не промах TLB.