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


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.