Можно ли найти грязные страницы в mmap из пространства пользователя? - PullRequest
15 голосов
/ 17 июня 2010

Можно ли получить доступ к грязным страницам (не общего) mmap из пространства пользователя в linux 2.6.30+?Приветствуются платформенные хаки и кладжи.

В идеале я ищу массив битов, по одному на страницу (4 КБ?) Области mmap, которые устанавливаются, если эта страница была записанатак как регион был mmap'ed.

(я знаю, что процесс, выполняющий запись, мог бы отслеживать эту информацию - но это глупо делать, если ядро ​​делает это в любом случае.)

Спасибо,

Крис.

Ответы [ 5 ]

12 голосов
/ 22 июня 2010

См. Интерфейсы / proc / * / pagemap и / proc / kpageflags.Первый говорит вам PFN для адреса, второй сообщает вам грязный бит с данным PFN.

См. Fs / proc / task_mmu.c, Документация / vm / pagemap.txt, Документация / vm / page-types.c.

5 голосов
/ 19 июня 2010

Традиционное решение состоит в том, чтобы mprotect только для чтения, а затем обработать sigsegv и пометить «грязный» перед повторной защитой для разрешения записи.Мы сделали это в ObjectStore давно для этой цели.

2 голосов
/ 17 июня 2010

generic_writepages и balance_dirty_pages_ratelimited_nr являются точками входа в ядро ​​(2.6.20), которые связаны с грязными страницами. Я надеюсь, что они работают в 2.6.30+. Интересный вопрос, могу ли я спросить, что вы пишете, что требует такого контроля над страницами?

1 голос
/ 21 июня 2010

Эти данные будут постоянно устаревать - возможно, страница может быть перезаписана после того, как ваш процесс обнаружит, что страница грязная.

Тем не менее, тональный способ - отобразить его на одностраничные чанки, а затем посмотреть на /proc/pid/smaps, чтобы проверить, не являются ли чанки грязными.

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

0 голосов
/ 19 июня 2010

Если ваш массив битов достаточно мал, возможно, вы можете использовать регистры отладки в Intel (хотя я не уверен, как это делается в Linux).

...