如何在Ubuntu上获取libfabric(verbs提供者)监听端口的backlog值
如何在Ubuntu上获取libfabric(verbs提供者)监听端口的backlog值
嘿,我来帮你梳理下这个问题的解决思路~首先得明确:libfabric的verbs提供者基于RDMA/IB verbs机制,和传统TCP套接字不是一套体系,所以像ss -lt这类常规网络工具没法直接获取它的backlog值,得用下面这几种方法:
从应用自身入手(最直接)
既然backlog是你在调用fi_control()时自己传入的值,那最简单的方式就是在代码里把这个值存下来——比如用个全局变量、配置结构体,或者添加个调试接口(比如触发某个命令行参数就打印backlog,或者加个简单的HTTP接口返回这个值)。毕竟你自己设置的参数,存下来随时查看最靠谱。借助libfabric的调试日志
libfabric支持通过环境变量开启调试日志,你可以试试设置FI_LOG_LEVEL=debug(或者更详细的trace级别),然后重启你的服务端应用。在输出的日志里,有可能会找到和FI_BACKLOG相关的记录——比如verbs提供者在处理这个设置时的打印信息。不过这得看具体的libfabric版本和verbs提供者的实现会不会输出这个参数。通过gdb调试进程
如果你的应用已经在运行,可以用gdb来查看进程内部的backlog值:- 先找到应用的进程ID:
ps aux | grep 你的应用名称 - 用gdb attach到进程:
gdb -p <进程ID> - 找到代码里的
pep_指针(如果是全局变量直接用,不然得通过上下文找),然后查看对应的backlog字段。比如如果verbs提供者的passive endpoint结构体里有backlog成员,就可以输入print pep_->backlog来查看。不过这个需要你大概了解libfabric verbs提供者的内部结构体布局,必要时可以去看fi_verbs.h这类头文件的定义。
- 先找到应用的进程ID:
另外补充一句:为啥ss -lt看不到?因为libfabric的verbs监听不是基于TCP套接字,是用RDMA专属的监听机制,传统网络工具识别不了这类资源,所以自然拿不到相关参数啦。
备注:内容来源于stack exchange,提问作者Ajin Pradeep
相关产品推荐
相关产品推荐

