ceph 提供了较为完善的工具来trace osd的重要阶段耗时,称之为events,可以通过ceph daemon {admin-socket} dump_historic_slow_ops来查看,默认内存中只保存最近的osd_op_history_slow_op_size(默认20个),只要有一个请求的耗时超过osd_op_history_slow_op_threshold(默认10s),该op就会加入slow_op队列,举个例子,我们执行ceph daemon XX dump_historic_slow_ops后,发现有如下慢请求
可以发现整个请求的耗时主要在header_read event,该耗时显示header_read到all_read期间耗时18.1s,可以分析得出osd在从messenger中读取(0-4M)的数据花了18s,该请求是从10.124.107.8于12:03:35的cephfs client发出,发往osd的,进一步可以去看看src dst在这个时间点的网络链路、CPU情况