Почему отключение IRQ в Linux приводит к сбою rdma_read и rdma_write?

У меня есть две хост-машины, соединенные 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.

Тогда почему отключение этих прерываний приводит к сбою этих операций?


person Fopa Léon Constantin    schedule 23.09.2015    source источник
comment
Ваше приложение RDMA использует librdmacm или только libibverbs? (Или что-то другое?)   -  person haggai_e    schedule 24.09.2015
comment
@haggai_e, приложение RDMA использует libibverbs. спасибо за ваше время!   -  person Fopa Léon Constantin    schedule 24.09.2015
comment
Трудно сказать, что пошло не так в вашем эксперименте, но я полагаю, что есть много других приложений, которые могут использовать прерывания. Возможно, opensm SM не может связаться с клиентской системой?   -  person haggai_e    schedule 24.09.2015


Ответы (1)


Не все транзакции являются транзакциями RDMA.

Кроме того, когда вы записываете в память другой машины, вам нужны прерывания, чтобы заметить, когда запись закончилась (чтобы вы знали, когда вы можете повторно использовать свою собственную память), и чтобы уведомить другую машину о том, что в ее памяти появились новые данные. Память.

person CL.    schedule 23.09.2015
comment
Спасибо за ваш ответ. Согласно (www-01.ibm .com/support/knowledgecenter/ssw_aix_71/ и www-01.ibm.com/support/knowledgecenter/ssw_aix_71/) и RDMA RFC (ietf.org/rfc/rfc5040.txt), стр. 13, уведомления (IRQ ?) не отправляются на удаленный хост во время чтения/записи RDMA . Вот почему я спрашиваю, почему и когда IRQ участвуют в этих операциях. - person Fopa Léon Constantin; 23.09.2015