CEPH_PERF_MSGR
ceph_perf_msgr仅用于做Messenger模块的基准测试,可以帮助您找到Messenger模块中的瓶颈或耗时。就像“ iperf”一样,我们需要首先启动服务器端程序:
server
#./ceph_perf_msgr_server 172.16.30.181:10001 1 0
./ceph_perf_msgr_server [bind ip:port] [server worker threads] [thinktime us]
[bind ip:port]: The ip:port pair to bind, client need to specify this pair to connect
[server worker threads]: threads will process incoming messages and reply(matching pg threads)
[thinktime]: sleep time when do dispatching(match fast dispatch logic in OSD.cc)
第一个参数:ip:port对,绑定IP:绑定端口号。
第二个参数:服务端线程数
第三个参数:模拟dispatch调度每个消息的耗时(“思考时间”(think_time)--代码中: usleep(think_time);)。在Giant之后,CEPH_OSD_OP消息(即实际的客户端读/写io请求)将快速分派,而无需排队到Dispatcher,以实现更好的性能。因此,CEPH_OSD_OP消息将进行内联处理,模拟“内联过程”过程将使用“思考时间”。
void MessengerClient::ClientDispatcher::ms_fast_dispatch(Message *m) {
usleep(think_time);
m->put();
std::lock_guard l{thread->lock};
thread->inflight--;
thread->cond.notify_all();
}
client
#./ceph_perf_msgr_client 172.16.30.181:10001 1 32 10000 10 4096
第一个参数:服务器ip:port
第二个参数:客户端线程数。
第三个参数:并发性(每个客户端线程的最大发送中的消息数)
第四个参数:每个客户端线程发起的IO次数。
第五个参数:接收消息时客户端线程的“思考时间”,这也用于模拟客户端快速分配过程。
最后一个参数:消息数据的长度