Буфер записи — это тип буфера данных , который можно использовать для хранения данных , записываемых из кэша в основную память или в следующий кэш в иерархии памяти , чтобы повысить производительность и уменьшить задержку . Он используется в некоторых архитектурах кэша ЦП , таких как Intel x86 и AMD64. [1] В многоядерных системах буферы записи нарушают последовательную согласованность . Некоторых программных дисциплин, таких как свобода от гонок данных в C11 [2] , достаточно, чтобы восстановить последовательно согласованное представление о памяти.
Вариант кэширования со сквозной записью называется буферизованной сквозной записью . [ нужна цитата ]
Использование буфера записи таким образом освобождает кэш для обслуживания запросов на чтение во время записи. Это особенно полезно для очень медленной основной памяти, поскольку последующие операции чтения могут выполняться без ожидания длительной задержки основной памяти. Когда буфер записи заполнен (т.е. все записи в буфере заняты), последующие записи все равно должны ждать, пока не освободятся слоты. Последующие операции чтения могут выполняться из буфера записи. Чтобы еще больше смягчить это зависание, можно реализовать одну оптимизацию, называемую слиянием буфера записи. Объединение буфера записи объединяет записи , имеющие последовательные адреса назначения, в одну запись буфера. В противном случае они заняли бы отдельные вводы, что увеличивает вероятность остановки трубопровода.
Буфер жертвы — это тип буфера записи, который хранит «грязные» вытесненные строки в кэшах обратной записи [примечание 1] , чтобы они могли быть записаны обратно в основную память. Помимо уменьшения задержки конвейера за счет отсутствия ожидания обратной записи грязных строк, как это делает простой буфер записи, буфер жертвы может также служить временным хранилищем резервных копий, когда последующие обращения к кэшу демонстрируют локальность , запрашивая те недавно удаленные строки, которые все еще находятся в жертве. буфер.
Буфер хранилища был изобретен IBM во время проекта ACS между 1964 и 1968 годами [3] , но впервые он был реализован в коммерческих продуктах в 1990-х годах.