内容简介:rados put striper功能的调试
前言
之前对于striper这个地方的功能并没研究太多,只是知道这个里面可以以条带方式并行的去写对象,从而加大并发性来提高性能,而默认的条带数目为1,也就是以对象大小去写,并没有条带,所以不是很好感觉到差别,今天就尝试下用rados命令来看下这个条带是怎么回事
实践过程
最开始我的集群是用rpm包进行安装的,这个可以做一些常规的测试,如果需要改动一些代码的话,就比较麻烦了,本文后面会讲述怎么改动一点点代码,然后进行测试
我们一般来说用rados put操作就是一个完整的文件,并不会进行拆分,我们尝试下看下
[root@lab8106 ~]# dd if=/dev/zero of=16M bs=4M count=4 [root@lab8106 ~]# rados -p rbd put 16M 16M [root@lab8106 ~]# rados -p rbd stat 16M rbd/16M mtime 2017-04-26 15:08:14.000000, size 16777216
可以看到我们put 16M的文件,在后台就是一个16M的对象
这个rados命令还有个参数是striper
[root@lab8106 ~]# rados --help|grep stri --striper Use radostriper interface rather than pure rados
我们来用这个命令试一下
[root@lab8106 ~]# dd if=/dev/zero of=strip16M bs=4M count=4 [root@lab8106 ~]# rados -p rbd put strip16M strip16M --striper [root@lab8106 ~]# rados -p rbd ls |grep strip strip16M.0000000000000002 strip16M.0000000000000003 strip16M.0000000000000000 strip16M.0000000000000001 [root@lab8106 ~]# rados -p rbd --striper ls |grep strip strip16M [root@lab8106 ~]# rados -p rbd stat strip16M.0000000000000002 rbd/strip16M.0000000000000002 mtime 2017-04-26 15:11:06.000000, size 4194304
可以看到这个16M的文件是被拆分成了4M一个的对象,存储到了后台的,我们开启下日志后看下有没有什么详细的信息,因为在rados参数当中确实没有找到可配置的选项
在/etc/ceph/ceph.conf当中添加
debug_rados=20 debug_striper=20
再次测试
[root@lab8106 ~]# dd if=/dev/zero of=strip116M bs=4M count=4 [root@lab8106 ~]# rados -p rbd put strip116M strip116M --striper ··· sc is one, reset su to os su 4194304 sc 1 os 4194304 stripes_per_object 1 ···
这个地方解释下意思
strip count is 1,重置strip unit为object size ,也就是4M
strip unit 4194304 ,strip count 1,object size 4194304,每个对象的条带为1
--striper Use radostriper interface rather than pure rados
也就是这个rados在加了参数之后是调用了radostriper interface这个接口的,所以猜测这个条带的相关参数应该是在接口里面写死了的
https://github.com/ceph/ceph/blob/master/src/libradosstriper/RadosStriperImpl.cc/// default object layout struct ceph_file_layout default_file_layout = { fl_stripe_unit: init_le32(1<<22), fl_stripe_count: init_le32(1), fl_object_size: init_le32(1<<22), fl_cas_hash: init_le32(0), fl_object_stripe_unit: init_le32(0), fl_unused: init_le32(-1), fl_pg_pool : init_le32(-1), };
下面开始看下调试模式下改下这几个数值
下载代码
git clone https://github.com/ceph/ceph.git git checkout -b myceph2 v10.2.3 git submodule update --init --recursive
切换到10.2.3版本,用的make模式,没用cmake
cd ceph ./install-deps.sh ./autogen.sh ./configure make -j 12
启动开发模式服务
cd src ./vstart.sh --mon_num 1 --osd_num 3 --mds_num 1 --short -n -d
这样,dev cluster就起来了。修改部分源码重新make之后,需要关闭cluster,重启让代码生效,当然最好的是,你修改哪个模块,就重启那个模块就行,这里使用重启集群
./stop.sh all ./vstart.sh --mon_num 1 --osd_num 3 --mds_num 1 --short -d
查看状态
[root@lab8106 src]# ./ceph -s -c ./ceph.conf
我们修改下代码
vim libradosstriper/RadosStriperImpl.cc
/// default object layout struct ceph_file_layout default_file_layout = { fl_stripe_unit: init_le32(1<<21), fl_stripe_count: init_le32(2), fl_object_size: init_le32(1<<22), fl_cas_hash: init_le32(0), fl_object_stripe_unit: init_le32(0), fl_unused: init_le32(-1), fl_pg_pool : init_le32(-1), };
修改的是stripe_unit为2M,stripe_count为2,object_size为4M,也就是条带为2
修改完了后重新make
./stop.sh all ./vstart.sh --mon_num 1 --osd_num 3 --mds_num 1 --short -d
初始化集群,修改下配置文件增加调试信息
vim ./ceph.conf
debug_rados=20 debug_striper=20
创建文件
[root@lab8106 ~]# dd if=/dev/zero of=debugstrip16M bs=4M count=4 [root@lab8106 src]# ./rados -c ./ceph.conf --striper -p rbd put debugstrip16M debugstrip16M [root@lab8106 src]#./rados -c ./ceph.conf -p rbd stat debugstrip16M.0000000000000001 rbd/debugstrip16M.0000000000000001 mtime 2017-04-26 15:38:41.483464 2017-04-26 15:37:27.000000, size 4194304
可以看到对象还是4M
我们截取下日志分析
su 2097152 sc 2 os 4194304 stripes_per_object 2 off 0 blockno 0 stripeno 0 stripepos 0 objectsetno 0 objectno 0 block_start 0 added new extent(debugstrip16M.0000000000000000 (0) off 2097152 blockno 1 stripeno 0 stripepos 1 objectsetno 0 objectno 1 block_start 0 added new extent(debugstrip16M.0000000000000001 (1) off 4194304 blockno 2 stripeno 1 stripepos 0 objectsetno 0 objectno 0 block_start 2097152 added new extent(debugstrip16M.0000000000000000 (0) off 6291456 blockno 3 stripeno 1 stripepos 1 objectsetno 0 objectno 1 block_start 2097152 added new extent(debugstrip16M.0000000000000001 (1) off 8388608 blockno 4 stripeno 2 stripepos 0 objectsetno 1 objectno 2 block_start 0 added new extent(debugstrip16M.0000000000000002 (2) off 10485760 blockno 5 stripeno 2 stripepos 1 objectsetno 1 objectno 3 block_start 0 added new extent(debugstrip16M.0000000000000003 (3) off 12582912 blockno 6 stripeno 3 stripepos 0 objectsetno 1 objectno 2 block_start 2097152 added new extent(debugstrip16M.0000000000000002 (2) off 14680064 blockno 7 stripeno 3 stripepos 1 objectsetno 1 objectno 3 block_start 2097152 added new extent(debugstrip16M.0000000000000003 (3)
从上面可以看到先在debugstrip16M.0000000000000000写了2M,在debugstrip16M.0000000000000001写了2M,
然后在debugstrip16M.0000000000000000追加写了2M,并且是从block_start 2097152开始的,每个对象是写了两次的并且每次写的就是条带的大小的2M,跟修改上面的条带大小和对象大小是一致的,并且可以很清楚的看到写对象的过程
总结
本篇尝试了用rados来测试strip功能,并且顺带讲了下怎么在开发模式下修改代码并测试,如果自己写客户端的话,利用librados的时候,可以考虑使用libradosstriper条带来增加一定的性能
参考文档
变更记录
Why | Who | When |
---|---|---|
创建 | 武汉-运维-磨渣 | 2017-04-26 |
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- rados put striper功能的调试
- PHPRAP 2.0.3 发布,新增在线调试功能
- spider-flow 0.4.3 发布,新增调试功能
- Firefox 正在测试面向开发者的“时间旅行调试”功能
- Visual Studio 2017 15.9 Previews扩展C++调试功能
- Android 11 第三个开发者预览版发布,新增无线调试功能
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。