From ec4b6284d46846c62ecb2d0d37da95a90de152a0 Mon Sep 17 00:00:00 2001 From: wuchangsheng Date: Thu, 6 Oct 2022 20:19:49 +0800 Subject: [PATCH] refactor add event, limit send pkts num --- ...factor-add-event-limit-send-pkts-num.patch | 71 +++++++++++++++++++ lwip.spec | 7 +- 2 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 0031-refactor-add-event-limit-send-pkts-num.patch diff --git a/0031-refactor-add-event-limit-send-pkts-num.patch b/0031-refactor-add-event-limit-send-pkts-num.patch new file mode 100644 index 0000000..63ba303 --- /dev/null +++ b/0031-refactor-add-event-limit-send-pkts-num.patch @@ -0,0 +1,71 @@ +From 87166f699e0febd36b81d914713b770119ead471 Mon Sep 17 00:00:00 2001 +From: wuchangsheng +Date: Thu, 6 Oct 2022 20:16:06 +0800 +Subject: [PATCH] refactor add event, limit send pkts num + +--- + src/api/sockets.c | 4 ++-- + src/core/tcp_out.c | 8 ++++++++ + src/include/eventpoll.h | 3 ++- + 3 files changed, 12 insertions(+), 3 deletions(-) + +diff --git a/src/api/sockets.c b/src/api/sockets.c +index 4d4cea1..d5b69eb 100644 +--- a/src/api/sockets.c ++++ b/src/api/sockets.c +@@ -2665,7 +2665,7 @@ event_callback(struct netconn *conn, enum netconn_evt evt, u16_t len) + } + #if USE_LIBOS + if (conn->acceptmbox != NULL && !sys_mbox_empty(conn->acceptmbox)) { +- add_epoll_event(conn, POLLIN); ++ add_sock_event(sock, POLLIN); + } + #endif + break; +@@ -2686,7 +2686,7 @@ event_callback(struct netconn *conn, enum netconn_evt evt, u16_t len) + case NETCONN_EVT_ERROR: + sock->errevent = 1; + #if USE_LIBOS +- add_epoll_event(conn, EPOLLERR); ++ add_sock_event(sock, EPOLLERR); + #endif + break; + default: +diff --git a/src/core/tcp_out.c b/src/core/tcp_out.c +index 1b0af8d..dd780d3 100644 +--- a/src/core/tcp_out.c ++++ b/src/core/tcp_out.c +@@ -1358,8 +1358,16 @@ tcp_output(struct tcp_pcb *pcb) + for (; useg->next != NULL; useg = useg->next); + } + /* data available and window allows it to be sent? */ ++#if USE_LIBOS ++ /* avoid send cose too much time, limit send pkts num max 10 */ ++ uint16_t send_pkt = 0; ++ while (seg != NULL && send_pkt < 10 && ++ lwip_ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len <= wnd) { ++ send_pkt++; ++#else + while (seg != NULL && + lwip_ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len <= wnd) { ++#endif + LWIP_ASSERT("RST not expected here!", + (TCPH_FLAGS(seg->tcphdr) & TCP_RST) == 0); + /* Stop sending if the nagle algorithm would prevent it +diff --git a/src/include/eventpoll.h b/src/include/eventpoll.h +index aacc1d2..a10c84b 100644 +--- a/src/include/eventpoll.h ++++ b/src/include/eventpoll.h +@@ -63,7 +63,8 @@ struct libos_epoll { + int efd; /* eventfd */ + }; + +-extern void add_epoll_event(struct netconn*, uint32_t); ++struct lwip_sock; ++extern void add_sock_event(struct lwip_sock *sock, uint32_t event); + extern int32_t lstack_epoll_close(int32_t); + + #endif /* __EVENTPOLL_H__ */ +-- +2.27.0 + diff --git a/lwip.spec b/lwip.spec index 335fc05..66589e7 100644 --- a/lwip.spec +++ b/lwip.spec @@ -4,7 +4,7 @@ Summary: lwip is a small independent implementation of the TCP/IP protocol suite Name: lwip Version: 2.1.3 -Release: 18 +Release: 19 License: BSD URL: http://savannah.nongnu.org/projects/lwip/ Source0: http://download.savannah.nongnu.org/releases/lwip/%{name}-%{version}.tar.gz @@ -42,6 +42,7 @@ Patch9026: 0027-modify-EISCONN-condition.patch Patch9027: 0028-per-thread-reassdata-variables.patch Patch9028: 0029-fix-EISCONN-err-and-remove-same-customized-modificat.patch Patch9029: 0030-refactor-tcp-new-port.patch +Patch9030: 0031-refactor-add-event-limit-send-pkts-num.patch BuildRequires: gcc-c++ dos2unix dpdk-devel @@ -70,6 +71,10 @@ cd %{_builddir}/%{name}-%{version}/src %{_libdir}/liblwip.a %changelog +* Thu Oct 6 2022 wuchangsheng - 2.1.3-19 +- refactor add event + limit send pkts num max 10 + * Thu Oct 6 2022 wuchangsheng - 2.1.3-18 - fix multithread duplicate port num support select appropriate port num to rss same as nic -- Gitee