Что такое буфер магазина?
Может кто-нибудь объяснить, что такое буфер загрузки и чем он отличается от очередей аннулирования. а также разница между буферами хранилища и буферами объединения записи? Документ Пола Маккенни http://www.rdrop.com/users/paulmck/scalability/paper/whymb.2010.07.23a.pdf очень хорошо объясняет буферы хранилища и очереди аннулирования, но, к сожалению, не говорит о комбинировании записи буферы
1 ответ
Очередь аннулирования больше похожа на буфер хранилища, но это часть системы памяти, а не ЦП. По сути, это очередь, которая отслеживает недействительности и гарантирует, что они завершаются правильно, так что кэш может стать владельцем строки кэша, чтобы он мог затем написать эту строку. Очередь загрузки - это спекулятивная структура, которая отслеживает нагрузки в полете в неработающем процессоре. Например, может произойти следующее
- CPU спекулятивно выдает нагрузку от X
- Эта загрузка была в программном порядке после сохранения в Y, но адрес Y еще не разрешен, поэтому сохранение не продолжается.
- Y разрешается, и оно оказывается равным X. В то время, когда хранилище для Y разрешается, это хранилище ищет в очереди загрузки спекулятивные нагрузки, которые были созданы, но присутствуют после сохранения в Y в программном порядке. Он заметит нагрузку на X (которая равна Y) и должен раздавить эти инструкции, начиная с нагрузки X и далее.
Буфер хранилища - это спекулятивная структура, которая существует в ЦП, так же как и очередь загрузки, и позволяет ЦПУ спекулировать на хранилищах. Комбинированный буфер записи является частью системы памяти и, по сути, берет несколько небольших записей (например, 8-байтовые записи) и упаковывает их в одну большую транзакцию (64-байтовую строку кэша) перед отправкой их в систему памяти. Эти записи не являются спекулятивными и являются частью протокола согласованности. Цель состоит в том, чтобы сохранить пропускную способность шины. Как правило, буфер объединения записи используется для некэшированной записи на устройства ввода-вывода (часто для видеокарт). В устройствах ввода-вывода обычно выполняется куча программирования регистров устройств с помощью 8-байтовых записей, а буфер объединения записей позволяет объединять эти записи в более крупные транзакции при отправке их за пределы кэша.