Насколько быстрым является x86 при установке страницы в грязный бит? - PullRequest
19 голосов
/ 28 октября 2011

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

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

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

Ответы [ 3 ]

8 голосов
/ 28 октября 2011

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

5.4 Поля ввода таблицы перевода страниц
...
Dirty (D) Bit. Bit 6.<br> 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<br> 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<br> The operations on which the processor automatically follows the LOCK semantics are as follows:<br> ...<br> When updating page-directory and page-table entries —<br> 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 следует, что, как только ЦПУ установит «грязный» бит, используя заблокированную операцию, другие ЦП должны начать видеть обновленное значение.

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

5 голосов
/ 19 сентября 2012

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

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

(Выделение мое).

1 голос
/ 15 сентября 2014

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...