转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。
相关文章:
前言
本文总结GlusterFS系统Linux内核调优的几个重要参数。
1. vm.swappiness=0
在/etc/sysctl.conf修改参数:
vm.swappiness=0 #通过取消swap功能可以降低磁盘IO的占用率来让用户购买更多的内存、提高磁盘寿命和性能。
sysctl -p 生效
vm.swappiness参数解说:
代表了内核对于交换空间的喜好(或厌恶)程度。Swappiness 可以有 0 到 100 的值,默认的大小通常是60,也有的是30。
如果内存较为充裕,则可以将vm.swappiness大小设定为30;如果内存较少,可以设定为60。但将值设置为“0” 性能可得到较大提高。
2. vm.vfs_cache_pressure
设置参数 vm.vfs_cache_pressure 高于100
vm.vfs_cache_pressure参数解说:
vm.vfs_cache_pressure参数表示内核回收用于缓存目录(directory)和索引节点(inode)内存的倾向,默认值值是100
缺省值=100,表示内核将根据pagecache和swapcache,把directory和inode cache保持在一个合理的百分比;
降低该值低于100,将导致内核倾向于保留directory和inode cache;
增加该值超过100,将导致内核倾向于回收directory和inode cache。
该值若设置为0,则永远不会回收directory和inode cache,这容易给内存带来压力,导致OOM。
3. 文件系统缓存参数
参数:
vm.dirty_background_ratio 默认值10(表示内存的10%)
vm.dirty_ratio 默认值20(表示内存的20%)
优化点:
vm.dirty_background_ratio < vm.dirty_ratio,大于等于默认值
vm.dirty_background_ratio: 这个参数指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如5%)就会触发pdflush/flush/kdmflush等后台回写进程运行,将一定缓存的脏页异步地刷入外存;
vm.dirty_ratio: 而这个参数则指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如10%),系统不得不开始处理缓存脏页(因为此时脏页数量已经比较多,为了避免数据丢失需要将一定脏页刷入外存);在此过程中很多应用进程可能会因为系统转而处理文件IO而阻塞。
正常都是先达到vm.dirty_background_ratio的条件然后触发flush进程进行异步的回写操作,但是这一过程中应用进程仍然可以进行写操作,如果多个应用进程写入的量大于flush进程刷出的量那自然会达到vm.dirty_ratio这个参数所设定的坎,此时操作系统会转入同步地处理脏页的过程,阻塞应用进程。
也就是说,正常vm.dirty_background_ratio < vm.dirty_ratio才有意义。在gfs中,比较建议这两个参数值设置在默认值或者比默认值稍高一些。
4. 页面缓存
修改参数:
“1” > /proc/sys/vm/pagecache
页面缓存是一种磁盘缓存,用于保存来自文件和可执行文件的数据 程序,即.pages文件或块设备的实际内容。
页面缓存(磁盘缓存)用于减少磁盘读取次数。一个 值“1”表示 1% 的 RAM
5. I/O调度器参数
调整参数:
“deadline” > /sys/block/sdc/queue/scheduler
I/O 调度程序是 Linux 内核的一个组件,它决定读写缓冲区如何为底层设备排队。从理论上讲,“noop”更适合智能RAID控制器,因为 Linux 对(物理)磁盘几何一无所知,因此它可以 高效地让控制器,充分了解磁盘几何形状,尽快处理请求。但设置“deadline”能在一定程度上增强性能。
6. I/O 请求参数
调整参数:
“256” > /sys/block/sdc/queue/nr_requests
这是在Scheduler将I/O请求传送到磁盘之前进行缓冲的请求的大小。某些控制器的内部队列大小(queue_depth)大于I/O调度器的nr_requests,因此I/O调度器没有太多机会对请求进行正确排序和合并。Deadline或CFQ调度器喜欢将nr_requests设置为queue_depth值的2倍,这是给定控制器的默认值。合并顺序和请求有助于调度器在大负载期间响应更快。
7. page-cluster参数
修改参数:
echo “16” > /proc/sys/vm/page-cluster
page-cluster 控制在一次尝试中写入交换的页的数量。它定义了交换I/O大小,在上面的示例中,根据RAID条带大小64k添加了'16'。在使用了swappiness=0之后,这将没有意义,但是如果定义了swappiness=10或20,那么当RAID条带大小为64k时,使用此值将有所帮助。
8. 修改块设备参数
修改块设备参数:
blockdev --setra xxx /dev/vadxxx
# 例如:
[root@test001 ~]# blockdev --getra /dev/vda1 #查询扇区
256
[root@test001 ~]# blockdev --setra 4096 /dev/vda1 #设置扇区
[root@test001 ~]# blockdev --getra /dev/vda1
4096
[root@test001 ~]#
默认块设备设置通常会导致性能不佳,修改扇区参数能增加速度,具体的参数值根据需求而定。
以上为GlusterFS官网给的Linux内核优化参数,可根据自身环境,酌情使用。