Кэширование с обратной записью или сквозной записью?


93

Насколько я понимаю, основное различие между этими двумя методами заключается в том, что в методе со сквозной записью данные записываются в основную память через кеш немедленно, а в режиме с обратной записью данные записываются «позже».

Нам все еще нужно дождаться памяти «в последний раз», так что в чем преимущество «сквозной записи»?


@EricWang Я думаю, вы имеете в виду write backлучшую производительность?
wlnirvana 07

@wlnirvana Да, вы правы, это моя канцелярская ошибка. Я бы удалил его и поставил здесь новый комментарий, чтобы не вводить в заблуждение в будущем.
Эрик Ван

6
Проще говоря, write backимеет лучшую производительность, потому что запись в основную память намного медленнее, чем запись в кеш процессора, и данные могут быть короткими во время (средства могут снова измениться раньше, и нет необходимости помещать старую версию в память). Это сложно, но более изощренно, большая часть памяти в современных процессорах использует эту политику.
Эрик Ван

Я вижу, что дан пояснительный ответ. Я советую вам взглянуть на теги Write-Allocate, Write-NoAllocate после изучения алгоритма обратной записи.
Чаглаян ДЁКМЕ

Ответ на ваш вопрос заключается в том, что при сквозном кэшировании при записи в одном блоке требуется только одна запись в основную память. Подробности смотрите в моем ответе.
qwr

Ответы:


111

Преимущество сквозной записи в основную память состоит в том, что она упрощает конструкцию компьютерной системы. При сквозной записи в основной памяти всегда есть актуальная копия строки. Поэтому, когда чтение завершено, основная память всегда может ответить запрошенными данными.

Если используется обратная запись, иногда актуальные данные находятся в кэше процессора, а иногда - в основной памяти. Если данные находятся в кэше процессора, то этот процессор должен остановить ответ основной памяти на запрос чтения, поскольку в основной памяти может быть устаревшая копия данных. Это сложнее, чем сквозная запись.

Кроме того, сквозная запись может упростить протокол согласованности кэша, поскольку ему не требуется состояние Modify . Состояние Modify записывает, что кэш должен записать строку кэша, прежде чем он сделает строку недействительной или исключит ее. При сквозной записи строка кэша всегда может быть признана недействительной без обратной записи, поскольку в памяти уже есть актуальная копия строки.

Еще одна вещь - в программном обеспечении с архитектурой обратной записи, которое записывает в отображенные в память регистры ввода-вывода, необходимо предпринимать дополнительные шаги, чтобы обеспечить немедленную отправку записей из кеша. В противном случае записи не будут видны за пределами ядра до тех пор, пока строка не будет прочитана другим процессором или строка не будет удалена.


7
Для ввода-вывода с отображением в память эти адреса обычно отображаются как некэшированные. Сквозная запись также может использоваться для повышения надежности (например, если L1 имеет только защиту четности, а L2 имеет ECC). Сквозная запись также более популярна для небольших кешей, в которых используется выделение без записи (т. Е. При промахе записи блок не выделяется в кэш, что потенциально снижает потребность в емкости L1 и пропускной способности чтения / заполнения L2), поскольку большая часть оборудования требование для сквозной записи уже присутствует для такой записи.
Пол А. Клейтон

1
Можно ли проверить, поддерживает ли мой метод кеширования в моем ядре обратную запись или сквозную запись?
ArtificiallyIntelligence

4
Сказать, что обратная запись более сложна, может быть ошибкой, потому что процессор должен мешать основной памяти отвечать на запрос чтения. Более того, кеш отслеживает, какие данные являются данными (не выровненными с основной памятью), а какие нет, с помощью «грязных битов», поэтому можно вообще не проверять основную память.
steviejay

@Shaowu "lshw" команда, которая показывает возможности кеширования, такие как "асинхронная внутренняя обратная запись"
mug896

Я до сих пор не понимаю, какие реальные шаги используются при обратной записи, но просто знаю, что это сложно ... Не могли бы вы предоставить дополнительные ресурсы / подробности об этом?
qwerty9898

10

Давайте посмотрим на это на примере. Предположим, у нас есть кэш с прямым отображением и используется политика обратной записи. Итак, у нас есть действительный бит, грязный бит, тег и поле данных в строке кеша. Предположим, у нас есть операция: записать A (где A отображается в первую строку кеша).

Что происходит, так это то, что данные (A) от процессора записываются в первую строку кеша. Установлены действительные биты и биты тегов. Грязный бит установлен в 1.

Грязный бит просто указывает, была ли когда-либо записана строка кеша с момента последнего внесения в кеш!

