ceph性能优化的操作笔记(2)

2、软件优化
1 调度:IO调度器主要用于具有有限队列的较慢存储设备(例如,单机械硬盘驱动器)I/O调度器的主要作用是重新排序I/O的请求,以获得更早服务,更重要的请求。对于具有非常大的内部队列和非常快的服务(如pcie ssd)设备,I/O调度器不会有什么好处。最好是立即提交所有的请求。

# cat /sys/block/sda/queue/scheduler 
noop [deadline] cfq 
# cat /sys/block/vgca0/queue/scheduler #PCIE 的磁盘
none

因为pcie的磁盘访问不同逻辑的扇区时间几乎一样,所以改为none。
none又称为noop。
几种调度算法的比较:
deadline (适合小文件读写,跳跃式读写,零散读写(数据库))
iosched 中若干参数说明: read_expire 默认500 此时间一到就写
write_expire 默认5000 此时间一到就读
在此时间内一定可以得到服务
front_merges 0
1(默认)
当新请求与当前请求读写位置相近则可合并优先处理

anticipatory (适合大文件读写,整块式,重复读写(web server))
iosched 中若干参数说明: antic_expire 当一个请求结束后等待此时间长度 看是否有新请求与此请求读写位置近
read_expire 124(默认)
write_expire 248(默认)

cfg (完全公平算法)
iosched 中若干参数说明:queued 请求个数长度
quantum 满多少个请求数写入一次磁盘

优先级 class1 (real-time)实时 值0~7
class2 (best-effort)轮询 值0~7
class3 (idle) 只有空闲时才处理
调整方法 ionice -p 1(进程号)-n7(优先级值)-c2(class级)
优先级值越低,优先级越高
noop(没有算法,适用于SAN架构,不在本地优化)

2 预读
read_ahead_kb, I/O 预先读请求的量(内核系统默认先响应读请求,所先响应的量可调):

[root@host2 ~]# cat /sys/class/block/sda/queue/read_ahead_kb
128# 建议改为512 1024 2048。
[root@host2 ~]# cat /sys/class/block/vgca0/queue/read_ahead_kb #PCIE
3072

3 内存
numa,swap 内存管理。普通模式下(非全闪存)性能足够了。
4 网络层面:
net.ipv4.tcp_low_latency: 0 建议改为1.
tcp_low_latency设为0时,以整个操作系统的效率优先,此时TCP会通过使用prequeue队列,使网络软中断的执行时间缩短,回ACK的时机延后,进程读取TCP套接字时略延后。
设为1时,以TCP读取消息时,使应用进程减少延迟为优先。二者相反,默认是不打开这个开关的。
TCP 协议处理网络流量时,需要占用大量的CPU和内存资源。为了节省服务器的资源消耗,众多厂商开始在网卡中内置协处理器,将任务移交给协处理器完成。即TCP卸载引擎TCP offload engine TOE.普通网卡每个数据包都要触发一次中断,TOE网卡则让每个应用程序完成一次完整的数据处理进程后才发出一次中断。即显著减轻服务对中断的影响负担。

net.ipv4.tcp_reordering: 3
根据交换机的报文乱序情况,如果报文出现乱序,需要调整

net.ipv4.tcp_mem:
net.ipv4.tcp_rmem:
net.ipv4.tcp_wmem:

[root@host2 ~]# sysctl -a |grep net.ipv4.tcp_mem
net.ipv4.tcp_mem = 2697651	3596869	5395302

该文件包含3个整数值,分别是:low,pressure,high
Low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。
Pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。
High:允许所有tcp sockets用于排队缓冲数据报的页面量。
一般情况下这些值是在系统启动时根据系统内存数量计算得到的。
针对osd的存储节点。在内存重组的情况下,分配内存的额定大小给tcp协议栈。建议为%10的内存总数

[root@host2 ~]# sysctl -a |grep net.ipv4.tcp_rmem
net.ipv4.tcp_rmem = 4096	87380	6291456

该文件包含3个整数值,分别是:min,default,max
Min:为TCP socket预留用于接收缓冲的内存数量,即使在内存出现紧张情况下TCP socket都至少会有这么多数量的内存用于接收缓冲。
Default:为TCP socket预留用于接收缓冲的内存数量,默认情况下该值影响其它协议使用的net.core.wmem中default的 值。该值决定了在tcp_adv_win_scale、tcp_app_win和tcp_app_win的默认值情况下,TCP 窗口大小为65535。
Max:为TCP socket预留用于接收缓冲的内存最大值。该值不会影响 net.core.wmem中max的值,今天选择参数 SO_SNDBUF则不受该值影响。

针对ceph-osd的存储节点来说。osd的数目决定了buffer的大小。如果osd数目在1-3个左右,可以设置为8M。如果在10个左右建议改为1-2M。

[root@host2 ~]# sysctl -a |grep net.ipv4.tcp_wmem
net.ipv4.tcp_wmem = 4096	16384	4194304

该文件包含3个整数值,分别是:min,default,max
Min:为TCP socket预留用于发送缓冲的内存最小值。每个TCP socket都可以使用它。
Default:为TCP socket预留用于发送缓冲的内存数量,默认情况下该值会影响其它协议使用的net.core.wmem中default的 值,一般要低于net.core.wmem中default的值。
Max:为TCP socket预留用于发送缓冲的内存最大值。该值不会影响net.core.wmem_max,今天选择参数SO_SNDBUF则不受该值影响。默认值为128K。
针对ceph-osd的存储节点来说。osd的数目决定了buffer的大小。如果osd数目在1-3个左右,可以设置为8M。如果在10个左右建议改为1-2M。

Low Latency Performance

https://access.redhat.com/sites/default/files/attachments/201501-perf-brief-low-latency-tuning-rhel7-v1.1.pdf

Tuned包是Red Hat Enterprise中提供的调整配置文件传递机制。可以使用yum 来安装。Red Hat Enterprise Linux 7中默认启用tuned,使用一个名为的配置文件吞吐量性能。

[root@host2 ~]# tuned-adm list
Available profiles:
- balanced
- desktop
- latency-performance
- network-latency
- network-throughput
- powersave
- throughput-performance
- virtual-guest
- virtual-host
Current active profile: balanced

查看latency-performance的配置参数

[root@host2 ~]#  egrep -v '^$|^\#|\[' /usr/lib/tuned/latency-performance/tuned.conf
force_latency=1
governor=performance
energy_perf_bias=performance
min_perf_pct=100
kernel.sched_min_granularity_ns=10000000
vm.dirty_ratio=10
vm.dirty_background_ratio=3
vm.swappiness=10
kernel.sched_migration_cost_ns=5000000

上述的操作主要在减少电源的影响,增加cpu消耗时间的数量。减少数据迁移(切换),减少未完成的数量。脏页保存在内存里。swap设置为0.

发表评论

您的电子邮箱地址不会被公开。