У меня есть две хост-машины, соединенные Mellanox infiniband HCA. Я выполняю простое приложение RDMA для выполнения операций чтения RDMA и RDMA с одного компьютера (клиента) на другом компьютере (сервере). Чтобы узнать, какие прерывания связаны с HCA карт на каждой машине, я побежал следующую команду:Почему отказ IRQ от linux вызывает ошибки rdma_read и rdma_write?
less proc/interrupts
67: 475880 50253 0 0 PCI-MSI-edge [email protected]: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 могут генерировать irqs на удаленной машине? Я думал, что если они не задействуют удаленный процессор, то они не будут выполнять никаких IRQ.
Затем, почему отключение этих прерываний приводит к сбою этих операций?
Использует ли ваше приложение RDMA librdmacm или просто libibverbs? (Или что-то еще?) –
@haggai_e, приложение RDMA использует 'libibverbs'. спасибо за ваше время! –
Трудно сказать, что пойдет не так с вашим экспериментом, но я полагаю, что есть много других приложений, которые могут использовать прерывания. Возможно, openSM SM не может связаться с клиентской системой? –