【问题背景】:
在某些项目中,用户自带测试工具,dd操作,fio(numjobs=1,iodepth=1)等忽略缓存操作的场景下。ceph块的单线程IO存在性能较差问题。
【问题影响】:
fio等典型测试用例在带宽和iops上测试结果偏差不大,但是对于超融合虚拟机场景,dd测试等单任务场景运行速度和体验较差。
【问题原因】:
更多是ceph原生的软件优化以及架构决定的io路径对延迟性能产生了消耗和衰减。这中间bluestore以及其他一些参数调优固然有用,但效果目前存疑。其他gluster等分布式存储可能有差异,但光是副本写惩罚一项就是逃不了的,不可能比裸盘高。在架构类似的情况下,只是软件优化的程度问题,差别应该不大。
ceph等的大部分分布式存储只能增加并发的总吞吐量,不但不会降低延迟,而且反而会增加延迟,在IOPS,带宽,延迟三个指标中的一个关键延迟性能上,分布式存储远远比不上传统存储。
延迟增加会导致单线程io场景的性能比较低。
io路径简单比较一下就可以明白:
传统: iscsi(千兆或万兆网)------本地硬盘/dev/sdx
分布式存储不使用缓存: iscsi(千兆或万兆网)-----librbd(不使用缓存)---(千兆或万兆网)----osd------副本写惩罚------ceph journal----xfs---/dev/sdx
分布式使用缓存:iscsi(千兆或万兆网)-----librbd或内核rbd(使用缓存)
这里以单线程dd带direct忽略缓存的测试模拟为例。
1、裸盘:比如100~200M/S, bs=1M的延迟是1000ms/100~200=5~10ms
2、普通hdd的分布式存储:比如25M/S, bs=1M的延迟是1000ms/25=40ms
3、带ssd或pcie缓存的分布式存储:比如100M/S, bs=1M的延迟是1000ms/50~100=10~20ms
在某些硬件条件和架构固定又没有作弊的情况下,是不可能超过理论值的。
比如假设hdd延迟最低5ms, 全hdd分布式存储可以在io路径中进行优化,但是只能趋近5ms,不可能超过5ms。因此有些场景性能较低无需莫名惊诧。
【解决思路】:
1、对于一些无需虚拟机,无需多路径等对数据一致性要求不高并且写负载不高的场景,可以适当使用缓存。
2、靠近iscsi的io前端,增加分布式带复制的缓存同步处理,或者使用一些类似RDMA等硬件设备辅助,总之通过硬件或软件在分布式多节点间实现低延迟同步缓存。该方案性能叫高,但实现难度也比较高。
3、使用类flashcache,bcache等在后端osd加缓存,作为osd的缓存,ssd的低延迟特性,可以有效增加单路操作的性能。
4、对IO路径上其他必要节点进行硬件和软件调优。此处不做详细展开。
【总结】
在高负载大量写的场景下,使用写缓存很多时候是意义不大的。
但是在很多用户场景下,使用缓存的体验还是很好的,写个1G或几G的文件,能带来质的提升,因此需要区分好用户使用场景。鱼和熊掌不可兼得。