- 浏览: 7959767 次
- 性别:
- 来自: 广州
-
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
了提高读写文件速度,linux系统采用一种页缓存机制。当应用程序调用read,write等函数读写文件时,系统并不立即与硬盘
进行操作,而是查看需要读取的数据是否已在页缓存中,如不在,则从硬盘读取。当写入时,只是将数据写入至页缓存,然后
使用系统进程pdflush根据一定算法写入至硬盘,算法细节文章后部分会进行一个简单介绍。
系统当前页缓存大小等数据可以查看/proc/meminfo文件,下面是一个简单例子
[root@unimas_ses ]# cat /proc/meminfo
Cached: 1094972 kB
Dirty: 20484 kB
Writeback: 0 kB
为了阅读方便,很多与本文章内容不相关信息去除了。
Cached:当前页缓存大小
Dirty:页缓存中等待被写入硬盘数据大小
Writeback:正在写入硬盘数据大小,这个值一般为0,没办法,硬盘写入速度太快了。。。。
页缓存简单介绍完毕,下面就介绍刷新页缓存的pdflush进程了。系统里只能有2~8个pdflush进程,当前pdflush进程个数可以通过/proc/sys/vm/nr_pdflush_threads 查看。当系统内全部pdflush进程繁忙超过1秒后,系统会启动一新pdflush进程。当超过一秒后,系统当前全部pdflush进程空闲时,系统会杀死一个pdflush进程。
系统有一些可控参数影响pdflush进程行为:
/proc/sys/vm/dirty_writeback_centisecs :默认为500(单位百分之一秒),间隔多长时间唤醒pdflush进程进行工作。
但修改该配置文件一般不会对具体唤醒时间有影响,内核算法本身在根据系统实际情况进行控制。
/proc/sys/vm/dirty_expire_centiseconds :默认为3000(单位百分之一秒),数据在页缓存最长多久才会超时,刷入硬盘中。值得注意的是,默认时间为30秒,这说明一般情况下,数据会在页缓存30秒后,才会真正写入硬盘。
/proc/sys/vm/dirty_background_ratio :默认为10或者5(单位百分比),多少比例的Dirty数据在系统空闲内存中,才会刷入至硬盘。系统空闲内存计算方法=Cached+Memfree-Mapped.(这三个数据都是/proc/meminfo内)。
总结下来:系统刷新页缓存正常下只有2种情况,1:数据放入页缓存超过时限。2:页缓存中待写入数据大小已到达上线。
还有一种极端情况,当系统dirty数据大小大于等于/proc/sys/vm/dirty_ratio(默认为40%)时,write操作会堵塞,直至所有dirt写入至文件。可以通过dd if=/dev/zero of=hog模拟这种情况。
-------------------------------------
pdflush 进程详解
由于页高速缓存的缓存作用,写操作实际上会被延迟。当页高速缓存中的数据比后台存储的数据更新时,那么该数据就被称做脏数据。在内存中累积起来的脏页最终必须被写回磁
盘。在以下两种情况发生时,脏页被写回磁盘:
·当空闲内存低于一个特定的阈值时,内核必须将脏页写回磁盘,以便释放内存。
·当脏页在内存中驻留时间超过一个特定的阈值时,内核必须将超时的脏页写回磁盘,以确保脏页不会无限期地驻留在内存中。
上面两种工作的目的完全不同。实际上,在老内核中,这是由两个独立的内核线程(请看后面章节)分别完成的。但是在2.6内核中,由一群内核线程—pdflush后台回写例程—统
一执行两种工作。说pdflush是“dirty page flush”的缩写是不正确的,不用去管这个让人混淆的名称,我们来看看这两个目标是如何具体实现的。
首先,pdflush线程在系统中的空闲内存低于一个特定的阈值时,将脏页刷新回磁盘。该后台回写例程的目的在于在可用物理内存过低时,释放脏页以重新获得内存。特定的内存阈
值可以通过dirty_background_ratio sysctl系统调用设置。当空闲内存比阈值:dirty_ background_ratio还低时,内核便会调用函数wakeup_bdflush()唤醒一个pdflush线程,随
后pdflush线程进一步调用函数background_writeout()开始将脏页写回磁盘。函数background_ writeout()需要一个长整型参数,该参数指定试图写回的页面数目。函数
background_writeout()会连续地写出数据,直到满足以下两个条件:
·已经有指定的最小数目的页被写出到磁盘。
·空闲内存数已经回升,超过了阈值dirty_background_ratio。
上述条件确保了pdflush操作可以减轻系统中内存不足的压力。回写操作不会在达到这两个条件前停止,除非pdflush写回了所有的脏页,没有剩下的脏页可再被写回了。
满足第二个目标,pdflush后台例程会被周期性唤醒(和空闲内存是否过低无关),将那些在内存中驻留时间过长的脏页写出,确保内存中不会有长期存在的脏页。如果系统发生崩
溃,由于内存处于混乱之中,所以那些在内存中还没来得及写回磁盘的脏页就会丢失,所以周期性同步页高速缓存和磁盘非常重要。在系统启动时,内核初始化一个定时器,让它
周期地唤醒pdflush线程,随后使其运行函数wb_kupdate()。该函数将把所有驻留时间超过百分之dirty_expire_centisecs秒的脏页写回。然后定时器将再次被初始化为百分之
dirty_expire_ centisecs秒后唤醒pdflush线程。总而言之,pdflush线程周期地被唤醒并且把超过特定期限的脏页写回磁盘。
系统管理员可以在/proc/sys/vm中设置回写相关的参数,也可以通过sysctl系统调用设置它们。
进行操作,而是查看需要读取的数据是否已在页缓存中,如不在,则从硬盘读取。当写入时,只是将数据写入至页缓存,然后
使用系统进程pdflush根据一定算法写入至硬盘,算法细节文章后部分会进行一个简单介绍。
系统当前页缓存大小等数据可以查看/proc/meminfo文件,下面是一个简单例子
[root@unimas_ses ]# cat /proc/meminfo
Cached: 1094972 kB
Dirty: 20484 kB
Writeback: 0 kB
为了阅读方便,很多与本文章内容不相关信息去除了。
Cached:当前页缓存大小
Dirty:页缓存中等待被写入硬盘数据大小
Writeback:正在写入硬盘数据大小,这个值一般为0,没办法,硬盘写入速度太快了。。。。
页缓存简单介绍完毕,下面就介绍刷新页缓存的pdflush进程了。系统里只能有2~8个pdflush进程,当前pdflush进程个数可以通过/proc/sys/vm/nr_pdflush_threads 查看。当系统内全部pdflush进程繁忙超过1秒后,系统会启动一新pdflush进程。当超过一秒后,系统当前全部pdflush进程空闲时,系统会杀死一个pdflush进程。
系统有一些可控参数影响pdflush进程行为:
/proc/sys/vm/dirty_writeback_centisecs :默认为500(单位百分之一秒),间隔多长时间唤醒pdflush进程进行工作。
但修改该配置文件一般不会对具体唤醒时间有影响,内核算法本身在根据系统实际情况进行控制。
/proc/sys/vm/dirty_expire_centiseconds :默认为3000(单位百分之一秒),数据在页缓存最长多久才会超时,刷入硬盘中。值得注意的是,默认时间为30秒,这说明一般情况下,数据会在页缓存30秒后,才会真正写入硬盘。
/proc/sys/vm/dirty_background_ratio :默认为10或者5(单位百分比),多少比例的Dirty数据在系统空闲内存中,才会刷入至硬盘。系统空闲内存计算方法=Cached+Memfree-Mapped.(这三个数据都是/proc/meminfo内)。
总结下来:系统刷新页缓存正常下只有2种情况,1:数据放入页缓存超过时限。2:页缓存中待写入数据大小已到达上线。
还有一种极端情况,当系统dirty数据大小大于等于/proc/sys/vm/dirty_ratio(默认为40%)时,write操作会堵塞,直至所有dirt写入至文件。可以通过dd if=/dev/zero of=hog模拟这种情况。
-------------------------------------
pdflush 进程详解
由于页高速缓存的缓存作用,写操作实际上会被延迟。当页高速缓存中的数据比后台存储的数据更新时,那么该数据就被称做脏数据。在内存中累积起来的脏页最终必须被写回磁
盘。在以下两种情况发生时,脏页被写回磁盘:
·当空闲内存低于一个特定的阈值时,内核必须将脏页写回磁盘,以便释放内存。
·当脏页在内存中驻留时间超过一个特定的阈值时,内核必须将超时的脏页写回磁盘,以确保脏页不会无限期地驻留在内存中。
上面两种工作的目的完全不同。实际上,在老内核中,这是由两个独立的内核线程(请看后面章节)分别完成的。但是在2.6内核中,由一群内核线程—pdflush后台回写例程—统
一执行两种工作。说pdflush是“dirty page flush”的缩写是不正确的,不用去管这个让人混淆的名称,我们来看看这两个目标是如何具体实现的。
首先,pdflush线程在系统中的空闲内存低于一个特定的阈值时,将脏页刷新回磁盘。该后台回写例程的目的在于在可用物理内存过低时,释放脏页以重新获得内存。特定的内存阈
值可以通过dirty_background_ratio sysctl系统调用设置。当空闲内存比阈值:dirty_ background_ratio还低时,内核便会调用函数wakeup_bdflush()唤醒一个pdflush线程,随
后pdflush线程进一步调用函数background_writeout()开始将脏页写回磁盘。函数background_ writeout()需要一个长整型参数,该参数指定试图写回的页面数目。函数
background_writeout()会连续地写出数据,直到满足以下两个条件:
·已经有指定的最小数目的页被写出到磁盘。
·空闲内存数已经回升,超过了阈值dirty_background_ratio。
上述条件确保了pdflush操作可以减轻系统中内存不足的压力。回写操作不会在达到这两个条件前停止,除非pdflush写回了所有的脏页,没有剩下的脏页可再被写回了。
满足第二个目标,pdflush后台例程会被周期性唤醒(和空闲内存是否过低无关),将那些在内存中驻留时间过长的脏页写出,确保内存中不会有长期存在的脏页。如果系统发生崩
溃,由于内存处于混乱之中,所以那些在内存中还没来得及写回磁盘的脏页就会丢失,所以周期性同步页高速缓存和磁盘非常重要。在系统启动时,内核初始化一个定时器,让它
周期地唤醒pdflush线程,随后使其运行函数wb_kupdate()。该函数将把所有驻留时间超过百分之dirty_expire_centisecs秒的脏页写回。然后定时器将再次被初始化为百分之
dirty_expire_ centisecs秒后唤醒pdflush线程。总而言之,pdflush线程周期地被唤醒并且把超过特定期限的脏页写回磁盘。
系统管理员可以在/proc/sys/vm中设置回写相关的参数,也可以通过sysctl系统调用设置它们。
发表评论
-
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3114微软提供了不少命令行 ... -
挂载文件系统选项nodiratime、noatime等集合小结
2018-06-02 19:56 2680Linux系统文件有三个主 ... -
Linux如何查看当前占用CPU或内存最多的K个进程
2018-05-20 11:01 3307内存 可以使用以下命令查使用内存最多的K个进程 方法1: p ... -
(转)使用frp实现内网穿透
2018-05-14 13:33 2431https://www.jianshu.com/p/e8e26 ... -
docker小结1
2018-05-11 14:26 4891 通过dockerfile建立一个简单的HELLO.C,然后 ... -
LINUX下EPOLL等不错的文章收藏
2018-04-25 09:35 5751 通俗讲解 异步,非阻塞和 IO 复用 https:/ ... -
Ubuntu中root用户和user用户的相互切换
2018-04-06 12:46 10361)从user用户切换到root用户 不管是用图形模式登录U ... -
ubuntu下Virtualbox虚拟Ubuntu共享文件夹设置
2018-04-06 11:41 10181. 安装增强功能包(Guest Additions) 安装 ... -
Web网站压力及性能测试
2017-10-09 19:59 706https://segmentfault.com/a/1190 ... -
工具推荐:Netdata,Linux性能实时监测工具
2017-07-14 09:10 1184工具推荐:Netdata,Linux性能实时监测工具 http ... -
一个 Linux 下基于 Bash 的文件和数据库监控及备份工具,可发送微信报警通知
2017-07-11 07:07 1660一个 Linux 下基于 Bash 的文件和数据库监控及备份工 ... -
收藏个不错的能发送日志等警告信息等到微信的工具
2017-06-11 10:12 1083发现个将比如报警日志呀之类的提醒信息,发送给微信的好的工具,不 ... -
收藏:nginx教程从入门到精通(ttlsa出品)
2017-02-09 22:53 736http://www.ttlsa.com/nginx/ngin ... -
(转)从dstat理解Linux性能监控体系
2016-08-02 10:27 2585http://calvin1978.blogcn.com/ar ... -
linux下安装SZ,RZ命令
2016-02-26 20:59 1672在 linux 下,一般用secur crt等工具,今天居然 ... -
Clumsy —— 帮你模拟各种网络不稳定的环境,包括掉包
2014-11-14 09:12 1770Clumsy —— 帮你模拟各种网络不稳定的环境,包括掉包、延 ... -
ping+tracerout的unix下网络诊断小工具mtr
2014-07-29 22:04 1609今日才发现,原来linux中可以用ping和tracerout ... -
(转)Apache日志分割
2014-02-25 20:20 1626Apache和Ngix一样,对日志没有进行分割处理,这样很不方 ... -
linux下 cpu频率节能
2014-02-25 13:06 1445参考: http://linux-wiki.cn/wiki/z ... -
(转)最佳日志实践
2014-01-22 23:24 964http://www.bitstech.net/2014/01 ...
相关推荐
教学内容与要求 1掌握处理器在进程地址空间上的三种运行位置,了解内核编程不能使用C库函数和FPU,以及可能产生内存故障、核心栈溢出... 13熟悉页cache和radix_tree,缓冲区cache,和pdflush内核线程原理。(2小时)
如果进程需要的数据在这两个地方都没找到,就需要从磁盘上读取,此时内核过程就是 major page fault (MPF)。MPF 要求磁盘子系统检索页并缓存进 RAM。 一旦内存页被映射进内存的 buffer cache 中,内核将尝试从内存中...
脏页是被进程修改并标记为需要写回磁盘的页。当脏页数量过多、缓存空间不足,或脏页停留时间过长时,系统会将脏页刷新到磁盘。脏页的刷新可以通过`sync()`、`fsync()`或`fdatasync()`等系统调用来强制执行。内核还会...
- 磁盘IO体系:包括缓存、pdflush、bio、磁盘队列、IO调度器等,优化数据读写效率。 - IO调优:涉及IO调度策略,如NOOP、Deadline、CFQ等。 5. **Linux虚拟文件系统(VFS)**: - VFS提供统一的接口,支持多种...
脏页由内核的pdflush进程负责同步到磁盘,以确保数据一致性。 3. **Anonymous Pages(匿名页)**:这些页面属于某个进程但不与任何文件关联,因此无法被同步到磁盘。当内存紧张时,内核会将匿名页写入交换分区并...
- **pdflush**:负责将内存中已修改的内容同步到磁盘上的内核线程。 - **经验参考值**:当系统开始频繁地使用虚拟内存时,可能意味着物理内存不足,需考虑增加物理内存或优化应用。 ##### 3. 磁盘 I/O - **...
用户 write 调用完成后,页被修改后成为脏页,操作系统有两种机制将脏页写回磁盘,一是用户手动调用 fsync(),二是由 pdflush 进程定时将脏页写回磁盘。 然而,这个过程中牵涉到两次数据拷贝:一次是用户空间内存...
在Linux系统中,pdflush是一个后台进程,负责将缓存中的脏页(dirty pages)刷新到磁盘。根据给定部分内容,当满足以下条件之一时,pdflush将被触发: - **脏数据存在的时间超过`dirty_expire_centisecs`**(默认为...
- **pdflush**:负责将内存中的内容与文件系统进行同步操作,即将写操作返回时数据并没有真正写到磁盘上,而是先写到了系统的cache中,随后由pdflush内核线程将系统中的脏页写到磁盘上。 ##### 工具介绍 - **cat /...
#### 三、内核进程 kswapd 和 pdflush Linux 内核中存在两个关键的进程,用于管理和优化虚拟内存的使用: 1. **kswapd**: - 这个守护进程的主要任务是监控内存的使用情况,并确保有足够的可用内存。它会根据预设...
- **pdflush**:负责将脏页(已修改但未写回磁盘的内存页)写回磁盘,防止内存过度压力。 3. **问题识别**: - 高频率的上下文切换和系统时间可能表明程序大量使用系统调用。 - 高内存使用率和SWAP活动可能意味...
pdflush是另一个重要的内核进程,它负责将脏页写回磁盘。合理的配置可以减少磁盘I/O操作带来的延迟。 ##### 5.6 案例研究:大量入站I/O 本案例研究探讨了在面临大量入站I/O请求时,虚拟内存管理机制如何工作,以及...
- **pdflush**:另一个与内存管理相关的内核进程,主要用于将脏页面(即修改后未同步到磁盘的页面)写回到磁盘上。 #### 七、I/O监控 - **读写数据页**:I/O操作涉及到的数据传输,包括从磁盘读取到内存以及从内存...
- **pdflush守护进程**:用于加快数据页写回磁盘的速度,从而释放更多的物理内存供系统使用。 #### 七、I/O监控 - **读写数据**:监控应用程序对磁盘的读写活动,评估其对磁盘I/O的影响。 - **主要和次要页面故障*...
- **pdflush**:用于强制将修改过的内存页写回磁盘,从而释放更多的物理内存供其他进程使用。 #### 五、I/O监控介绍 - **读写数据**:I/O操作涉及将数据从磁盘读取到内存或将数据从内存写入磁盘。 - **页错误**:...
此外,还有`[pdflush]`负责管理页缓存中的脏页写回,以及`[kjournald]`作为日志记录线程,服务于文件系统日志功能。 #### 工作队列与软中断:延后执行的策略 工作队列和软中断是内核线程管理中的两个重要概念。...
3. **Page Cache**:内核使用 pdflush 线程监控 Page Cache 中的脏页,并根据需要将其提交到 IO 调度队列。IO 调度器负责决定何时以及如何将数据写回磁盘。 #### 五、磁盘 I/O 调度与优化 磁盘 I/O 调度是一个复杂...
### 知识点详解 #### 一、虚拟文件系统概述 **1.1 通用文件模型** 在Linux操作系统中,所有设备都被抽象...以上是关于虚拟文件系统(VFS)及其相关组件的主要知识点,它们共同构成了Linux内核文件系统管理的核心部分。