网站建设资讯

NEWS

网站建设资讯

十六、页高速缓存和页回写-创新互联

页高速缓存是linux内核实现磁盘缓存。它主要用来减少对磁盘的IO操作。具体地讲,是通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问。

专注于为中小企业提供网站制作、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业庐江免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了数千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

16.1 缓存手段

16.2 Linux页高速缓存

16.2.1 address_space对象

在页高速缓存中的页可能包含了多个不连续的物理磁盘块。Linux页高速缓存对被缓存的页面范围定义非常宽泛。

address_space结构体是虚拟地址区间vm_area_struct的物理地址对等体。当一个文件可以被10个vm_area_struct结构体标识,那么这个文件只能有一个address_space数据结构——也就是文件可以有多个虚拟地址,但是只能在物理内存有一份。

struct address_space{

struct inode  *host;//拥有节点

struct radix_tree_root page_tree;//包含全部页面的radix数

spinlock_t tree_lock; //保护page_tree的锁

unsigned int  i_mmap_writable //VM_SHARED 计数

struct prio_tree_root i_mmap; //私有映射链表

struct list_head  i_mmap_nonlinear; //VM_NONLINEAR 链表

spinlock_t    i_mmap_lock; //保护i_mmap的自旋锁

atomic_t    truncate_count; //截断计数

unsigned long nrpages; //页总数

pgoff_t   writeback_index;//回写的起始偏移

struct address_space_operations *a_ops; //操作表

unsigned long flags; //gfp_mask掩码与错误标识

struct backing_dev_info *backing_dev_info; //预读信息

spinlock_t private_lock; //私有address_space锁

struct list_head  private_list ;//私有address_space链表

struct address_space *assoc_mapping; //相关的缓冲

}

16.2.2 address_space操作

16.2.3 基树

每个address_space对象都有唯一的基树,保存在page_tree域中。基树是一个二叉树,只要指定了文件偏移量,就可以在基树中迅速检索到对应的页。

16.2.4 基树以前使用页散列表

16.3 缓冲区高速缓存

16.4 flusher

当页高速缓存中的数据比后台存储数据新时,页高速缓存中对应的页被标记为脏。脏页会在以下情况被写回磁盘:

1、当空闲内存低于一个特定的值。

2、脏页在页高速缓存中驻留时间超过特定值

3、用户进程调用sync()和fsync()。

在系统启动时,内核初始化一个定时器,让他周期的唤醒flusher线程,随后使其运行函数wb_writeback()。该函数把驻留之间超过dirty_expire_interval ms的脏页写回实际存储。然后定时器将再次被初始化为dirty_expire_centisecs秒后唤醒flusher线程,再次执行上述任务。


网站栏目:十六、页高速缓存和页回写-创新互联
链接地址:http://cdweb.net/article/dihcgh.html