Linux kernel 为什么在linux上禁用IRQ会导致rdma_读取和rdma_写入失败?
我有两台主机由Mellanox infiniband HCA连接。我正在执行一个简单的RDMA应用程序,从一台机器(客户机)在另一台机器(服务器)上执行RDMA写和RDMA读操作。为了知道哪些中断与每台机器上的HCA卡相关,我运行了以下命令: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
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无法与客户端系统通信?