struct fast_task_info add fields: is_client and op_type for io_uring

use_iouring
YuQing 2025-10-03 10:18:25 +08:00
parent 4576f22e24
commit 7973d81b69
8 changed files with 30 additions and 7 deletions

1
.gitignore vendored
View File

@ -1,5 +1,6 @@
# Makefile.in
src/Makefile
src/tests/Makefile
# Prerequisites
*.d

10
make.sh
View File

@ -119,6 +119,7 @@ if [ "$uname" = "Linux" ]; then
out=$(grep -F IORING_OP_SEND_ZC /usr/include/liburing/io_uring.h)
if [ -n "$out" ]; then
IOEVENT_USE=IOEVENT_USE_URING
LIBS="$LIBS -luring"
else
IOEVENT_USE=IOEVENT_USE_EPOLL
fi
@ -276,3 +277,12 @@ make $1 $2 $3
if [ "$1" = "clean" ]; then
/bin/rm -f Makefile _os_define.h
fi
cd tests
cp Makefile.in Makefile
sed_replace "s#\\\$(CC)#gcc#g" Makefile
sed_replace "s#\\\$(INCS)#$INCS#g" Makefile
sed_replace "s#\\\$(LIBS)#$LIBS#g" Makefile
if [ "$1" = "clean" ]; then
/bin/rm -f Makefile
fi

View File

@ -49,7 +49,8 @@ struct sf_network_handler;
struct fast_task_info;
#if IOEVENT_USE_URING
#define FC_URING_OP_TYPE(task) (task)->event.timer.op_type
#define FC_URING_OP_TYPE(task) (task)->uring.op_type
#define FC_URING_IS_CLIENT(task) (task)->uring.is_client
#endif
typedef struct ioevent_entry
@ -126,12 +127,20 @@ struct fast_task_info
struct fast_net_buffer_wrapper recv; //recv buffer
uint16_t port; //peer port
#if IOEVENT_USE_URING
struct {
int8_t is_client;
uint8_t op_type;
} uring; //since v1.0.81
#endif
struct {
uint8_t current;
volatile uint8_t notify;
} nio_stages; //stages for network IO
volatile int8_t reffer_count;
volatile int8_t canceled; //if task canceled
volatile int reffer_count;
int pending_send_count;
int64_t req_count; //request count
struct {

View File

@ -27,9 +27,6 @@ typedef struct fast_timer_entry {
struct fast_timer_entry *next;
int slot_index;
bool rehash;
#if IOEVENT_USE_URING
short op_type;
#endif
} FastTimerEntry;
typedef struct fast_timer_slot {

View File

@ -33,6 +33,7 @@
#define IOEVENT_ERROR (EPOLLERR | EPOLLPRI | EPOLLHUP)
#elif IOEVENT_USE_URING
#include <sys/mount.h>
#include <liburing.h>
#define IOEVENT_READ POLLIN
#define IOEVENT_WRITE POLLOUT

View File

@ -286,6 +286,10 @@ int ioevent_set(struct fast_task_info *task, struct nio_thread_data *pThread,
__LINE__, sock, result, STRERROR(result));
return result;
}
} else {
logInfo("file: "__FILE__", line: %d, "
"skip uring_prep_recv, fd: %d, port: %d, in progress op type: %d, timeout: %"PRId64,
__LINE__, sock, task->port, FC_URING_OP_TYPE(task), task->event.timer.expires);
}
} else {
#endif

View File

@ -23,6 +23,7 @@
#define fc_hold_task_ex(task, inc_count) __sync_add_and_fetch( \
&task->reffer_count, inc_count)
#define fc_hold_task(task) fc_hold_task_ex(task, 1)
#ifdef __cplusplus

View File

@ -1,8 +1,8 @@
.SUFFIXES: .c .o
COMPILE = $(CC) -g -O3 -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -DDEBUG_FLAG
INC_PATH = -I/usr/local/include
LIB_PATH = -lfastcommon -lpthread
INC_PATH = $(INCS)
LIB_PATH = -lfastcommon $(LIBS)
ALL_PRGS = test_allocator test_skiplist test_multi_skiplist test_mblock test_blocked_queue \
test_id_generator test_ini_parser test_char_convert test_char_convert_loader \