码迷,mamicode.com
首页 > 系统相关 > 详细

linux中的脏页写回

时间:2015-08-07 20:34:48      阅读:1017      评论:0      收藏:0      [点我收藏+]

标签:

为了减轻内存使用的压力,除了用户手动写回脏页以外,还有一些机制触发脏页写回。

比方说设置定时器,定期写回脏了很久的页。

具体介绍下面的写回机制,因为这种机制不像写回脏了很久的页的机制那样被动。

wakeu_bdflush 复杂唤醒写回的核心函数。

能触发此函数条件,可能会是以下几点中的一点会多:

1.用户态进程调用sync强制写回

2.grow_buffers()分配一个新的缓冲区页失败时 。此时的页中缓冲区块大小与要求的不同,因此要释放掉。

3.页框回收算法调用free_more_memoy()或try_to_free_page()     alloc_pages 分配器中就会调用后面这个函数

4.在内存池中分配元素失败。 内存池是作为动态分配失败后的最后分配手段,基本上好像驱动这部分使用内存池较多。

如果内存池分配都失败,那就一定要触发脏页写回了

 

由于以上原因,wakeu_bdflush 被唤醒。

只要此函数被唤醒,那么只要存在脏页就写回,或是如果脏页超过了一定的阈值,那么设置被写回脏页数量,然后 唤醒pdflush_operation函数,这个函数负责在pdflush内核线程链表中选择一个空闲的内核线程去执行。并去执行这个线程的回调函数。

回调函数总体的执行情况就是扫描超级块链表,如果超级块所属的索引节点有脏标记就写回。并检查脏页框是否低于阈值,如果不是,继续扫描下一个超级块

linux中的脏页写回

标签:

原文地址:http://my.oschina.net/u/1375613/blog/489179

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!