2015-04-24 28 views
4

我需要獲取打開文件的頁面緩存統計信息。在文件結構中有一個地址空間指針(f_mapping),該文件結構又具有名爲page_tree的基數樹的根。我需要遍歷該樹來獲取有關該打開文件的所有緩存頁面的信息。如何在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");     
    } 
}