Optimize packet I/O and timeouts

- Introduce per-thread I/O statistics for packet I/O to reduce performance overhead.
- Implement packet_io_yield() for better thread management during I/O operations.
- Refactor time wheel management:
  - Replace timeouts-based cron tasks with (now_ts - last_ts > timeout) for scheduled tasks.
  - Update the time wheel every 5 ms for improved time management.
This commit is contained in:
luwenpeng
2024-04-18 14:20:28 +08:00
parent 892842c61b
commit 5508454a1b
32 changed files with 377 additions and 540 deletions

View File

@@ -116,8 +116,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_FIN_FIN)
session_print(sess);
// check stat
session_manager_print_stat(mgr);
stat = session_manager_get_stat(mgr);
stat = session_manager_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_sess_used == 1);
EXPECT_TRUE(stat->nr_tcp_sess_opening == 0);
@@ -134,8 +133,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_FIN_FIN)
session_manager_free_session(mgr, sess);
// check stat
session_manager_print_stat(mgr);
stat = session_manager_get_stat(mgr);
stat = session_manager_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_sess_used == 0);
EXPECT_TRUE(stat->nr_tcp_sess_opening == 0);
@@ -212,8 +210,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_C2S_RST)
session_print(sess);
// check stat
session_manager_print_stat(mgr);
stat = session_manager_get_stat(mgr);
stat = session_manager_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_sess_used == 1);
EXPECT_TRUE(stat->nr_tcp_sess_opening == 0);
@@ -230,8 +227,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_C2S_RST)
session_manager_free_session(mgr, sess);
// check stat
session_manager_print_stat(mgr);
stat = session_manager_get_stat(mgr);
stat = session_manager_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_sess_used == 0);
EXPECT_TRUE(stat->nr_tcp_sess_opening == 0);
@@ -308,8 +304,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_S2C_RST)
session_print(sess);
// check stat
session_manager_print_stat(mgr);
stat = session_manager_get_stat(mgr);
stat = session_manager_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_sess_used == 1);
EXPECT_TRUE(stat->nr_tcp_sess_opening == 0);
@@ -326,8 +321,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_S2C_RST)
session_manager_free_session(mgr, sess);
// check stat
session_manager_print_stat(mgr);
stat = session_manager_get_stat(mgr);
stat = session_manager_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_sess_used == 0);
EXPECT_TRUE(stat->nr_tcp_sess_opening == 0);
@@ -365,8 +359,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_INIT_TIMEOUT)
EXPECT_TRUE(sess);
// check stat
session_manager_print_stat(mgr);
stat = session_manager_get_stat(mgr);
stat = session_manager_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_sess_used == 1);
EXPECT_TRUE(stat->nr_tcp_sess_opening == 1);
@@ -384,8 +377,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_INIT_TIMEOUT)
session_manager_free_session(mgr, sess);
// check stat
session_manager_print_stat(mgr);
stat = session_manager_get_stat(mgr);
stat = session_manager_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_sess_used == 0);
EXPECT_TRUE(stat->nr_tcp_sess_opening == 0);
@@ -455,8 +447,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_HANDSHAKE_TIMEOUT)
session_print(sess);
// check stat
session_manager_print_stat(mgr);
stat = session_manager_get_stat(mgr);
stat = session_manager_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_sess_used == 1);
EXPECT_TRUE(stat->nr_tcp_sess_opening == 1);
@@ -474,8 +465,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_HANDSHAKE_TIMEOUT)
session_manager_free_session(mgr, sess);
// check stat
session_manager_print_stat(mgr);
stat = session_manager_get_stat(mgr);
stat = session_manager_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_sess_used == 0);
EXPECT_TRUE(stat->nr_tcp_sess_opening == 0);
@@ -556,8 +546,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_DATA_TIMEOUT)
session_print(sess);
// check stat
session_manager_print_stat(mgr);
stat = session_manager_get_stat(mgr);
stat = session_manager_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_sess_used == 1);
EXPECT_TRUE(stat->nr_tcp_sess_opening == 1);
@@ -575,8 +564,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_DATA_TIMEOUT)
session_manager_free_session(mgr, sess);
// check stat
session_manager_print_stat(mgr);
stat = session_manager_get_stat(mgr);
stat = session_manager_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_sess_used == 0);
EXPECT_TRUE(stat->nr_tcp_sess_opening == 0);
@@ -646,8 +634,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_C2S_HALF_FIN)
session_print(sess);
// check stat
session_manager_print_stat(mgr);
stat = session_manager_get_stat(mgr);
stat = session_manager_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_sess_used == 1);
EXPECT_TRUE(stat->nr_tcp_sess_opening == 0);
@@ -664,8 +651,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_C2S_HALF_FIN)
session_manager_free_session(mgr, sess);
// check stat
session_manager_print_stat(mgr);
stat = session_manager_get_stat(mgr);
stat = session_manager_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_sess_used == 0);
EXPECT_TRUE(stat->nr_tcp_sess_opening == 0);
@@ -735,8 +721,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_S2C_HALF_FIN)
session_print(sess);
// check stat
session_manager_print_stat(mgr);
stat = session_manager_get_stat(mgr);
stat = session_manager_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_sess_used == 1);
EXPECT_TRUE(stat->nr_tcp_sess_opening == 0);
@@ -753,8 +738,7 @@ TEST(TCP_OPENING_TO_CLOSING, BY_S2C_HALF_FIN)
session_manager_free_session(mgr, sess);
// check stat
session_manager_print_stat(mgr);
stat = session_manager_get_stat(mgr);
stat = session_manager_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_sess_used == 0);
EXPECT_TRUE(stat->nr_tcp_sess_opening == 0);