Attention is currently required from: jolly, laforge.
7 comments:
Patchset:
Due to the comments I wrote I still personally believe this is shooting us in the foot, it's not the best approach and that we should instead at least first try to write a patch where we keep "iofds waiting to get an SQE" in a llist if getting an sqe fails. Then, when we receive a "op complete" event, we iterate over the llist to try to get sqes for those again.
File src/core/osmo_io_internal.h:
Patch Set #6, Line 116: /* ! array of rings the submitted read SQEs have been submitted */
"have been submitted to"
File src/core/osmo_io_uring.c:
Patch Set #6, Line 115: g_ring = calloc(1, sizeof(*g_ring));
use talloc.
Patch Set #6, Line 164: LOGP(DLIO, LOGL_NOTICE, "increasing io_uring size to %d.\n", g_io_uring_size);
Please put this into 1 single LOGP.
Patch Set #6, Line 172: sqe = io_uring_get_sqe(&g_ring->ring);
so here we end up with 2 read SQEs on 2 different queues.
How do we now we receive the read completion events in correct order? Which API guarantees that?
Patch Set #6, Line 527: while ((sqe = io_uring_get_sqe(iofd->u.uring.read_ring[idx])) == NULL);
that looks like a really nice tight non-blocking loop filling the CPU?
Patch Set #6, Line 543: while ((sqe = io_uring_get_sqe(iofd->u.uring.write_ring)) == NULL);
that looks like a really nice tight non-blocking loop filling the CPU?
To view, visit change 40725. To unsubscribe, or for help writing mail filters, visit settings.