LINUX kswapd和pdflush进程的含义

news/2024/7/20 15:57:59 标签: 运维, 内存管理, 数据结构与算法
首先,它们存在的目的不同:
    kswapd的作用是管理内存;
     pdflush的作用是同步内存和磁盘,当然因为数据写入磁盘前可能会换存在内存,这些缓存真正写入磁盘由三个原因趋势:1.用户要求缓存马上写入磁 盘;2.缓存过多,超过一定阀值,需要写入磁盘;3.内存吃紧,需要将缓存写入磁盘以腾出地方。上述原因使得kswapd和pdflush有交叉的地方, 因此很多人混淆了它们。
    它们相同的地方都是定期被唤醒,都是以守护进程(内核进程)的形式存在:
    kswapd试图保证内存永远都是可满足用户要求的,为了实现这种承诺,它必须采取一定的策略;
    pdflush试图保证内存和磁盘的数据是同步的,不会因为缓存的原因使内存和磁盘的数据不同步从而造成数据丢失或者损坏,为了实现这种承诺,它同样也要采取一定的策略。
     那么它们之间的交叉点在何处呢?比如,在用户要求内存不能被满足或者空闲内存的数量已经低于某一个值的时候,kswapd被唤醒,它必须为用户的要求提供 服务,因此试图换出一部分正在使用的内存使之成为空闲内存以供用户使用,这时,磁盘缓存也是正在被使用的内存,因此,kswapd需要将它们换出,这里的 换出和匿名页面被换到交换分区是一样的概念,将磁盘缓存换到哪里呢?当然哪里来哪里去了。linux不区分匿名页面对应的交换分区和真实文件的磁盘缓存对 应的磁盘文件分区,实际上在将匿名页面写到交换分区的时候也是按照写文件的形式进行的,读源代码的时候就会发现有一个 address_space_operations结构体,里面的readpage和writepage就是读写页面的回调函数,linux的这个实现方 式表明,写匿名页面和写ext2的缓存页面没有本质的区别,仅仅换一下那几个address_space_operations里面的回调函数就行。因此 kswapd也会将磁盘缓存回写到磁盘,和pdflush所作的工作一样,这就是它们交叉的地方,当然如果kswapd已经将页面写入了磁盘,就会清除掉 页面的脏标志,这样,在pdflush扫描脏页的时候就不会二次回写了。
     既然kswapd和pdflush有联系,那么联系它们的纽带是什么?当然是内核中的lru链表了,本来需要pdflush写入磁盘的页面也许要通过 kswapd写入,如何让kswapd看到pdflush负责的页面呢?实际上linux并没有刻意关注这个事情,内核那么复杂,如果这么细致的考虑问题 谁都会发疯的。因此linux采用了更加宏伟的方式,就是将事情抽象,不再操心什么回写啊,内存释放之类的细节,而是抽象出了内存管理和缓存管理这些个模 块,然后模块和模块之间建立一个耦合点,也可以理解成一个接口,这个东西就是lru链表,linux规定,凡是想纳入内存管理范畴的内存物理页面都要加入 lru链表,而kswapd就是内存管理的执行者,它操作的正是这个链表,这样它就不需要别的什么了,只需要告诉大家,你想让我管理,别让我去找你,你自 己加入lru链表吧,就这样而已。缓存管理模块当然想加入内存管理,因此所有的磁盘缓存页面都在加入缓存的同时加入了lru链表,这样缓存管理的执行者 pdflush和内存管理的执行者kswapd就不需要直接交互商量事情了,一个lru链表解除了它们的耦合。
    
     linux中到处都体现了这样的思想,它看似宏大的内核,实际上是高度模块化的,你不要觉得内核中有些东西好像杂糅在一起而被搞的焦头烂额,实际上仔细看 看代码就会发现它们之间的耦合点也就是一些很简单的结构,比如我前面文章提到的list_head或者kobject等等。不信的话再看看上面的 kswapd和pdflush,如果你想让内存加入缓存管理,那么就设置它为脏(设置一个标志),并加入一棵radix树(本质上radix树和链表没有 区  别,都是一个连接数据结构,早期的内核版本中的缓存就是链表结构连接起来的);如果你想让内存页面加入内存管理,那么就加入lru链表,如果你想两个都加 入呢?很简单,设为脏,加入radix树,再加入lru链表,之后就不用管了,kswap和pdflush会各司其职的,前者查lru,后者查radix   和标志位,它们之间唯一需要交互的就是,一方做完工作后要让另一方看到,这实际上不是它们之间的交互,而仅仅是一项工作的收尾工作,或者说是汇报工作,你 做完一件事总得有点效果吧。

