s3cmd 快速评估RADOSGW的性能

| 分类 ceph  | 标签 ceph 

前言

前面介绍了如何使用s3cmd 测试RADOSGW,基本局限在功能测试。近日,有人报CEPH集群 纠删码Pool的S3功能太弱,3节点集群,9个OSD,性能只能达到100MBps左右,因为上传的file大小都在50~100M之间,所以这个值有点低。

客户并没有好的测试手段,用6个Windows客户端,使用CloudBerry拖拽的方式上传object,那集群S3的性能到底如何呢?摆在面前的问题是如何快速的测试RADOSGW的上传性能 100MBps是否合理呢。

我想到了s3cmd这个工具,只要有足够的并发数,不难测试集群的汇聚带宽。

在3个客户端分别连3个存储节点,在客户端上分别执行如下命令:

seq 0 9999       | xargs -I{} -P 40 s3cmd put bean s3://bucket/{}
seq 10000 19999  | xargs -I{} -P 40 s3cmd put bean s3://bucket/{}
seq 20000 29999  | xargs -I{} -P 40 s3cmd put bean s3://bucket/{}

发现速度很慢:

查看atop信息,系统并不繁忙

磁盘和CPU都没有到达瓶颈,而client到存储节点的网络是万兆,也不是瓶颈,那问题出在哪里呢?

通过strace跟踪一个s3cmd put,看出了端倪,原来上传的buffer是4K。

解决办法

s3cmd 提供了send_chunk和recv_chunk这两个选项,默认都是4096字节。毫无疑问,对于传输几十M甚至上G的文件到s3 bucket,这个buffer太小了。

对于测试上传,我将send_chunk调整成了262144字节(256KB),整体性能立刻显著提升,直到达到系统某项设备达到瓶颈:

性能提升了三倍,从atop的信息来看,磁盘已经到达极限。此外因为纠删码会消耗CPU资源,因此,考虑到存储服务器只有8核,因此,CPU也成为了瓶颈。 注意,设个send_chunk也并非是越大越好,太大的send_chunk会导致s3cmd传输失败而不得不重传,反而降低效率。

其它

另外一个值得关注的问题是每个磁盘150MB以下的速度也值得怀疑,从iostat的avgrq-sz看出,基本都在300(sector)以下,即低于150K。这个问题就不在此处讨论了。


上一篇     下一篇