Linux kernel 性能优化(五)Linux虚拟内存优化

Linux内核包含针对虚拟内存子系统的一系列可调参数。这些参数可以透过/proc接口来读取。而Linux提供了sysctl命令作为一个/proc文件系统的管理员接口并且可以优化VM子系统。有些参数是可调的而另外一些是只读的。
# sysctl –a | grep vm
vm.legacy_va_layout = 0
vm.vfs_cache_pressure = 100
vm.block_dump = 0
vm.laptop_mode = 0
vm.max_map_count = 65536
vm.min_free_kbytes = 512
vm.lower_zone_protection = 0
vm.hugetlb_shm_group = 0
vm.nr_hugepages = 0
vm.swappiness = 60
vm.nr_pdflush_threads = 2
vm.dirty_expire_centisecs = 3000
vm.dirty_writeback_centisecs = 500
vm.dirty_ratio = 40
vm.dirty_background_ratio = 10
vm.page-cluster = 3
vm.overcommit_ratio = 50
vm.overcommit_memory = 0
一下可调参数将会被讨论,因为他们都是对系统影响最大化的。

5.1 Laptop mode 笔记本模式
Laptop模式是一个延长笔记本电池寿命的设置。启用laptop模式时,当VM在决定读出页时将会试图最小化高功耗操作。特别在启用laptop模式时将会做如下操作:
•协调kswapd & pdflush的活动,防止不必要的磁盘循环操作譬如在磁盘活跃时写磁盘,这样的操作会浪费电量。

5.2 Overcommit memory 过量使用内存
过量使用内存Overcommit memory是一个在内存分配时设定的通用内核策略。
如果改值为 0,那么内核将在用户应用调用malloc时会检查是否有足够的空闲内存。如果有足够的内存,那么请求会被批准。否则将会被拒绝并且将返回一个错误代码到应用。
如果改值为1,那么内核不管当前内存分配状态为什么,都将会允许内存分配。
如果改值为2,那么内核将会批准超过物理内存和swap区域总量的内存分配请求,具体数目将由overcommit ratio的值来决定(将在后面讨论)。启用这个特性在某些情况下是很有用的:在最坏情况下申请大量的内存,但是却不会完全用到。
可以用free命令来检查看有多少内存正在使用并且有多少内存是空闲的。这个会确保所有的应用都以经使用了自己的内存。在以下的输出中,整个系统只在全部的256MB swap区域中使用了110MB.
# free
     total  used   free   shared buffers cached
Mem: 256044 110984 145060 0      4212    33820
-/+ buffers/cache: 72952 183092
Swap: 524280 17736 506544
如果应用都使用了全部的虚拟内存,那么你可以用ps命令来查看每个进程的情况。下面的输出显示了sendmail进程实际使用了多少的RAM (RSS)。
# ps -aux | egrep 'RSS| sendmail'
USER  PID  %CPU %MEM VSZ  RSS  TTY STAT START TIME COMMAND
smmsp 2108 0.0  0.9  6892 2436 ?   Ss   18:12 0:00 sendmail:
root  2100 0.0  1.0  7688 2668 ?   Ss   18:12 0:00 sendmail:
accepting connections

5.3 过度使用率overcommit ratio
这个可调参数定义了在overcommit memory被设置为2的时候,内核扩展内存资源的总量,这个文件的值代表了:当考虑批准一个特定的内存请求时,多少额外的百分比讲被加在现有的内存请求。如果这个值被设置成50,那么当在考虑是否批准应用的内存请求时,内核将会把一个有1GB RAM 和1GB swap的系统看成有2.5GB可分配内存。

5.4 脏页过期厘秒数dirty expire centisecs
这个以0.01秒为单位的可调参数定义了处于脏状态的磁盘缓冲区可以在RAM当中保留多长时间。当pdflush运行时,如果一个脏的缓冲区在RAM当中待过多余这个时间,将会被写回磁盘。不依赖于I/O的应用可以将这个参数调高来获益:降低因为pdflush请求磁盘I/O同步而产生的中断。


5.5 脏页写回厘秒数dirty writeback centisecs
这个同样以0.01s为单位的参数,定义了任何pdflush守护进程的两个迭代之间的poll间隔。降低这个值将会让pdflush任务更频繁地被唤醒,降低脏缓冲区的延迟,以及被写回磁盘的延时,然而降低会增加poll的间隔以及同步回磁盘的间隔。没有产生I/O的系统可以因为调高改参数而获益并且在pdflush运行时降低频率。

5.6 脏比例dirty ratio
这个用系统内存总量百分比来表示的值定义了产生脏缓冲区的进程将开始写回数据到磁盘的极限,而非依赖pdflush守护进程来完成。增加这个值将会让一个I/O敏感的进程的写磁盘和响应时间只有在有足够可用I/O带宽的情况下变快。如果这个值被调的过高,那么将会因为同时发送过多请求而导致一个I/O瓶颈。

5.7 页集群page-cluster
这个可调参数定义了在页错误的时候将会有多少数据被读入内存。为了降低磁盘I/O,Linux VM 只有页错误的时候才会将页读入内存,这个是基于被访问的数据页很快就会被同一个任务所访问。
如果系统是一个象大树据库这样顺续的I/O系统,那么将这个参数调高将会减少磁盘搜索以及将数据调回磁盘的循环操作。

5.8 交换性Swappiness
交换性(Swappiness)让一个管理员决定他们希望VM多快回收映射页,而非只是尝试清出脏缓存数据页。 决定是否回收映射页的算法是基于以下三方面:不活跃链表的百分比,系统映射内存的总量,以及swappiness值。
当调高swappiness值时,内核将会用更多资源去尝试释放RAM中已有的内存页,产生较少的I/O,但也增加了系统的CPU时间。如果你的系统是在一个可接受的程度运行,而你有20%~30%的空闲时间,你可能会调高参数让更多的CPU时间来释放内存。当降低swappiness,内核将用较少的系统CPU时间来释放内存并且产生更多的I/O,如果你的系统是CPU比较紧缺而有较多的I/O空闲,那么调低这个参数将会降低CPU周期并且利用更多的空闲I/O通道。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值