转载于:https://www.cnblogs.com/centos-python/articles/8522364.html


http://www.niftyadmin.cn/n/1485942.html

相关文章

https 证书到期,手动更新

-1. 这里有第一次配置 https 证书步骤 https://blog.csdn.net/u013633921/article/details/129941674 0. 记录一下,因为 3 个月后还会用到的。。 1. 验证域名所有权(在某个目录下放置指定文件验证) http://172.245.xxx.xxx/.well-known/pki-…

【表格拼接】实现左右行数不等表格

效果&#xff1a; 代码&#xff1a; 当无法使用rowspan、colspan实现复杂表格时&#xff0c;不妨试试拼接表格&#xff0c;注意左右线对其即可。 <template><div class"main-table"><table class"left"><tr><th colspan"…

log4j 打印线程号配置_log4j.xml的配置--把日志输出到不同的文件去

需求是把某一类的日志单独输出到某个文件中&#xff0c;以达到某一类的操作&#xff0c;对应相应的日志文件。而不是都混在一起&#xff0c;查日志也不方便。 比如&#xff0c;修改用户的操作&#xff0c;记录到一个叫userOperateLog.log文件中。错误日志&#xff0c;比如空指针…

如何判断两物体加速度相等_「高中物理」瞬时加速度判断中绳与弹簧的力学特征...

基础知识瞬时加速度判断(1)牛顿第二定律是表示力的瞬时作用规律&#xff0c;描述的是力的瞬时作用效果———产生加速度。物体在某一时刻加速度的大小和方向&#xff0c;是由该物体在这一时刻所受到的合外力的大小和方向来决定的。当物体所受到的合外力发生变化时&#xff0c;它…

【echarts】图表配置tooltip 的formatter,附示例

这里写目录标题tooltip是什么&#xff1f;formatter 怎么配置?①字符串模板字符串模板示例&#xff1a;②回调函数回调函数示例&#xff1a;tooltip是什么&#xff1f; tooltip为提示框组件&#xff0c;实际上就是鼠标移到图表上后展示的类似数据点详情的一个说明。 在option…

同省异地社保卡要换吗_并不是所有的社保都可以异地转移的!社保的小常识你都知道吗?...

北京、上海、广州、深圳等城市作为中国的发达城市&#xff0c;经济水平远远的领先于其他的二三四线城市&#xff0c;所以工资水平相对也比较高&#xff0c;很多的三四线城市居民为了能够有较好的收入&#xff0c;纷纷离开家乡&#xff0c;奔赴北、上、广、深去谋求发展&#xf…

python和人工智能的关系-Python和人工智能到底有什么关系呢?

原标题&#xff1a;Python和人工智能到底有什么关系呢&#xff1f; 人工智能是利用先进的IT生产出能做出与人类相似的反应的智能机器&#xff0c;人工智能领域的研究包括&#xff1a;机器视觉、指纹识别、人脸识别、视网膜识别、虹膜识别、掌纹识别、专家系统、自动规划、智能搜…

仓库管理员怎样做台账_仓库管理员工作内容岗位职责有哪些

做为一个仓库管理员&#xff0c;首先要知道仓库管理员应该做什么&#xff0c;仓库管理员每天的工作内容是什么&#xff0c;要对哪些物件或者事情负责任&#xff0c;我综合整理了一下&#xff0c;把仓库管理员工作内容岗位职责介绍给各位朋友。1、按仓库管理制度规定做好物资进出…