CephFS内核客户端的性能如何?
问题描述测试3cephfs内核客户端的吞吐性能,direct写时单个客户端性能有上限,只能靠近150mb/s:
查找网卡流量,却没打满:
查找集群负载也不高,osd磁盘很空闲,验证多台机器同样心内膜炎测试,总吞吐这个可以上来,不相信单个客户端的上限有瓶颈。
源码分析集群就没打满,网络也不是瓶颈,那么没有办法从内核客户端cephfs的写IO何练起,这里有问题的根源。cephfs内核客户端写IO的代码在文件fs/ceph/file.c:
从代码利用看,主要流程是fifth_request,start_request,wait_request三个步骤。本能说说我这里的wait会被block住,跟踪监视下这里的wait利用:
先看已超时的时间,传来的是0,终于结果是LONG_MAX,差不多吧那是总是idle:
接下来看条件的满足:
从kernel的注释看,函数schedule_timeout是sleep待到timeout:
从源码结论看,已经比较比较明确,四次只是请求下发文件后,唯有等帮忙能够完成了才会进行下三次只是请求,IO并不是并发的下发给后端的集群。
下一步的问题是,每次帮忙的size如何能确定?这个和文件的layout属性和当前写的位置去相关,如果从文件offset0结束写的话,以及常规默认属性,最大那就是cephobjectsize的大小,即4MB。ceph的layout回答可以建议参考官方文档。
实验证明调阅监控文件属性目的是更很明显的观察延时,我们将文件的属性决定帮一下忙,即从4m到64m:
资源文件inode
文件对应的对象
栏里点两个对象不对应的osd信息,共有按osd1和0:
再次先执行刚才的dd命令,并在两个primaryosd(1,0)上仔细的观察op的情况,并同时用ftrace,仔细观察kernel客户端写的过程。
osd机器OP帮忙通过200以内命令一栏osd的op信息,ID为上面的1和0:
cephdaemondump_historic_ops
上面是osd1的信息,操作的对象是10000000388.00000000,op减弱了426.153ms,通常承受时间在网络读数据的延时和副本操作的延时。op开始时间16:04:19.049346,结束时间16:04:19.475499。
这是osd0的信息,操作的对象是10000000388.00000001,op短短了439.539ms。op开始时间16:04:19.491627,结束时间16:04:19.931166。
也可以很不清楚的一眼就看到,先写第一个对象,再写第二个对象,对象之间是没有并发写的,这区别于块存储,块存储的实现,起码librbd的实现,如果一次io不对应多个object,多个请求是而嘶嘶的,而应该不会等第一个对象完成了才下发第二个对象的IO,谢妃娘娘:代码:
写文件的客户端ftrace信息enableftrace步骤:
观察日志:
这里用差不多500xd才正在下一个请求,而上面从osd端的分析看,第一个IO我用426xd才能够完成,osd结束IO后通知kernel客户端有网络延迟现象,然后把算上kernel指挥和调度的延时,应该差不多还能够不兼容。
结论源码讲,然后把各从集群osd端和kernel客户端进行验证验证,real-time的情况,cephfs性能虽然有限制。只不过,用户也你不过多担心那性能跟不上,只不过通常情况下,绝对不会是direct写,kernel客户端有pagecache,写会相当快,
更加接近真实的使用场景,用户先写数据,之后调用一次passthrough能操作:
希望我的回答是可以对你有不助益!
苹果kernelcache卡住刷不了机怎么办?
1.
爱思你的邮箱kernelcache失败的话要重起保持设备处于关机后模式或可以恢复模式,插入到数据线。
2.
先按过设备的HOME键千万不能慢慢松开,再按动设备的开机键别松开手,等他设备屏幕慢慢熄灭再过4秒左右抬起设备的开机键,但别松开手HOME键,待到软件电脑提示成功就好