【问题标题】:Why disabling IRQ on linux causes rdma_read and rdma_write to fail?为什么在 linux 上禁用 IRQ 会导致 rdma_read 和 rdma_write 失败?
【发布时间】: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


【解决方案1】:

并非所有事务都是 RDMA 事务。

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2019-11-26
  • 2010-12-06
  • 1970-01-01
相关资源
最近更新 更多