OSD 节点优化

目标

  • 优化OSD节点性能
  • 关闭OSD节点瓶颈项

优化项

CPU Status

将cpu status 设置为 performance,可通过BIOS设置,或在系统中进行如下配置,修改后需要重启生效

1
for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do [ -f $CPUFREQ ] || continue; echo -n performance > $CPUFREQ; done

Hyper-Threading(HT)

开启VT和HT,在BIOS中配置

NUMA

关闭NUMA,可通过BIOS关闭,也可在加载Kernel是设置
打开/etc/grub2-efi.cfg,修改kernel加载部分,修改后需要重启生效

1
linuxefi /vmlinuz-3.10.0-327.el7.x86_64 root=/dev/mapper/rhel-root ro crashkernel=auto rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet LANG=en_US.UTF-8 numa=off

关闭前

1
2
3
4
$ lscpu | grep -i numa
NUMA node(s): 2
NUMA node0 CPU(s): 0-5,12-17
NUMA node1 CPU(s): 6-11,18-23

关闭后

1
2
3
$ lscpu | grep -i numa
NUMA node(s): 1
NUMA node0 CPU(s): 0-23

Jumbo Frames

将cluster network 的网卡MTU设置为9000,修改后需要重启生效

1
echo "MTU=9000" | tee -a /etc/sysconfig/network-script/ifcfg-{网卡}

通过ifconfig查看mtu修改情况

1
2
3
4
5
6
7
8
9
$ ifconfig
ens5f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9000
inet 192.168.43.5 netmask 255.255.255.0 broadcast 192.168.43.255
inet6 fe80::92e2:baff:febf:3800 prefixlen 64 scopeid 0x20<link>
ether 90:e2:ba:bf:38:00 txqueuelen 1000 (Ethernet)
RX packets 5218040 bytes 661253942 (630.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5170015 bytes 605082933 (577.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

SSD Trim

为减少SSD写放大,需要开启Trim。
判断SSD是否支持Trim

1
2
$ hdparm -I /dev/{SSD硬盘} | grep -i trim
* Data Set Management TRIM supported (limit 8 blocks)

出现 “TRIM supported” 表示支持Trim,否则表示不支持Trim指令.

在xfs文件系统中开启trim指令,需要挂载xfs文件系统时,option中增加discard

Scheduler

硬盘I/O调度机制配置,SSD 推荐采用“noop”,机械硬盘推荐采用“deadline”
修改/etc/udev/rules.d/60-schedulers.rules,增加如下:

1
2
3
# system default: set cfq scheduler for rotating disks
ACTION=="add|change",KERNEL=="sd[a-z]",ATTR{queue/rotational}=="1",ATTR{queue/scheduler}="deadline"
ACTION=="add|change",KERNEL=="sd[a-z]",ATTR{queue/rotational}=="0",ATTR{queue/scheduler}="noop"

rotational 为 “1” 表示机械硬盘,为“0”表示SSD

查看修改是否生效

1
cat /sys/block/{硬盘}/queue/scheduler

read_ahead_kb

设置硬盘预读大小为8k
修改/etc/udev/rules.d/60-schedulers.rules,增加如下:

1
ACTION=="add|change",KERNEL=="sd[b-z]",ATTR{queue/read_ahead_kb}="8192"

查看是否生效

1
cat /sys/block/{硬盘}/queue/read_ahead_kb

xfs option

xfs 挂载增加如下option:

rw 允许读写操作
noexec 不允许运行操作
nodev 不支持设备文件
noatime 不更新inode访问时间
nobarrier 关闭cache 回写机制

FD,core & PID

FD & core

修改 max open files 最大值,系统默认是1024,将其修改为131072
修改 core 值,当程序崩溃时,会输出core文件,便于分析错误原因
修改/etc/security/limits.conf文件,增加:

1
2
3
*   soft    core    10240
* soft nofile 131072
* hard nofile 131072

修改后,可通过ulimit -a查看。

PID

修改pid max值,打破系统运行进程数量瓶颈,将其设置为4194303(系统默认是 32768)
修改/etc/sysctl.conf文件,增加kernel.pid_max=4194303

cgroup

若集群搭建采用超融合方案(计算节点与存储节点混搭),使用cgroup将cpu与OSD进程绑定,减少cpu时间片切换次数,提高OSD相应速度

参考&鸣谢