为什么在linux上禁用IRQ会导致rdma_read和rdma_write失败?

时间:2015-09-23 08:30:56

标签: 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      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读/写操作都失败,并显示错误消息" transport retry超过了#34;。

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

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

1 个答案:

答案 0 :(得分:1)

并非所有交易都是RDMA交易。

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