diff --git a/common/src/io_uring.cpp b/common/src/io_uring.cpp index 1c5fcd3..4cc1b58 100644 --- a/common/src/io_uring.cpp +++ b/common/src/io_uring.cpp @@ -37,21 +37,17 @@ struct iobuffer_pool struct iobuffer *free_list; }; -struct config -{ - int ring_size; - int buff_size; - int flags; - int sq_thread_idle; // milliseconds - int enable_debug; -}; - struct io_uring_instance { + int cfg_ring_size; + int cfg_buff_size; + int cfg_flags; + int cfg_sq_thread_idle; // milliseconds + int cfg_enable_debug; + int sockfd; int eventfd; - struct config config; struct io_uring ring; struct io_uring_params params; @@ -309,13 +305,13 @@ struct io_uring_instance *io_uring_instance_create(int sockfd, int eventfd, int instance->sockfd = sockfd; instance->eventfd = eventfd; - instance->config.ring_size = ring_size; - instance->config.buff_size = buff_size; - instance->config.flags = flags; - instance->config.sq_thread_idle = sq_thread_idle; - instance->config.enable_debug = enable_debug; + instance->cfg_ring_size = ring_size; + instance->cfg_buff_size = buff_size; + instance->cfg_flags = flags; + instance->cfg_sq_thread_idle = sq_thread_idle; + instance->cfg_enable_debug = enable_debug; - instance->pool = iobuffer_pool_create(instance->config.buff_size, instance->config.ring_size); + instance->pool = iobuffer_pool_create(instance->cfg_buff_size, instance->cfg_ring_size); if (instance->pool == NULL) { TFE_LOG_ERROR(g_default_logger, "IO_URING: unable to create io buffer pool, %s", strerror(errno)); @@ -328,14 +324,14 @@ struct io_uring_instance *io_uring_instance_create(int sockfd, int eventfd, int * 执行下面命令进行验证 IORING_SETUP_SQPOLL: * sudo bpftrace -e 'tracepoint:io_uring:io_uring_submit_sqe {printf("%s(%d)\n", comm, pid);}' */ - if (instance->config.flags) + if (instance->cfg_flags) { - instance->params.flags |= instance->config.flags; + instance->params.flags |= instance->cfg_flags; } - if (instance->config.sq_thread_idle) + if (instance->cfg_sq_thread_idle) { - instance->params.sq_thread_idle = instance->config.sq_thread_idle; // milliseconds + instance->params.sq_thread_idle = instance->cfg_sq_thread_idle; // milliseconds } ret = io_uring_queue_init_params(ring_size, &instance->ring, &instance->params); @@ -388,7 +384,7 @@ static int io_uring_read(struct io_uring_instance *instance, struct iobuffer *bu io_uring_prep_readv(sqe, instance->sockfd, &buffer->vec, 1, 0); io_uring_sqe_set_data(sqe, buffer); - if (instance->config.enable_debug) + if (unlikely(instance->cfg_enable_debug)) { TFE_LOG_DEBUG(g_default_logger, "IO_URING: submit read entry: sockfd: %02d sqe: %p user_data: %p iov_base: %p iovec_len: %04ld", instance->sockfd, sqe, (void *)sqe->user_data, buffer->vec.iov_base, buffer->vec.iov_len); @@ -409,9 +405,9 @@ int io_uring_write(struct io_uring_instance *instance, const char *data, int len return -1; } - if (len > instance->config.buff_size) + if (len > instance->cfg_buff_size) { - TFE_LOG_ERROR(g_default_logger, "IO_URING: the length of the sent data [%d] is greater than the capacity of the io_uring buffer [%d]", len, instance->config.buff_size); + TFE_LOG_ERROR(g_default_logger, "IO_URING: the length of the sent data [%d] is greater than the capacity of the io_uring buffer [%d]", len, instance->cfg_buff_size); return -1; } @@ -428,7 +424,7 @@ int io_uring_write(struct io_uring_instance *instance, const char *data, int len io_uring_prep_writev(sqe, instance->sockfd, &buffer->vec, 1, 0); io_uring_sqe_set_data(sqe, buffer); - if (instance->config.enable_debug) + if (unlikely(instance->cfg_enable_debug)) { TFE_LOG_DEBUG(g_default_logger, "IO_URING: submit write entry: sockfd: %02d sqe: %p user_data: %p iov_base: %p iovec_len: %04ld", instance->sockfd, sqe, (void *)sqe->user_data, buffer->vec.iov_base, buffer->vec.iov_len); @@ -480,7 +476,7 @@ int io_uring_polling(struct io_uring_instance *instance) struct io_uring *ring = &instance->ring; struct iobuffer_pool *pool = instance->pool; io_uring_read_cb *read_cb = instance->read_cb; - int enable_debug = instance->config.enable_debug; + int enable_debug = instance->cfg_enable_debug; while (1) { @@ -501,7 +497,7 @@ int io_uring_polling(struct io_uring_instance *instance) } buffer = (struct iobuffer *)cqe->user_data; - if (enable_debug) + if (unlikely(enable_debug)) { TFE_LOG_DEBUG(g_default_logger, "IO_URING: handle %s entry: sockfd: %02d cqe: %p user_data: %p iov_base: %p iovec_len: %04ld cqe->res: %04d", ioevent_tostring(buffer->event), instance->sockfd, cqe, (void *)buffer, buffer->vec.iov_base, buffer->vec.iov_len, cqe->res);