Список кэша страниц Linux - PullRequest
0 голосов
/ 10 июля 2011

Я хочу получить список всех PFN, которые принадлежат кешу страниц.Один из способов - просмотреть каждый открытый файл / индекс и получить страницы address_space.Есть ли более простой способ?Не могу найти большой список кеш-страниц.Есть ли такой список / API, который я могу использовать?

1 Ответ

0 голосов
/ 31 октября 2011

да, что-то вроде того, что вы сказали - указатель address_space называется i_mapping для inode.

Так, например, внутри fs / drop_cache.c есть функция, которая перечисляет весь кэш страницы для суперблока:

static void drop_pagecache_sb(struct super_block *sb, void *unused)
{
        struct inode *inode, *toput_inode = NULL;

        spin_lock(&inode_sb_list_lock);
        list_for_each_entry(inode, &sb->s_inodes, i_sb_list) {
                spin_lock(&inode->i_lock);
                if ((inode->i_state & (I_FREEING|I_WILL_FREE|I_NEW)) ||
                    (inode->i_mapping->nrpages == 0)) {
                        spin_unlock(&inode->i_lock);
                        continue;
                }
                __iget(inode);
                spin_unlock(&inode->i_lock);
                spin_unlock(&inode_sb_list_lock);
                invalidate_mapping_pages(inode->i_mapping, 0, -1);
                iput(toput_inode);
                toput_inode = inode;
                spin_lock(&inode_sb_list_lock);
        }
        spin_unlock(&inode_sb_list_lock);
        iput(toput_inode);
}

Таким образом, вместо вызова invalidate_mapping_pages () будет использоваться указатель i_mapping для перечисления всего компонента pagecache.

Что касается перечисления блоков и, таким образом, идентификации PFN страницы, вы можете следовать этому здесь:

http://www.makelinux.net/books/ulk3/understandlk-CHP-15-SECT-2#understandlk-CHP-15-SECT-2.6

(15.2.6. Поиск блоков в кэше страниц).

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