Теперь предположим, что выполняется другая операция: чтение E (где E также отображается в первую строку кеша)

Поскольку у нас есть кэш с прямым отображением, первую строку можно просто заменить блоком E, который будет извлечен из памяти. Но поскольку последний записанный в строку блок (блок A) еще не записан в память (обозначенный грязным битом), контроллер кеша сначала выполнит обратную запись в память, чтобы передать блок A в память, а затем он заменит строку блоком E, выполнив операцию чтения в память. грязный бит теперь установлен в 0.

Таким образом, политика обратной записи не гарантирует, что блок будет таким же в памяти и связанной с ним строке кэша. Однако всякий раз, когда строка собирается заменить, сначала выполняется обратная запись.

Политика сквозной записи прямо противоположна. Согласно этому, в памяти всегда будут актуальные данные. То есть, если записывается блок кеша, соответственно будет записана и память. (без грязных битов)


7

возможно, эта статья поможет вам разместить ссылку здесь

Сквозная запись: запись выполняется синхронно как в кэш, так и в резервное хранилище.

Обратная запись (или отложенная запись): запись выполняется только в кэш. Измененный блок кэша записывается обратно в хранилище непосредственно перед заменой.

Сквозная запись: когда данные обновляются, они записываются как в кеш, так и во внутреннее хранилище. Этот режим прост в эксплуатации, но он медленен при записи данных, поскольку данные должны записываться как в кэш, так и в хранилище.

Обратная запись: при обновлении данных они записываются только в кеш. Измененные данные записываются во внутреннее хранилище только при удалении данных из кеша. Этот режим имеет высокую скорость записи данных, но данные будут потеряны, если произойдет сбой питания до того, как обновленные данные будут записаны в хранилище.


3

Обратная и сквозная запись описывают политики, когда происходит попадание записи , то есть когда в кэше есть запрошенная информация. В этих примерах мы предполагаем, что один процессор выполняет запись в основную память с помощью кеша.

Сквозная запись: информация записывается в кэш и память, и запись завершается, когда оба завершаются. Это имеет то преимущество, что его проще реализовать, и основная память всегда согласована (синхронизирована) с кешем (для однопроцессорного случая - если какое-то другое устройство изменяет основную память, тогда этой политики недостаточно), и промах при чтении никогда не приводит к записи в основную память. Очевидным недостатком является то, что каждое попадание записи должно производить две записи, одна из которых обращается к более медленной основной памяти.

Обратная запись: информация записывается в блок кеша. Измененный блок кэша записывается в память только при его замене (по сути, отложенная запись ). Специальный бит для каждого блока кэша, грязный бит , отмечает, был ли блок кеш-памяти изменен, находясь в кэше. Если грязный бит не установлен, блок кэша является «чистым», и промах при записи не должен записывать блок в память.

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

Правила пропуска записи подробно описаны в моей первой ссылке.

Эти протоколы не заботятся о случаях с несколькими процессорами и несколькими кешами, как это обычно бывает в современных процессорах. Для этого требуются более сложные механизмы согласованности кэша . Кеши со сквозной записью имеют более простые протоколы, поскольку запись в кэш немедленно отражается в памяти.

Хорошие ресурсы:


0

Обратная запись является более сложной задачей и требует сложного протокола согласования кэширования (MOESI), но оно того стоит, поскольку делает систему быстрой и эффективной.

Единственное преимущество сквозной записи заключается в том, что она делает реализацию чрезвычайно простой и не требует сложного протокола согласованности кэша.


1
WT по-прежнему нужен протокол согласованности. Хранилище из одного ядра по-прежнему должно аннулировать копии в других кэшах, чтобы они не читали устаревшие данные бесконечно. Atomic RMW нуждается в особой поддержке. Я думаю, все это проще с WT, но требуемая согласованность все еще несколько сложна.
Питер Кордес

Или, может быть, вы говорили об одноядерной системе с иерархией кеш-памяти L1 / L2 (а может и больше). В этом случае вам действительно не нужно использовать MESI / MOESI для внутренних кешей, которые выбираются через внешние кеши, если вы не хотите поддерживать согласованный с кешем DMA, который может обращаться к самому внешнему направлению кеширования. Но тогда вам все еще нужна согласованность для записи DMA, чтобы сделать внутренний кеш недействительным.
Питер Кордес

1
Протокол согласованности кэша необходим только в том случае, если требуется поддержка нескольких кешей / процессоров или что-то влияет на память, например DMA. У сквозной записи есть свои преимущества даже для однопроцессорных систем, а именно скорость записи.
qwr

Для DMA ОС может явно очищать кеш после ввода-вывода. Будучи программным обеспечением, он менее эффективен.
qwr
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.