【发布时间】:2015-09-23 08:30:55
【问题描述】:
我有两台通过 Mellanox infiniband HCA 连接的主机。我正在执行一个简单的 RDMA 应用程序,以从另一台机器(服务器)上的一台机器(客户端)执行 RDMA 写入和 RDMA 读取操作。为了知道哪些中断与每台机器上的 HCA 卡有关,我运行了以下命令:
less proc/interrupts
67: 475880 50253 0 0 PCI-MSI-edge mlx4-async@pci:0000:01:00.0
68: 399002 0 73 0 PCI-MSI-edge mlx4_0-0
69: 0 3264 23 0 PCI-MSI-edge mlx4_0-1
70: 0 0 0 0 PCI-MSI-edge mlx4_0-2
71: 0 0 0 0 PCI-MSI-edge mlx4_0-3
在服务器机器上,我已经尝试在这 4 个中断上使用函数 __disable_irq() 会导致客户端执行的所有 RDMA 读/写操作失败,并显示错误消息“传输重试计数器超出”。
我的问题是为什么以及何时 RDMA 读/写操作可以在远程机器上生成 irqs?我认为如果它们不涉及远程 CPU,那么它们将不会执行任何类型的 IRQ。
那么,为什么禁用这些中断会导致这些操作失败?
【问题讨论】:
-
您的 RDMA 应用程序是使用 librdmacm 还是仅使用 libibverbs? (或者别的什么?)
-
@haggai_e,RDMA 应用程序使用
libibverbs。谢谢你的时间! -
很难判断你的实验出了什么问题,但我想还有许多其他应用程序可能会使用中断。也许 opensm SM 无法与客户端系统通信?
标签: linux-kernel interrupt irq infiniband rdma