LinuxSEE

  • 首页
  • APACHE
  • CACTI
  • DNS_BIND
  • IPTABLES
  • LINUX杂记
  • LINUX系统性能分析
  • LOG_SERVER
  • LVS+KEEPALIVED
  • MFS
  • MYSQL
  • PHP
  • POSTFIX
  • RSYNC
  • SHELL
  • SQUID
  • VPN

Linux 内存管理机制简介(ZT)

分类:LINUX杂记日期:2012-01-12作者:雨尚

在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。这是Linux内存管理的一个优秀特性,在这方面,区别于 Windows的内存管理。主要特点是,无论物理内存有多大,Linux 都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能。而Windows 是只在需要内存时,才为应用程序分配内存,并不能充分利用大容量的内存空间。换句话说,每增加一些物理内存,Linux 都将能充分利用起来,发挥了硬件投资带来的好处,而Windows只将其做为摆设,即使增加8GB甚至更大。

Linux 的这一特性,主要是利用空闲的物理内存,划分出一部份空间,做为 cache 和 buffers ,以此提高数据访问性能。

1、什么是 cache ?

页高速缓存(cache)是 Linux内核实现的一种主要磁盘缓存。它主要用来减少对磁盘的I/O操作。具体地讲,是通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问。

磁盘高速缓存的价值在于两个方面:第一,访问磁盘的速度要远远低于访问内存的速度,因此,从内存访问数据比从磁盘访问速度更快。第二,数据一旦被访问,就很有可能在短期内再次被访问到。

页高速缓存是由内存中的物理页组成的,缓存中每一页都对应着磁盘中的多个块。每当内核开始执行一个页I/O操作时(通常是对普通文件中页大小的块进行磁盘操作),首先会检查需要的数据是否在高速缓存中,如果在,那么内核就直接使用高速缓存中的数据,从而避免访问磁盘。

举个例子,当使用文本编辑器打开一个源程序文件时,该文件的数据就被调入内存。编辑该文件的过程中,越来越多的数据会相继被调入内存页。最后,当你编译它的时候,内核可以直接使用页高速缓存中的页,而不需要重新从磁盘读取该文件了。因为用户往往会反复读取或操作同一个文件,所以页高速缓存能减少大量的磁盘操作。

2、cache 如何更新?

由于页高速缓存的缓存作用,写操作实际上会被延迟。当页高速缓存中的数据比后台存储的数据更新时,那么该数据就被称做脏数据。在内存中累积起来的脏页最终必须被写回磁盘。在以下两种情况发生时,脏页被写回磁盘:

◆当空闲内存低于一个特定的阈值时,内核必须将脏页写回磁盘,以便释放内存。

◆当脏页在内存中驻留时间超过一个特定的阈值时,内核必须将超时的脏页写回磁盘,以确保脏页不会无限期地驻留在内存中。

在2.6内核中,由一群内核线程—pdflush后台回写例程统一执行两种工作。

首先,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()。

 

Tags: Linux , 内存
  • 上一篇:squid日志内容详解
  • 下一篇:详解Linux系统内存中buffer和cache
2条评论
  1. 法兰琳卡 说:

    继续支持你!
    辛卯年(兔)腊月廿四 2012-1-17

    POST:2012-01-17 15:57 回复
  2. 法兰琳卡 说:

    祝博主龙年吉祥!
    辛卯年(兔)腊月廿五 2012-1-18

    POST:2012-01-17 20:25 回复
VPSYOU合作推广
发表评论 点击取消评论.

*必填

*必填

  • 关于LinuxSEE

日志存档

  • 2012 年一月
  • 2011 年十二月
  • 2011 年十一月
  • 2011 年十月
  • 2011 年九月
  • 2011 年八月
  • 2011 年七月
  • 2011 年六月
  • 2011 年五月
  • 2011 年四月
>

热门文章

  • Linux下OPENVPN安装配置
  • APNIC获取准确的IP地址段
  • 用ssh-tunnel模式加密mysql主从复制
  • MYSQL多主一从多实例配置
  • 强制LINUX用户第一次登录改密码命令
  • Linux下路由相关设置
  • 深入研究linux下命令之ls
  • 修改MySQL的内存表的三种方法
  • 非常实用的iptables脚本
  • 全国各地电信、网通、教育网及铁通的DNS服务器地址

随机文章

  • Linux基础深入学习之superblock、inode与block的关系
  • 中国最完整的sysctl.conf优化方案(ZT)
  • scp和rsync传输带宽控制
  • Apache性能优化(开启gzip压缩)
  • Linux下OPENVPN安装配置
  • MYSQL单表备份&恢复
  • 强制LINUX用户第一次登录改密码命令
  • MySQL效能监控工具mysqlreport
  • Linux服务器性能评估与优化(ZT)
  • Linux下syslog-ng安装笔记

最新评论

  • my blog is i»
    Post: 2012-02-15 05:34:01
  • My buddy and»
    Post: 2012-02-14 15:00:04
  • I got what y»
    Post: 2012-02-13 23:49:02
  • Aw, this was»
    Post: 2012-02-13 23:05:38
  • wonderful po»
    Post: 2012-02-10 13:42:50
  • An engrossin»
    Post: 2012-02-10 12:09:51
  • Hello just w»
    Post: 2012-02-09 20:03:14
  • Your content»
    Post: 2012-02-09 00:17:45
  • An interesti»
    Post: 2012-02-08 21:01:19
  • An intriguin»
    Post: 2012-02-08 21:01:19

友情链接

  • 80sec
  • 9inow手机资源门户
  • DBA Notes
  • DeBugFs
  • linuxany.com
  • LinuxTone
  • linux论坛
  • 千千春光
  • 占星师
  • 叶茂盛
  • 寒.枫
  • 张宴
  • 承德旅游日记
  • 最实用的Linux博客
  • 服务器运维
  • 木易水瓶
  • 淘宝数据库技术团队
  • 淘宝核心系统团队博客
  • 简朝阳
  • 运维人生
Copyright © 2011-2012 LinuxSEE All rights reserved.