Подтвердить что ты не робот

Как подсказка x86 при установке грязной бит страницы?

С точки зрения программного обеспечения, какова задержка между инструкцией, которая загружает страницу памяти и когда ядро ​​на самом деле помещает страницу в папку Entry Table (PTE)?

Другими словами, если инструкция dirtties на странице, может ли следующая инструкция считывать PTE и видеть, что бит грязной бит установлен?

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

4b9b3361

Ответ 1

Из руководства AMD (около 2005 года), том 2: Системное программирование:

5.4 Поля страницы ввода-передачи страницы
...
Dirty (D) Bit. Bit 6.
This bit is only present in the lowest level of the page-translation hierarchy. It indicates whether the pagetranslation table or physical page to which this entry points has been written. The D bit is set to 1 by the processor the first time there is a write to the physical page.

То же от Intel (около 2006 г.), том 3-A: Руководство по системному программированию, часть 1:

3.7.6 Записи в каталоге и таблице страниц
...
Dirty (D) flag, bit 6
Indicates whether a page has been written to when set. (This flag is not used in page-directory entries that point to page tables.) Memory management software typically clears this flag when a page is initially loaded into physical memory. The processor then sets this flag the first time a page is accessed for a write operation.

UPDATE

Из новейшего руководства intel (том 3A, Руководство по системному программированию):

8.1.2.1 Automatic Locking
The operations on which the processor automatically follows the LOCK semantics are as follows:
...
When updating page-directory and page-table entries —
When updating page-directory and page-table entries, the processor uses locked cycles to set the accessed and dirty flag in the page-directory and page-table entries.

Из остальной части текста в разделах 8.1 и 8.2 следует, что после того, как CPU устанавливает грязный бит с помощью заблокированной операции, другие ЦП должны начать видеть обновленное значение.

Конечно, у вас может быть состояние гонки, в котором вы сначала читаете грязный бит как 0 на одном CPU (или в одном из его потоков), а затем другой CPU (или другой поток на одном CPU) заставляет этот бит устанавливается в 1, но это не является чем-то необычным.

Ответ 2

Руководство программистов архитектуры AMD64 Том 2: Системное программирование (версия 3.22, сентябрь 2012 г.)

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

(Подчеркните мой.)

Ответ 3

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

Теперь, на вопрос: если CPU кэширует грязный бит, существует вероятность того, что обновление PTE (page-table-entry) произойдет не сразу. Это может быть отложено политикой кэширования обратной записи.

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