【随笔】Linux刷脏页

本文探讨Linux中脏页的由来、引入原因及pdflush机制。脏页是page cache中被修改并设置PG_dirty标志的页面,由于性能考虑,Linux延迟写操作。pdflush内核线程负责在数量和时间维度上刷脏页,以确保数据安全并控制内存占用。
摘要由CSDN通过智能技术生成

一、脏页的由来

前情摘要:

1. 在多级存储系统中,上一级高速设备会成为下一级低速设备的缓存。相较之内存,磁盘是一个低速设备,因此Linux中会通过一种叫“磁盘高速缓存”的软件机制来允许将磁盘上的一些数据保留在内存中,以加快访问速度。页高速缓存page cache就是Linux内核所使用的主要磁盘高速缓存(/proc/meminfo文件中,active(file)+inactive(file)+shmem+swapcached就是page cache,等于buffers+cached+swapcached,其中active(file)+inactive(file)在内存回收模块叫做file-backed page)。几乎所有的文件读写都依赖磁盘高速缓存,除非你设置了O_DIRECT标志;

active(file)+inactive(file)+shmem+swapcached = buffers+cached+swapcached = page cache

截图来自《understanding the linux kernel 3rd》15.1 page cahe章节:

2. Linux中文件系统主要分成三类:磁盘文件系统(例如ext系列)、基于内存的特殊文件系统(例如devtmpfs、bdev、proc、sys等)和网络文件系统(例如nfs),你可以通过mount指令不带参数查看,或者查看/proc/mounts,就能看到已经安装的文件系统及其对应的挂载点,通过/proc/filesystems文件能看到内核支持哪些文件系统,IO设备中块设备会涉及三个文件系统——设备文件系统devtmpfs、磁盘文件系统例如ext、块设备文件系统bdev;

3. 在Linux kernel 2.4.10以前有两种磁盘高速缓存,一种是文件缓存page cache,一种是设备缓冲buffer,都在struct page结构中,前者是address_space(实际上是指向inode->address_space),后者是buffer_head;在Linux kernel 2.4.10以后,设备缓冲和文件缓存都放在inode->address_space中,但是会通过不同的文件系统来做区别,page cache继续放在磁盘文件系统的inode中(例如ext系列),buffer虽然也是通过address_space中的radix tree来组织,不过是放在块设备文件系统bdev->inode中;

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值