У меня есть две хост-машины, соединенные Mellanox infiniband HCA. Я выполняю простое приложение 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
На сервере я экспериментировал: использование функции __disable_irq()
для этих 4 прерываний приводит к сбою всех операций чтения/записи RDMA, выполняемых клиентом, с сообщением об ошибке «превышен счетчик повторных попыток передачи».
Мой вопрос: почему и когда операции чтения/записи RDMA могут генерировать прерывания на удаленной машине? Я думал, что если они не задействуют удаленный процессор, то они не будут выполнять никаких IRQ.
Тогда почему отключение этих прерываний приводит к сбою этих операций?
libibverbs
. спасибо за ваше время! - person Fopa Léon Constantin   schedule 24.09.2015