Linux kernel 为什么在linux上禁用IRQ会导致rdma_读取和rdma_写入失败?

Linux kernel 为什么在linux上禁用IRQ会导致rdma_读取和rdma_写入失败?,linux-kernel,interrupt,irq,infiniband,rdma,Linux Kernel,Interrupt,Irq,Infiniband,Rdma,我有两台主机由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

我有两台主机由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个中断上使用函数
\u disable\u irq()
会导致客户端执行的所有RDMA读/写操作失败,并显示错误消息“传输重试计数器已超出”

我的问题是为什么以及何时RDMA读/写操作可以在远程机器上生成IRQ?我认为如果它们不涉及远程CPU,那么它们就不会执行任何类型的IRQ


那么,为什么禁用这些中断会导致这些操作失败呢?

并非所有事务都是RDMA事务


此外,当您写入另一台机器的内存时,您需要中断以通知写入何时完成(以便您知道何时可以重用自己的内存),并通知另一台机器新数据已显示在其内存中。

谢谢您的回答。根据(和)和RDMA RFC()第13页,在RDMA读/写期间,不会向远程主机发送任何通知(IRQ?)。这就是为什么我要问IRQ为什么以及何时参与这些操作的原因。您的RDMA应用程序是使用librdmacm还是只使用libibverbs?(或者别的什么?)@haggai_e,RDMA应用程序使用
libibverbs
。谢谢你抽出时间!很难判断您的实验出了什么问题,但我想还有许多其他应用程序可能会使用中断。也许opensm无法与客户端系统通信?