Может грязь страниц mmap быть найденной от пространства пользователя?

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

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

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

Спасибо,

Chris.

15
задан fadedbee 17 June 2010 в 09:57
поделиться

5 ответов

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

См. Fs / proc / task_mmu.c, Documentation / vm / pagemap.txt, Documentation / vm / page-types.c.

12
ответ дан 1 December 2019 в 03:42
поделиться

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

2
ответ дан 1 December 2019 в 03:42
поделиться

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

5
ответ дан 1 December 2019 в 03:42
поделиться

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

Тем не менее, тональный способ состоит в том, чтобы отобразить его в одностраничных фрагментах, а затем посмотреть на / proc / pid / smaps , чтобы увидеть, не загрязнены ли фрагменты - при этом, это может не сработать, если ядро объединяет страницы.

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

1
ответ дан 1 December 2019 в 03:42
поделиться

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

0
ответ дан 1 December 2019 в 03:42
поделиться