В чем разница между буфером вытеснения и буфером слияния на процессоре ARM?
Я использую процессор Cortex A9 с двумя кэшами L1: один для данных, а другой для инструкций. Политика кэширования может быть либо "обратной записью", либо "сквозной". В техническом справочном руководстве Cortex-A9, раздел "7.1. О системе памяти L1", сказано, что кэш данных L1 имеет:
- один 32-байтовый буфер удаления
- 64-битный буфер хранилища с четырьмя входами
Я не понимаю разницу между этими двумя буферами. По моему мнению:
- "буфер выселения" используется для хранения грязных выселенных строк перед их записью в ОЗУ
- "буфер хранилища слияния" используется для хранения данных перед их записью в ОЗУ
Я предполагаю, что "буфер удаления" используется только с политикой обратной записи, в то время как "буфер хранилища слияния" используется только с политикой сквозной записи, но я не уверен в этой гипотезе.
Спасибо и извините за мой базовый английский.
2 ответа
Политика кэширования обратной записи или сквозной записи применяется только к доступам с кэшированием. Для устройства или строго упорядоченного, данные должны быть записаны без входа в кэш. Для доступа к устройству буфер хранилища слияния может использоваться для временного хранения данных, пока запись на устройство завершается. Процессор может идти и делать другие вещи.
В соответствии с буфером записи Википедии, сквозному кешу записи не нужен буфер для удаления. Буфер слияния хранилищ на самом деле не является функцией кеша и может рассматриваться как совершенно другая сущность. Но это связано с оптимизацией доступа к памяти (например, кеш) и находится в том же функциональном блоке.
Буфер слияния расположен между процессором и кешем; его цель - объединить смежные записи. Например, если вы выполняете последовательность смежных 8-битных записей, эти записи сначала накапливаются в буфере слияния, а затем записываются в кэш большими порциями и с меньшим количеством транзакций кеша.
Буфер вытеснения расположен между кешем и памятью (или, возможно, следующим уровнем кеша); его цель состоит в том, чтобы быть временным хранилищем для строки кеша, которая будет удалена из кеша, чтобы кеш уже мог повторно использовать теперь нераспределенную строку, не дожидаясь подтверждения о том, что вся строка была записана в память.