系统调优
OS配置调优
- 目的
调整系统配置选项,充分发挥系统硬件性能。
- 方法具体优化项详见表1。
表1 OS配置参数 参数名称
参数含义
优化建议
配置方法
vm.swappiness
swap为系统虚拟内存,使用虚拟内存会导致性能下降,应避免使用。
默认值:60
现象:用到swap时性能明显下降
修改建议:关闭swap内存的使用,将该参数设定为0
执行命令:
1
sudo sysctl vm.swappiness=0
MTU
网卡所能通过的最大数据包的大小,调大后可以减少网络包的数量以提高效率。
默认值:1500 Bytes
现象:可以通过ip addr命令查看
修改建议:网卡所能通过的最大数据包的大小设置为9000 Bytes
- 执行命令:
1
vim /etc/sysconfig/network-scripts/ifcfg-$(Interface)
并增加MTU="9000"说明:${Interface}为网口名称。
- 完成后重启网络服务。
1
service network restart
pid_max
系统默认的“pid_max”值为32768,正常情况下是够用的,但跑重量任务时会出现不够用的情况,最终导致内存无法分配的错误。
默认值:32768
现象:通过cat /proc/sys/kernel/pid_max查看
修改建议:设置系统可生成最大线程数为4194303
执行命令:
1
echo 4194303 > /proc/sys/kernel/pid_max
file_max
“file-max”是设置系统所有进程一共可以打开的文件数量。同时一些程序可以通过setrlimit调用,设置每个进程的限制。如果得到大量使用完文件句柄的错误信息,则应该增加这个值。
默认值:13291808
现象:通过cat /proc/sys/fs/file-max查看
修改建议:设置系统所有进程一共可以打开的文件数量,设置为cat /proc/meminfo | grep MemTotal | awk '{print $2}'所查看到的值
执行命令:
1
echo ${file-max} > /proc/sys/fs/file-max
说明:${file-max}为cat /proc/meminfo | grep MemTotal | awk '{print $2}' 所查看到的值。
read_ahead
Linux的文件预读readahead,指Linux系统内核将指定文件的某区域预读进页缓存起来,便于接下来对该区域进行读取时,不会因缺页(page fault)而阻塞。
鉴于从内存读取比从磁盘读取要快很多,预读可以有效的减少磁盘的寻道次数和应用程序的IO等待时间,是改进磁盘读IO性能的重要优化手段之一。
默认值:128 KB
现象:预读可以有效的减少磁盘的寻道次数和应用程序的IO等待时间。通过/sbin/blockdev --getra /dev/sdb查看
修改建议:通过数据预读并且记载到随机访问内存方式提高磁盘读操作,调整为8192 KB
执行命令:
1
/sbin/blockdev --setra <sectors> /dev/sdb
说明:此处以“/dev/sdb”为例,其中<sectors>为要调整预读的值大小,建议填入8192,对所有服务器上的所有数据盘都要修改。
I/O_Scheduler
Linux IO调度器是Linux内核中的一个组成部分,用户可以通过调整这个调度器来优化系统性能。
默认值:CFQ
现象:要根据不同的存储器来设置Linux IO调度器从而达到优化系统性能
修改建议:IO调度策略,HDD设置为deadline,SSD设置为noop
执行命令:
1
echo deadline > /sys/block/sdb/queue/scheduler
说明:此处以“/dev/sdb”为例,对所有服务器上的所有数据盘都要修改。
nr_requests
在Linux系统中,如果有大量读请求,默认的请求队列或许应付不过来,Linux可以动态调整请求队列数,默认的请求队列数存放在“/sys/block/hda/queue/nr_requests”文件中
默认值:128
现象:通过适当的调整nr_requests参数可以提升磁盘的吞吐量
修改建议:调整硬盘请求队列数,设置为512
执行命令:
1
echo 512 > /sys/block/sdb/queue/nr_requests
说明:此处以“/dev/sdb”为例,对所有服务器上的所有数据盘都要修改。
- 执行命令:
网络性能调优
- 目的
本次测试网卡采用以太网标卡-25GE(Hi1822)-四端口-SFP+,以该网卡为例对网卡配置参数进行优化以达到最佳性能。
- 方法
优化方法主要包含调节网卡参数和中断绑核(即将网卡中断绑定到网卡所在物理CPU上),具体优化项如表2所示:
表2 网卡参数配置 参数名称
参数含义
优化建议
irqbalance
系统中断均衡服务,会自动将网卡软中断分配到相对空闲的CPU上。
默认值:active
现象:开启状态下系统会自动将网卡软中断分配到相对空闲的CPU上
修改建议:
- 关闭irqbalance,将该参数设置为“inactive”。
1
systemctl stop irqbalance
- 通过设置为重启服务器后默认关闭。
1
systemctl disable irqbalance
rx_buff
聚合较大的网络报文需要多篇不连续的内存空间,内存利用率低,增大该项可以提高内存利用率。
默认值:2
现象:默认值为2时中断会消耗较多的CPU资源
修改建议:通过加载参数的方式,配置“rx_buff”的大小,减少不连续的内存,提高内存利用率,提高性能,调整为“8”。具体操作见表后。
ring_buffer
通过增加网卡buffer大小可以增加吞吐量。
默认值:1024
现象:通过ethtool -g <网卡名称> 查看
修改建议:将“ring_buffer”队列大小调整为4096。具体操作见表后。
lro
Large Receive Offload,打开后会将多个小包聚合为一个大包以提高效率。
默认值:off
现象:打开后最大吞吐量明显上升
修改建议:打开“large-receive-offload”功能,调高网络包收发效率。具体操作见表后。
hinicadm_lro_-i hinic0_-t_<NUM>
表示最大NUM微秒后将收到的包聚合发出,调整为256微秒。
默认值:16微秒
现象:配合lro功能使用
修改建议:调整为256微秒
hinicadm_lro_-i_hinic0_-n_<NUM>
表示最大收到NUM个包后将聚合的包发出,设置为32个包。
默认值:4个包
现象:配合lro功能使用
修改建议:设置为32个包
- 调整rx_buff:
- 进入路径“/etc/modprobe.d”。
1
cd /etc/modprobe.d
- 新建hinic.conf。
1
vim /etc/modprobe.d/hinic.conf
并增加以下内容:1
options hinic rx_buff=8
- 重新加载驱动。
1 2
rmmod hinic modprobe hinic
- 检查是否成功修改rx_buff为8。
1
cat /sys/bus/pci/drivers/hinic/module/parameters/rx_buff
- 进入路径“/etc/modprobe.d”。
- 修改ring_buffer大小:
- 将buffer大小由默认的1024调整为4096。
1
ethtool -G <网卡名称> rx 4096 tx 4096
- 查看当前buffer大小。
1
ethtool -g <网卡名称>
- 将buffer大小由默认的1024调整为4096。
- 打开lro:
- 打开网卡lro功能。
1
ethtool -K <网卡名称> lro on
- 检查是否成功打开。
1
ethtool -k <网卡名称> | grep large-receive-offload
- 打开网卡lro功能。
除了以上优化参数以外,还需要将网卡软中断绑核:
- 关闭irqbalance服务。
- 查询网卡归属于哪个
NUMA 节点。1
cat /sys/class/net/ <网口名> /device/numa_node
- 查询该NUMA节点对应哪些CPU core。
1
lscpu
- 查询网卡中断号。
1
cat /proc/interrupts | grep <网口名> | awk -F ':' '{print $1}'
- 将软中断绑定到该NUMA节点对应的core上。
1
echo <core编号> > /proc/irq/ <中断号> /smp_affinity_list。
- 关闭irqbalance,将该参数设置为“inactive”。