На мікропроцесорі з апаратним управлінням TLB (скажімо, Intel x86-64), якщо трапляється помилка TLB і процесор переходить на таблицю сторінок, чи це (нечиповий) доступ до пам'яті, що проходить через ієрархію кешу (L1, L2 тощо). )?
На мікропроцесорі з апаратним управлінням TLB (скажімо, Intel x86-64), якщо трапляється помилка TLB і процесор переходить на таблицю сторінок, чи це (нечиповий) доступ до пам'яті, що проходить через ієрархію кешу (L1, L2 тощо). )?
Відповіді:
Так, наскільки я можу сказати, на процесорах Intel x86-64, коли трапляється помилка TLB і процесор переходить на таблицю сторінок, ці доходи до пам'яті без чіпа проходять через ієрархію кешу.
Я все ще трохи нечіткий щодо кількох деталей, і я сподіваюся, що якась інша відповідь їх заповнить - чи не існує посібника з Intel чи AMD, який описує детальну інформацію про прогулянку сторінки? Я розумію, що:
Діаграма на сторінці 2 Томаса В. Барра, Алана Л. Кокса, Скотта Рікснера. "Кешування перекладів: Пропустіть, не ходіть (таблиця сторінок)", яка малює лінію між "Записами, збереженими в кеш-пам'яті MMU" та "Записами, збереженими в кеш-даних L2". (Це може бути корисним документом для людей, які розробляють нові процесори , що абсолютно тематично для "Дизайну електроніки").
Стефан Еранян та Девід Мосбергер. "Віртуальна пам'ять в ядрі IA-64 Linux" та Ульріх Дреппер. "Що повинен знати кожен програміст про пам'ять" (Це може бути корисним документом для людей, що пишуть операційні системи, що мають справу з таблицею сторінок IA-64, що для ED є трохи поза темою - можливо, переповнення стека " системний "тег або тег " osdev " або вікі OSDev.org було б кращим місцем для цієї теми).
Таблиця A-10 на сторінці 533 від Intel. "Посібник для розробників програмного забезпечення для архітектури Intel® 64 та IA-32" "PAGE_WALKS.CYCLES ... може натякати на те, чи більшість прогулянок сторінками задовольняються кешами чи спричиняють пропуск кеш-пам'яті L2."
invlpg
щоб визнати недійсним кешування TLB для певного додавача virt. Якщо на веб-переході HW не знайдено запис для цієї віртуальної адреси або дозволи доступу не дозволяють отримати доступ, ви отримуєте #PF
виняток. ОС обробляє це, оновивши таблицю сторінок (можливо, після підключення даних з диска або за допомогою копіювання під час запису), а потім відновиться, щоб несправне завантаження / зберігання почнеться повторно, і проїзд сторінки HW матиме успіх.
Я схильний погоджуватися, що це належить до комп'ютерної архітектури stackexchange, а не до електроніки stackexchange, але оскільки це тут:
@davidcary правильний.
Деякі історії:
Прогулянки по таблиці Intel x86 на сторінках НЕ були кешовані аж до P5, він же Pentium. Точніше, доступ до пам’яті ходи таблиці сторінок не кешувався, обходив кеш. Оскільки більшість машин до цього часу були переписаними, вони отримували значення, що відповідають кешу. Але вони не сопіли схованки.
P6, також Pentium Pro, та AFAIK всі наступні прогулянки таблиці процесорів дозволяли отримувати доступ до кешу та використовувати значення, витягнуте з кеша. Таким чином, вони працювали з кешами для запису. (Ви, звичайно, можете розмістити таблиці сторінок у пам'яті, що не зберігається, що визначається, наприклад, MTRR. Але це велика втрата продуктивності, хоча це може бути корисно для налагодження ОС.)
До речі, цей "доступ до пам'яті ходу таблиці сторінок може отримати доступ до кешів даних" є окремим від "записи в таблиці сторінок можуть зберігатися (кешуватися) в TFB Ttranslation Lookaside Buffer)." На деяких машинах TLB називається "Кеш перекладу".
Інша пов'язана з цим проблема полягає в тому, що внутрішні вузли таблиць сторінок можуть зберігатись у кешованому режимі в ще більшій структурі даних, схожих на TLB, наприклад, кеш PDE.
Одне ключове відмінність: кеш даних є когерентним та перенесеним. Але кеші TLB і PDE не прострочені, тобто не є когерентними. Суть полягає в тому, що, оскільки таблиці сторінок можуть бути кешовані в невідповідних кешах TLB та PDE тощо, програмне забезпечення повинно явно промивати або окремі записи, або групові групи (наприклад, весь TLB), коли записи таблиці сторінок, які, можливо, були такими кешування змінено. Принаймні при зміні "небезпечним" способом, переходячи від RW-> R-> I або змінюючи адреси.
Я вважаю, що справедливо сказати, що кожного разу, коли додається новий тип не узгодженого кешування TLB, деяка ОС ламається, тому що мав неявні припущення, що цього не робиться.