2015-04-24 1 views
4

Мне нужно получить статистику по страницам кеша открытого файла. Существует указатель address_space (f_mapping) в файловой структуре, который, в свою очередь, имеет корень дерева оснований, называемый page_tree. Мне нужно пройти это дерево, чтобы получить информацию обо всех кэшированных страницах для этого открытого файла.Как перемещаться по дереву кэша страниц (дерево radix) адресного пространства файла в ядре linux

Есть некоторые функции, как radix_tree_for_each_chunk (перебирать кусковые), radix_tree_for_each_chunk_slot (для перебора слотов в одном фрагменте) и т.д., используя эти функциональные возможности могут быть достигнуты. Я не уверен в правильном использовании (аргументах) того же самого. Было бы полезно, если бы был опубликован какой-либо пример.

ответ

2

Я понял это из исходного кода ядра Linux.

struct file *file = filp_open("filename",O_RDONLY,0); 
struct address_space *file_addr_space = file->f_mapping;    
if(file_addr_space==NULL){ 
    printk("error") 
}   
struct radix_tree_root file_page_tree_root = file_addr_space->page_tree; //contains all pages in page cache          
struct radix_tree_iter iter;    
void **slot;    
int num_dirty = 0; 
radix_tree_for_each_slot(slot,&file_page_tree_root,&iter,0){ 
    struct page *page = radix_tree_deref_slot(slot); 
    if(page!=NULL){ 
     //printk("information about page");     
    } 
} 
Смежные вопросы