Batch handle_immediate_ops more

This commit is contained in:
Vitaliy Filippov
2026-04-03 21:22:42 +03:00
parent ea280609ce
commit 1eec28bc65
3 changed files with 7 additions and 5 deletions
+1 -2
View File
@@ -557,7 +557,7 @@ static void try_send_rdma_wr(osd_client_t *cl, ibv_sge *sge, int op_sge)
int osd_messenger_t::try_send_rdma_copy(osd_client_t *cl, uint8_t *dst, int dst_len) int osd_messenger_t::try_send_rdma_copy(osd_client_t *cl, uint8_t *dst, int dst_len)
{ {
int total_dst_len = dst_len; int total_dst_len = dst_len;
while (dst_len > 0 && cl->write_ops.size()) while (dst_len > 0 && (cl->write_op || cl->write_ops.size()))
{ {
if (!cl->write_op) if (!cl->write_op)
{ {
@@ -748,5 +748,4 @@ void osd_messenger_t::handle_rdma_events(msgr_rdma_context_t *rdma_context)
} }
} }
} while (event_count > 0); } while (event_count > 0);
handle_immediate_ops();
} }
+5 -2
View File
@@ -75,6 +75,7 @@ void osd_messenger_t::read_requests()
} }
} }
read_ready_clients.clear(); read_ready_clients.clear();
handle_immediate_ops();
} }
void osd_messenger_t::handle_read(int result, osd_client_t *cl) void osd_messenger_t::handle_read(int result, osd_client_t *cl)
@@ -110,7 +111,8 @@ void osd_messenger_t::handle_read(int result, osd_client_t *cl)
full_read = result >= cl->read_iov.iov_len; full_read = result >= cl->read_iov.iov_len;
if (!handle_read_buffer(cl, cl->in_buf, result)) if (!handle_read_buffer(cl, cl->in_buf, result))
{ {
handle_immediate_ops(); if (set_immediate_ops.size())
ringloop->wakeup();
return; return;
} }
} }
@@ -153,7 +155,8 @@ void osd_messenger_t::handle_read(int result, osd_client_t *cl)
{ {
read_ready_clients.push_back(cl->client_id); read_ready_clients.push_back(cl->client_id);
} }
handle_immediate_ops(); if (set_immediate_ops.size())
ringloop->wakeup();
} }
void osd_messenger_t::handle_immediate_ops() void osd_messenger_t::handle_immediate_ops()
+1 -1
View File
@@ -51,7 +51,7 @@ void osd_messenger_t::outbox_push(osd_op_t *cur_op)
if (!ringloop) if (!ringloop)
{ {
// FIXME: It's worse because it doesn't allow batching // FIXME: It's worse because it doesn't allow batching
while (cl->write_ops.size()) while (cl->write_op || cl->write_ops.size())
{ {
try_send(cl); try_send(cl);
} }