标签归档:性能

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

Ceph层面的优化
参数的查询
下面的tuning参数可以通过以下命令获取

以下命令用来观察osd的性能:

1 filestore/object store 的参数
filestore queue max ops = 50000 数据盘最大接受的操作数
filestore queue max bytes = 524288000 数据盘一次操作最大的字节数(bytes)
跟踪op_queue_reserve_throttle查看是否有waiting大于max_ops或大于max_bytes. 当队列的操作数过多,或者队列中操作数据长度过大,阻塞等待。在某个操作处理结束后,_void_process_finish会唤醒

filestore queue committing max ops = 50000 #数据盘能够commit的操作数
filestore queue committing max bytes = 524288000 #数据盘能够commit的最大字节数(bytes)

filestore fd cache size: 128 #对象文件句柄缓存大小 10000 objects. (10k files x 4M/file = 40G) as cache。如果有100G内存。 100G /10 osd = 10G /4M = 2500(cache size)
filestore fd cache shards: 16 #对象文件句柄缓存分片个数
默认值128个object。如果每个object的大小为4M,每个filestore 只能cache 128*4M = 512M 。缓存文件句柄能加快文件的访问速度,建议缓存所有的文件句柄,要调高系统的句柄限制,以免句柄耗尽。建议10240

filestore_fiemap: #开启稀疏读写特性,有助于加快克隆和恢复速度

filestore_max_sync_interval: 5
filestore_min_sync_interval: 0.01

filestore_merge_threshold: 10 #pg子目录合并的最小文件数
filestore_split_multiple: 2 #pg子目录分裂乘数,默认为2
这两个值决定了一个目录下,存放object文件的个数。 默认为 10 * 2 * 16 = 320个。 如果超过这个数, 目录会自动split。 这会影响到内存中元数据的访问, 进而影响性能。filestore_merge_threshold表示, 当一个目录下的object文件数小于该值时, 目录会自动合并。两个参数控制pg目录的合并与分裂,当目录下的文件数小于filestore_merge_threshold时,该目录的对象文件会被合并到父目录;如果目录的文件数大于filestore_merge_threshold*16*filestore_split_multiple,该目录会分裂成两个子目录。设置合理的值可以加快对象文件的索引速度

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

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

因为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 预先读请求的量(内核系统默认先响应读请求,所先响应的量可调):

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:

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

该文件包含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。

该文件包含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

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

查看latency-performance的配置参数

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