Зворотний запис проти кешування кешування?


93

Я розумію, що основна різниця між двома методами полягає в тому, що в методі "write-through" дані записуються в основну пам'ять через кеш негайно, тоді як у "write-back" дані записуються в "останній час".

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


@EricWang Я думаю, ви маєте на увазі write backкращу продуктивність?
wlnirvana

@wlnirvana Так, ти маєш рацію, це моя канцелярська помилка. Я б видалив його і додав би тут новий коментар, щоб уникнути введення в оману в майбутньому.
Eric Wang

6
Простіше кажучи, write backмає кращу продуктивність, оскільки запис в основну пам’ять відбувається набагато повільніше, ніж запис у кеш процесора, а дані можуть бути короткими протягом (засоби можуть змінитися раніше, і немає необхідності зберігати стару версію в пам’яті). Це складна, але більш досконала, більшість пам’яті сучасного процесора використовують цю політику.
Eric Wang

Я бачу, що дано пояснювальну відповідь. Раджу поглянути на теги Write-Allocate, Write-NoAllocate після охоплення алгоритму зворотного запису.
ğağlayan DÖKME

Відповідь на ваше запитання полягає в тому, що при кешуванні через запис при записі в одному блоці потрібна лише одна запис в основну пам’ять. Детальніше див. У моїй відповіді.
qwr

Відповіді:


110

Перевага запису в основну пам’ять полягає в тому, що це спрощує конструкцію комп’ютерної системи. У режимі запису, основна пам’ять завжди має сучасну копію рядка. Отже, коли читання виконується, основна пам’ять завжди може відповісти із запитаними даними.

Якщо використовується зворотний зв’язок, іноді актуальні дані знаходяться в кеші процесора, а іноді - в основній пам’яті. Якщо дані знаходяться в кеші процесора, тоді цей процесор повинен зупинити відповідь основної пам'яті на запит на читання, оскільки в основній пам’яті може бути застаріла копія даних. Це складніше, ніж запис.

Крім того, запис може спростити протокол когерентності кеш-пам'яті, оскільки йому не потрібен стан Modify . У стані Modify записано, що кеш повинен записати назад рядок кешу, перш ніж він призведе до ануляції або виселення рядка. У записі рядок кешу завжди може бути анульований без зворотного запису, оскільки пам'ять вже має останню копію рядка.

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


7
Для відображеного в пам'яті вводу-виводу ці адреси зазвичай відображаються як некешовані. Запис можна також використовувати для підвищення надійності (наприклад, якщо L1 має лише захист від парності, а L2 має ECC). Запис також є більш популярним для менших кеш-пам’яті, які використовують функцію заборони розподілу (тобто пропуск запису не розподіляє блок в кеш-пам’яті, що потенційно зменшує попит на ємність L1 та пропускну здатність заповнення L2 / L1), оскільки більша частина обладнання для таких записів вже існує вимога до пропису.
Пол А. Клейтон,

1
чи можна перевірити, чи є метод мого кешу в моєму ядрі зворотним або запису?
Штучна

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

Команда @Shaowu "lshw", яка показує можливості кеш-пам’яті, як-от "асинхронний внутрішній зворотний зворотний
звіт

Я досі не розумію, які реальні кроки використовуються при зворотній переписці, але просто знаю, що це складно ... Не могли б ви надати більше ресурсів / подробиць про це?
Комбінаторік Гай

10

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

Що трапляється, так це те, що дані (A) з процесора записуються в перший рядок кешу. Встановлені дійсні біти та біти тегів. Брудний біт встановлений на 1.

Брудний біт просто вказує, що рядок кешу був коли-небудь записаний з моменту останнього введення в кеш!

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

Оскільки у нас є прямий зіставлений кеш, перший рядок можна просто замінити блоком E, який буде виведено з пам'яті. Але оскільки блок, останній записаний у рядок (блок A), ще не записаний в пам'ять (позначений брудним бітом), тому кеш-контролер спочатку видасть запис назад в пам'ять для передачі блоку A в пам'ять, потім він замінить рядок на блок E, видавши операцію зчитування в пам'ять. брудний біт тепер встановлений на 0.

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

Політика написання - це якраз навпаки. Відповідно до цього, пам’ять завжди матиме сучасні дані. Тобто, якщо кеш-блок записаний, пам’ять також буде записана відповідно. (без використання брудних шматочків)


7

можливо ця стаття може допомогти вам зв’язати тут

Запис: запис виконується синхронно як в кеш, так і в резервне сховище.

Зворотний запис (або Запис іззаду): запис виконується лише в кеш. Змінений блок кешу записується назад до сховища, безпосередньо перед тим, як його замінити.

Запис: Коли дані оновлюються, вони записуються як у кеш, так і у внутрішню пам’ять. Цей режим простий в експлуатації, але повільний при записі даних, оскільки дані повинні записуватись як у кеш, так і в пам’ять.

Зворотний запис: Коли дані оновлюються, вони записуються лише в кеш. Змінені дані записуються у внутрішню пам’ять лише тоді, коли дані видаляються з кешу. Цей режим має швидку швидкість запису даних, але дані будуть втрачені, якщо відбудеться збій живлення до того, як оновлені дані будуть записані в сховище.


3

Політики зворотного перепису та пропису описують, коли відбувається запис звернення , тобто коли кеш має необхідну інформацію. У цих прикладах ми припускаємо, що один процесор записує в основну пам’ять із кешем.

Запис: інформація записується в кеш і пам’ять, а запис закінчується, коли обидва закінчені. Ця перевага полягає в тому, що його простіше реалізувати, а основна пам’ять завжди узгоджується (синхронізовано) з кешем (для випадку однопроцесора - якщо якийсь інший пристрій модифікує основну пам’ять, цього правила недостатньо), а помилка читання ніколи не призводить до запису в основну пам'ять. Очевидним недоліком є ​​те, що кожне потрапляння на запис має робити два записи, один з яких отримує доступ до повільної основної пам'яті.

Зворотній запит : інформація записується в блок кешу. Модифікований блок кеш-пам'яті записується в пам'ять лише тоді, коли він замінюється (по суті, лінивий запис ). Спеціальний біт для кожного блоку кешу, брудний біт , позначає, чи був блок кеш-пам'яті змінений під час перебування в кеші. Якщо брудний біт не встановлений, блок кеш-пам'яті є "чистим", і пропуск запису не повинен записувати блок в пам'ять.

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

Політика щодо пропуску записів детально описана в моєму першому посиланні.

Ці протоколи не дбають про випадки з декількома процесорами та кількома кешами, як це поширено в сучасних процесорах. Для цього потрібні більш складні механізми когерентності кешу . Кешувані записи мають простіші протоколи, оскільки запис у кеш відразу відображається в пам'яті.

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


0

Зворотний запис є більш складним і вимагає складного протоколу когерентності кешу (MOESI), але він того вартий, оскільки робить систему швидкою та ефективною.

Єдина перевага Write-Through полягає в тому, що він робить реалізацію надзвичайно простою і не вимагає складного протоколу когерентності кешу.


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.