【ceph】Messenger的基准测试工具ceph_perf_msgr_server/ceph_perf_msgr_client|性能测试
源码和编译
源码目录:在ceph源码包中:ceph-16.2.5\src\test\msgr
要将ceph-16.2.5\src\下的CMakeList.txt中add_subdirectory(test)前面的#去掉,
if(WITH_TESTS)
add_subdirectory(test)
endif()
由于CMakeList.txt用了宏开关,所以cmake的时候要加宏。
在ceph目录下:
mkdir build && cd build
生成makefile
cmake -DWITH_TESTS=1 ../CMakeList.txt
编译ceph_perf_msgr_server 和ceph_perf_msgr_client
make ceph_perf_msgr_server
make ceph_perf_msgr_client
完成后,在ceph/build/bin下生成ceph_perf_msgr_server 和ceph_perf_msgr_client
用法
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次数。
第五个参数:接收消息时客户端线程的“思考时间”,这也用于模拟客户端快速分配过程。
最后一个参数:消息数据的长度
原文:Messenger notes — Ceph Documentation
高级用法
- 修改依赖的库
可以使用命令patchelf 修改工具依赖的动态库位置。避免和项目正在使用的库冲突,修改方法见:https://blog.csdn.net/bandaoyu/article/details/113181179
- 修改依赖的配置文件
修改依赖的配置文件,避免与正在运行的项目共用配置文件造成相互影响
ceph进程搜索配置文件的路径顺序
Ceph相关进程在读取配置时, 遵循以下的查找顺序
- $CEPH_CONF环境变量所指定的配置
- -c path/path 参数所指定的配置
- /etc/ceph/ceph.conf
- ~/.ceph/config (HOME目录下.ceph目录的config文件)
- ./ceph.conf (当前目录下的ceph.conf)