RDMA: стратегия опросаC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 RDMA: стратегия опроса

Сообщение Anonymous »


Я попытался обернуть RDMA во вспомогательный класс. У меня были некоторые проблемы с событиями send, которые не генерировали CQE на удаленном компьютере, и я исправил их, заменив этот фрагмент кода:

ibv_wc RdmaBase::wait_event(bool ignore_errors) { ibv_wc ret {}; пустота* ctxt; HENSURE_ERRNO(ibv_get_cq_event(m_comp_channel, &m_cq, &ctxt) == 0); ibv_ack_cq_events (m_cq, 1); HENSURE_ERRNO(ibv_req_notify_cq(m_cq, 0) == 0); пока (правда) { const int num_completions = ibv_poll_cq(m_cq, 1, &ret); HENSURE_ERRNO(num_completions >= 0); если (num_completions == 0) { продолжать; } еще { if(!ignore_errors && ret.status != IBV_WC_SUCCESS) { FATAL_ERROR("Неудачный статус %s (%d) для wr_id %d\n", ibv_wc_status_str(ret.status), ret.статус, (int) ret.wr_id); } перерыв; } } вернуть возврат; } Этим:

ibv_wc RdmaBase::wait_event(bool ignore_errors) { // Это что-то вроде сопрограммы вместо опроса событий в другом потоке ibv_wc ret {}; начинать: если(!m_polling) { пустота* ctxt; HENSURE_ERRNO(ibv_get_cq_event(m_comp_channel, &m_cq, &ctxt) == 0); ibv_ack_cq_events (m_cq, 1); HENSURE_ERRNO(ibv_req_notify_cq(m_cq, 0) == 0); м_поллинг = правда; } пока (правда) { const int num_completions = ibv_poll_cq(m_cq, 1, &ret); HENSURE_ERRNO(num_completions >= 0); если (num_completions == 0) { м_поллинг = ложь; перейти к началу; } еще { if(!ignore_errors && ret.status != IBV_WC_SUCCESS) { FATAL_ERROR("Неудачный статус %s (%d) для wr_id %d\n", ibv_wc_status_str(ret.status), ret.статус, (int) ret.wr_id); } перерыв; } } вернуть возврат; } wait_event() должен получить следующий WC по CQ. Если CQ не пуст, он должен вытолкнуть один WC. Если CQ пуст, функция должна блокироваться до тех пор, пока не будет сгенерирован WC.

Есть ли функциональная разница между этими двумя кодами? Я использую SoftRoCE в Ubuntu 22.04.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Используйте NVIDIA GPUDirect RDMA с nvJPEG
    Anonymous » » в форуме C++
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • GPU в GPU прямой передачу данных с помощью ConnectX и RDMA
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Варианты разработки веб-приложения для опроса данных ПЛК [закрыто]
    Гость » » в форуме C#
    0 Ответы
    48 Просмотры
    Последнее сообщение Гость
  • TeleBot: «Исключение бесконечного опроса: («Соединение прервано.», RemoteDisconnected («Удаленное соединение закрыто без
    Гость » » в форуме Python
    0 Ответы
    147 Просмотры
    Последнее сообщение Гость
  • Как написать код модульного теста для опроса с помощью Coroutine Job?
    Anonymous » » в форуме Android
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»