Ceph优化系列(三):osd_op_num_shards/threads_per_shard相关参数源码分析

转发:bluestore性能调优测试

摘要:

调节如下参数值,对比IOPS的变化:

osd_op_num_shards

osd_op_num_shard_hdd

osd_op_num_shards_ssd

osd_op_num_threads_per_shard

osd_op_num_threads_per_shard_hdd

osd_op_num_threads_per_shard_ssd

1、 环境搭建

在基于任务一基础上的环境(3-osd),来完成该任务
默认osd_op_num_shards=0,

root@deph-testebs-ssd015.py:/etc/ceph$ vim ceph.conf
osd_op_num_shards=4

2、 osd_op_num_shards参数分析

阅读ceph源码,查看osd_op_num_shards参数的计算源码,如下所示(主要看第二幅图):

源码中有两个函数,get_num_op_shards()get_num_op_threads(),是分别求OSD::op_shardedwq中存储io的队列个数及OSD::op_shardedwq中总的io分发线程数
总线程数=队列数*每个队列线程数
可看出,当osd_op_num_shards为true时,返回osd_op_num_shards的值;否则就看返回osd_op_num_shards_hhdosd_op_num_shards_ssd的值,源码中store_is_rotational是bool类型,表示设备属性(默认是true也即是hhd)。
而求线程数函数get_num_op_threads(),同理也是以变量osd_op_num_threads_per_shardstore_is_rotational来决定用哪个公式。

(1)默认情况下,查看相关参数值:

可看到osd_op_num_shards=0osd_op_num_threads_per_shard=0,所以计算线程总数公式=osd_op_num_shards_ssd*osd_op_num_threads_per_shard_ssd=8*2=16

(2)通过ceph.conf文件设置参数osd_op_num_shards=2,重启集群

通过上面分析,因此总线程数=osd_op_num_shards*osd_op_num_threads_per_shard_ssd=2*2=4

  • 测试 在客户端运行fio的4k-randwrite操作,同时在服务端多次运行 top -H -p $pid -n 1 | grep tp_osd_tp ,计算有多少个线程,如下:

    看得出一直都是4个线程。故我们的计算方式是正确的。下面来看真正的实验吧。

    3、 实验设置

    共20组实验
    (1)osd_op_num_shards=0(默认),即总线程数=8*2=16
    实验1-1:1-client随机写1个image
    实验1-2:1-client随机写8个image
    实验1-3:1-client随机写15个image
    实验1-4:1-client随机写30个image
    (2)osd_op_num_shards=2,即总线程数=2*2=4
    实验2-1:1-client随机写1个image
    实验2-2:1-client随机写8个image
    实验2-3:1-client随机写15个image
    实验2-4:1-client随机写30个image
    (3)osd_op_num_shards=4,即总线程数=4*2=8
    实验3-1:1-client随机写1个image
    实验3-2:1-client随机写8个image
    实验3-3:1-client随机写15个image
    实验3-4:1-client随机写30个image
    (4)osd_op_num_shards=8,即总线程数=8*2=16
    实验4-1:1-client随机写1个image
    实验4-2:1-client随机写8个image
    实验4-3:1-client随机写15个image
    实验4-4:1-client随机写30个image
    (5)osd_op_num_shards=16,即总线程数=16*2=32
    实验5-1:1-client随机写1个image
    实验5-2:1-client随机写8个image
    实验5-3:1-client随机写15个image
    实验5-4:1-client随机写30个image

    4、实验结果

5、结果分析及总结

由上图可以看出,五组实验的各四小组实验结果的IOPS都相差不大,参数osd_op_num_shards效果不明显。
(1)当1-image时,5组实验中,osd_op_num_shards默认参数的IOPS最高,性能最好。
(2)当8-image时,各组实验都不差,默认参数第二高,表示调参没起到效果。
(3)当15-image时,默认参数IOPS最高,性能最好。
(4)当30-image时,默认参数IOPS最高,性能最好。
综上所述,参数osd_op_num_shards对集群IOPS性能影响不明显。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值