Я новичок Infiniband/RDMA, играющий с RDMA на оборудовании Mellanox Infiniband. Я использовал исходный код here. На первый взгляд программа работает нормально: сервер записывает несколько байтов в клиентскую память, используя операцию RDMA_WRITE. Однако позже я обнаружил, что количество переданных байтов, которое указано структурой завершения записи (ibv_wc), не соответствует количеству данных, которые я ввел в структуру ibv_send_wr. Вот код для инициализации ibv_send_wr в rdma_write():RDMA WRITE: ibv_wc.byte_len не соответствует тому, что я пытаюсь написать
ctx->sge_list.addr = (uintptr_t)ctx->buf;
ctx->sge_list.length = ctx->size; //which is 65536
ctx->sge_list.lkey = ctx->mr->lkey;
ctx->wr.wr.rdma.remote_addr = data->remote_connection->vaddr;
ctx->wr.wr_id = RDMA_WRID;
ctx->wr.sg_list = &ctx->sge_list;
ctx->wr_num_sge = 1;
ctx->wr.opcode = IBV_WR_RDMA_WRITE;
ctx->wr.send_flags = IBV_SEND_SIGNALED;
ctx->wr.next = NULL;
Затем я прочитал ibv_wc.byte_len после я получаю запись в завершении записи в очереди завершения записи. Он показывает случайные числа: 32537, 32743, 32533. Я предполагаю, что передача успешна, потому что ibv_wc.status равен IBV_WC_SUCCESS. Я сделал что-то не так?
Спасибо Аггей! Теперь я просто проверяю правильность возвращаемого значения или нет. Он отлично работает для меня. –