Rocky Linux 8.6下irdma模块是否无需配置自动启用RDMA?
irdma模块工作机制与应用配置说明
核心结论
- 原生irdma模块仅完成底层RDMA链路的就绪工作,不会自动将服务器间的所有流量切换为RDMA传输。
- 上层应用必须主动支持RDMA,并通过配置明确指定使用RDMA传输,才能利用irdma模块的能力。
具体解释
1. 当前irdma链路状态的含义
从你提供的命令输出:
[root@host01 ~]# rdma l s link irdma0/1 state ACTIVE physical_state LINK_UP netdev ens3f0 link irdma1/1 state ACTIVE physical_state LINK_UP netdev ens3f1 link irdma2/1 state ACTIVE physical_state LINK_UP netdev ens2f0 <<-- link irdma3/1 state ACTIVE physical_state LINK_UP netdev ens2f1 ...
ACTIVE+LINK_UP状态仅说明:
- Intel E810网卡的硬件RDMA功能已被irdma驱动激活
- RDMA链路与物理网卡(如ens2f0)绑定成功
- 底层网络连通性正常
这只是RDMA可用的前提,不代表流量会自动走RDMA。
2. RDMA的使用条件
RDMA是绕过内核协议栈的用户态直接传输技术,必须同时满足:
- 应用程序集成了RDMA相关的开发库(如libibverbs、librdmacm)
- 应用在部署或运行时明确配置为使用RDMA传输
3. 典型应用配置示例
你提到的两个场景就是标准的RDMA配置方式:
Libvirt虚拟机实时迁移:
virsh migrate --live --rdma-pin-all --migrateuri rdma://hostname domain qemu+tcp://hostname/system必须通过
--migrateuri rdma://指定RDMA传输协议,才会触发irdma模块工作。GlusterFS卷挂载:
mount -t glusterfs -o transport=rdma server1:/test-volume /mnt/glusterfs需添加
transport=rdma参数,让GlusterFS使用RDMA而非默认的TCP传输。
4. RabbitMQ集群的RDMA支持情况
RabbitMQ默认不支持RDMA传输,即使底层irdma模块就绪:
- 若未安装RDMA相关的第三方插件或扩展,RabbitMQ集群间通信仍会使用常规TCP/IP
- 只有当RabbitMQ配置了RDMA扩展并启用RDMA传输时,才会利用irdma模块的能力
5. 内存占用增加的处理
irdma模块加载后会占用内存用于维护RDMA队列、缓冲区等资源,属于正常现象。若内存占用过高:
- 可删除闲置的irdma链路:
rdma link delete irdma4(对应状态为DOWN的链路) - 调整irdma模块参数(如
rx_buf_size、tx_buf_size),但需参考官方文档谨慎操作
内容的提问来源于stack exchange,提问作者amkgi
相关产品推荐
相关产品推荐

