kswapd和pdflush

kswapd介绍 一、概述众所周知,内存是⼿机的有限资源,而如何在有限的资源基础上,实现更优的性能、更好的用户体验,是每个系统开发⼯程师夜以继⽇攻克的⽬标。Linux系统为了提⾼系统性能,让每个APP有更快的反应速度,会尽量使⽤系统中的内存,例如缓存⼤量的pagecache,驻留更多的anon pages,以便进程可以直接访问,⽽⽆需实时触发缺⻚或IO来加载数据。但是,由于内存是有限的,⽽... 阅读详情

首先,它们存在的目的不同:
    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 和标志位,它们之间唯一需要交互的就是,一方做完工作后要让另一方看到,这实际上不是它们之间的交互,而仅仅是一项工作的收尾工作,或者说是汇报工作,你做完一件事总得有点效果吧。

kswapd 小结 kswapd 阅读详情

相关推荐

swap、swappiness以及kswapd

内存回收也不是越多越好,预留更多的内存换来的代价可能是更多的cache清除或者压缩更多的数据至swap分区,也会明显对用户体验造成影响。一切的调整既要保证性能,也要应付用户或者系统申请的页面分配请求,达到一个平衡的情况。以上这些只学习了swap、swappiness以及kswapd的基础概念,真正遇见了实际问题还是要结合代码去解决,学习概念只是为了自己在碰到问题时能有基础的概念,了解往哪个方向进行分析而不会一头雾水。

m0_53696288的博客 2156

linux kswapd0进程cpu占用一直居高不下

kswapd0是 Linux 内核中的一个进程,负责管理虚拟内存交换(swap)操作。当该进程的 CPU 占用率居高不下时,通常表示系统正在频繁地进行交换操作,可能由于内存不足或内存使用不合理。

u010674101的专栏 4903

Linux内存管理——kswapd守护进程

本文系统梳理了Linux内核中kswapd内存回收机制的核心原理与工作流程。其工作流程包含LRU链表扫描、二次机会算法、碎片整理协同等关键机制,在NUMA架构下按节点绑定线程。文章通过仓库管理员比喻形象阐释了kswapd如何通过平衡后台回收与前台性能,避免直接回收(direct reclaim)造成的进程卡顿,是Linux内存管理的核心组件。

m0_72426445的博客 1700

LINUX kswapdpdflush进程的含义

首先,它们存在的目的不同:kswapd的作用是管理内存; pdflush的作用是同步内存磁盘,当然因为数据写入磁盘前可能会换存在内存,这些缓存真正写入磁盘由三个原因趋势:1.用户要求缓存马上写入磁 盘;2.缓存过多,超过一定阀值,需要写入磁盘;3.内存吃紧,需要将缓存写入磁盘以腾出地方。上述原因使得kswapdpdflush有交叉的地方, 因此很多人混淆了它们。 ...

weixin_30773135的博客 322

【转】kswapdpdflush

文章摘自  http://blog.csdn.net/dog250/article/details/5303269 感谢作者的创作 首 先,它们存在的目的不同,kswap的作用是管理内存,pdflush的作用是同步内存磁盘,当然因为数据写入磁盘前可能会换存在内存,这些缓存真正写 入磁盘由三个原因趋势:1.用户要求缓存马上写入磁盘;2.缓存过多,超过一定阀值,需要写入磁盘;3.内存吃紧,需要

bobfsa的专栏 633

kswapd0,kjournald,pdflush 是干嘛的?

<br />以前服务器不忙的时候没有发现这几个进程,自从装了2个mysql以后,负载跑起来了,发现有几个不知道作用的进程,<br />google之后,记之<br />290 root      10  -5     0    0    0 S    1  0.0   1:40.26 kswapd0<br />1969 root      10  -5     0    0    0 D    0  0.0 165:27.61 kjournald<br />19080 root      15   0   

lengyuhong的专栏 6071

kswapd、kjournald、pdflush、kblocked、migration进程含义

1.kswapd0Linux uses kswapd for virtual memory management such that pages that have been recently accessed are kept in memory and less active pages are paged out to disk.(what is a page?)…Li...

weixin_34290352的博客 412

kswapd0、kjournald、pdflush、kblocked、migration进程含义

1.kswapd0 Linux uses kswapd for virtual memory management such that pages that have been recently accessed are kept in memory and less active pages are paged out to disk. (what is a pag...

weixin_34112900的博客 137

linux系统性能测试之虚拟内存管理篇

虚拟内存管理是 Linux 内核里面最复杂的部分,要弄懂这部分内容可能需要一整本书的讲解。VPSee 在这里只介绍性能监测有关的两个内核进程:kswapd pdflush。1、kswapd daemon 用来检查 ...

congsouzhao1438的博客 207

linux 进程的作用,linux的几个进程的作用

author:skatetime:2011/08/10linux的几个进程的作用1. kswapd0Linux uses kswapd for virtual memory management such that pages that have been recently accessedare kept in memory and less active pages are paged out...

weixin_42351910的博客 401
上一篇: kswapd和pdflush
下一篇: gvim+cscope +ctags on windows
yanook
博客等级 码龄16年 54粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值