page cache页面缓存

作者: chozee | 来源:发表于2021-01-13 09:40 被阅读0次

    为什么设计缓存?

    1. 存储设备访问速度的巨大差异
    2. temporal
    

    如何设计缓存?

    1. 大小
    2. 对齐,方便寻址
    3. 一致性(主要是写策略)
    
        3.1 nowrite
        3.2 write-through cache
        3.3 回写,标dirty,按阈值回写
            回写又要考虑何时写? 怎么写
    
            3.3.1 按时间定期回写
            3.3.2 按实际大小
            3.3.3 按脏页百分比
            3.3.4 调用sync(),fsync()
    
            回写方式
    
            1. 阻塞写 stop process
            2. 异步写, 启动一个线程
    
            2.6之后由一群内核线程(flusher线程)执行wirteback
    
    4. 缓存回收
    
        有缓存就要考虑其回收
        LRU及其他算法(以前是按时间的单链现在是双链(甚至n链LRU/n),单链对只访问一次文件再不访问的情景很不好)
    

    页面缓存都缓存什么?

    读写操作时,缓存如下文件:
    
    * 正规文件
    * 块设备文件
    * 内存映射文件
    
    若页是4KB,物理块是512B,那一个页可能包含多个块,并且可以不连续.
    所以索引不能用设备名称和块号做page cache中数据的索引
    
    为什么不用设备号,块以及inode进行索引?
    
        因为Linux想缓存除了文件系统之外的可以基于页的对象
        所以通过结构体address_space来管理缓存和页I/O
        页面缓存不同进程共享. (通过虚拟地址vm_area_struct, 即文件可以有多个虚拟地址,但是物理存内存只一份)
    

    相关文章

      网友评论

        本文标题:page cache页面缓存

        本文链接:https://www.haomeiwen.com/subject/xhfuaktx.html