From e8e609cb74f6ca11f6ee7b2ee8263e2274d289da Mon Sep 17 00:00:00 2001 From: kircher Date: Sun, 25 Jun 2023 15:15:16 +0800 Subject: [PATCH] sync enable-UDP-CKSUM-in-gazelle (cherry picked from commit a02db14a02a694717d7b73914667e7bfcb24f868) --- ...null-pointer-of-sock-in-udp_recvfrom.patch | 45 ++++++ ...hen-tcp-ip-checksum-offloads-disable.patch | 28 ++++ 0256-lstack-cfg-add-app_exclude_cpus.patch | 128 ++++++++++++++++++ 0257-enable-UDP-CKSUM-in-gazelle.patch | 64 +++++++++ gazelle.spec | 14 +- 5 files changed, 277 insertions(+), 2 deletions(-) create mode 100644 0254-fix-null-pointer-of-sock-in-udp_recvfrom.patch create mode 100644 0255-skip-gro-when-tcp-ip-checksum-offloads-disable.patch create mode 100644 0256-lstack-cfg-add-app_exclude_cpus.patch create mode 100644 0257-enable-UDP-CKSUM-in-gazelle.patch diff --git a/0254-fix-null-pointer-of-sock-in-udp_recvfrom.patch b/0254-fix-null-pointer-of-sock-in-udp_recvfrom.patch new file mode 100644 index 0000000..cd8d2f4 --- /dev/null +++ b/0254-fix-null-pointer-of-sock-in-udp_recvfrom.patch @@ -0,0 +1,45 @@ +From 734f786e959fc536a41f304bbffe9fa9c269b874 Mon Sep 17 00:00:00 2001 +From: jiangheng +Date: Mon, 19 Jun 2023 15:51:50 +0800 +Subject: [PATCH] fix null pointer of sock in udp_recvfrom + +--- + src/lstack/api/lstack_wrap.c | 15 +++++++++++---- + 1 file changed, 11 insertions(+), 4 deletions(-) + +diff --git a/src/lstack/api/lstack_wrap.c b/src/lstack/api/lstack_wrap.c +index 096fcf7..6ee0512 100644 +--- a/src/lstack/api/lstack_wrap.c ++++ b/src/lstack/api/lstack_wrap.c +@@ -552,7 +552,7 @@ static inline ssize_t udp_recvfrom(struct lwip_sock *sock, int32_t sockfd, void + { + int32_t ret; + +- do { ++ while (1) { + ret = read_stack_data(sockfd, buf, len, flags, addr, addrlen); + if (ret > 0) { + return ret; +@@ -561,9 +561,16 @@ static inline ssize_t udp_recvfrom(struct lwip_sock *sock, int32_t sockfd, void + return -1; + } + sock = sock->listen_next; +- sockfd = sock->conn->socket; +- } while (sock != NULL); +- GAZELLE_RETURN(EAGAIN); ++ if (sock != NULL && sock->conn != NULL) { ++ sockfd = sock->conn->socket; ++ } else { ++ if (sock == NULL) { ++ GAZELLE_RETURN(EAGAIN); ++ } else { ++ GAZELLE_RETURN(ENOTCONN); ++ } ++ } ++ } + } + + static inline ssize_t tcp_recvfrom(struct lwip_sock *sock, int32_t sockfd, void *buf, size_t len, int32_t flags, +-- +2.33.0 + diff --git a/0255-skip-gro-when-tcp-ip-checksum-offloads-disable.patch b/0255-skip-gro-when-tcp-ip-checksum-offloads-disable.patch new file mode 100644 index 0000000..2076515 --- /dev/null +++ b/0255-skip-gro-when-tcp-ip-checksum-offloads-disable.patch @@ -0,0 +1,28 @@ +From 9f3faa569a3181585da5650dec66136f89591348 Mon Sep 17 00:00:00 2001 +From: jiangheng +Date: Tue, 20 Jun 2023 09:20:43 +0800 +Subject: [PATCH] skip gro when tcp/ip checksum offloads disable + +--- + src/lstack/netif/lstack_vdev.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/lstack/netif/lstack_vdev.c b/src/lstack/netif/lstack_vdev.c +index 5ea1f31..4307f24 100644 +--- a/src/lstack/netif/lstack_vdev.c ++++ b/src/lstack/netif/lstack_vdev.c +@@ -82,6 +82,11 @@ static uint32_t vdev_rx_poll(struct protocol_stack *stack, struct rte_mbuf **pkt + return pkt_num; + } + ++ /* skip gro when tcp/ip cksum offloads disable */ ++ if (get_protocol_stack_group()->rx_offload == 0) { ++ return pkt_num; ++ } ++ + for (uint32_t i = 0; i < pkt_num; i++) { + struct rte_ether_hdr *ethh = rte_pktmbuf_mtod(pkts[i], struct rte_ether_hdr *); + if (unlikely(RTE_BE16(RTE_ETHER_TYPE_IPV4) != ethh->ether_type)) { +-- +2.33.0 + diff --git a/0256-lstack-cfg-add-app_exclude_cpus.patch b/0256-lstack-cfg-add-app_exclude_cpus.patch new file mode 100644 index 0000000..2852271 --- /dev/null +++ b/0256-lstack-cfg-add-app_exclude_cpus.patch @@ -0,0 +1,128 @@ +From 1c771f0af29dad27d29af371b13ab3013efc44c3 Mon Sep 17 00:00:00 2001 +From: Lemmy Huang +Date: Tue, 20 Jun 2023 17:30:34 +0800 +Subject: [PATCH] lstack: cfg add app_exclude_cpus + +Signed-off-by: Lemmy Huang +--- + src/lstack/core/lstack_cfg.c | 55 ++++++++++++++++--- + src/lstack/include/lstack_cfg.h | 2 + + 2 files changed, 49 insertions(+), 8 deletions(-) + +diff --git a/src/lstack/core/lstack_cfg.c b/src/lstack/core/lstack_cfg.c +index daf49ea..8a627d5 100644 +--- a/src/lstack/core/lstack_cfg.c ++++ b/src/lstack/core/lstack_cfg.c +@@ -47,6 +47,8 @@ static config_t g_config; + static int32_t parse_host_addr(void); + static int32_t parse_low_power_mode(void); + static int32_t parse_stack_cpu_number(void); ++static int32_t parse_app_bind_numa(void); ++static int32_t parse_app_exclude_cpus(void); + static int32_t parse_use_ltran(void); + static int32_t parse_mask_addr(void); + static int32_t parse_devices(void); +@@ -54,7 +56,6 @@ static int32_t parse_dpdk_args(void); + static int32_t parse_gateway_addr(void); + static int32_t parse_kni_switch(void); + static int32_t parse_listen_shadow(void); +-static int32_t parse_app_bind_numa(void); + static int32_t parse_main_thread_affinity(void); + static int32_t parse_unix_prefix(void); + static int32_t parse_read_connect_number(void); +@@ -111,6 +112,7 @@ static struct config_vector_t g_config_tbl[] = { + { "kni_switch", parse_kni_switch }, + { "listen_shadow", parse_listen_shadow }, + { "app_bind_numa", parse_app_bind_numa }, ++ { "app_exclude_cpus", parse_app_exclude_cpus }, + { "main_thread_affinity", parse_main_thread_affinity }, + { "unix_prefix", parse_unix_prefix }, + { "tcp_conn_count", parse_tcp_conn_count }, +@@ -391,6 +393,46 @@ static int32_t parse_stack_cpu_number(void) + return 0; + } + ++static int32_t parse_app_bind_numa(void) ++{ ++ int32_t ret; ++ PARSE_ARG(g_config_params.app_bind_numa, "app_bind_numa", 1, 0, 1, ret); ++ return ret; ++} ++ ++static int32_t parse_app_exclude_cpus(void) ++{ ++ const config_setting_t *num_cpus = NULL; ++ const char *args = NULL; ++ char *tmp_arg; ++ int32_t cnt; ++ ++ g_config_params.app_exclude_num_cpu = 0; ++ if (!g_config_params.app_bind_numa) { ++ return 0; ++ } ++ ++ num_cpus = config_lookup(&g_config, "app_exclude_cpus"); ++ if (num_cpus == NULL) { ++ return 0; ++ } ++ ++ args = config_setting_get_string(num_cpus); ++ if (args == NULL) { ++ return -EINVAL; ++ } ++ ++ tmp_arg = strdup(args); ++ cnt = separate_str_to_array(tmp_arg, g_config_params.app_exclude_cpus, CFG_MAX_CPUS, CFG_MAX_CPUS); ++ free(tmp_arg); ++ if (cnt <= 0 || cnt > CFG_MAX_CPUS) { ++ return -EINVAL; ++ } ++ ++ g_config_params.app_exclude_num_cpu = cnt; ++ return 0; ++} ++ + static int32_t numa_to_cpusnum(unsigned socket_id, uint32_t *cpulist, int32_t num) + { + char path[PATH_MAX] = {0}; +@@ -458,6 +500,10 @@ int32_t init_stack_numa_cpuset(struct protocol_stack *stack) + } + } + ++ for (int32_t idx = 0; idx < cfg->app_exclude_num_cpu; ++idx) { ++ CPU_SET(cfg->app_exclude_cpus[idx], &stack_cpuset); ++ } ++ + ret = stack_idle_cpuset(stack, &stack_cpuset); + if (ret < 0) { + LSTACK_LOG(ERR, LSTACK, "thread_get_cpuset stack(%u) failed\n", stack->tid); +@@ -836,13 +882,6 @@ static int32_t parse_listen_shadow(void) + return ret; + } + +-static int32_t parse_app_bind_numa(void) +-{ +- int32_t ret; +- PARSE_ARG(g_config_params.app_bind_numa, "app_bind_numa", 1, 0, 1, ret); +- return ret; +-} +- + static int32_t parse_main_thread_affinity(void) + { + int32_t ret; +diff --git a/src/lstack/include/lstack_cfg.h b/src/lstack/include/lstack_cfg.h +index b000519..6da18cf 100644 +--- a/src/lstack/include/lstack_cfg.h ++++ b/src/lstack/include/lstack_cfg.h +@@ -68,6 +68,8 @@ struct cfg_params { + uint32_t cpus[CFG_MAX_CPUS]; + uint32_t send_cpus[CFG_MAX_CPUS]; + uint32_t recv_cpus[CFG_MAX_CPUS]; ++ uint16_t app_exclude_num_cpu; ++ uint32_t app_exclude_cpus[CFG_MAX_CPUS]; + uint8_t num_ports; + uint16_t ports[CFG_MAX_PORTS]; + char log_file[PATH_MAX]; +-- +2.33.0 + diff --git a/0257-enable-UDP-CKSUM-in-gazelle.patch b/0257-enable-UDP-CKSUM-in-gazelle.patch new file mode 100644 index 0000000..7957347 --- /dev/null +++ b/0257-enable-UDP-CKSUM-in-gazelle.patch @@ -0,0 +1,64 @@ +From 266f148b8080e9896fba1bdbaebb5e2dbfd44f07 Mon Sep 17 00:00:00 2001 +From: kircher +Date: Wed, 21 Jun 2023 15:03:47 +0800 +Subject: [PATCH] enable UDP CKSUM in gazelle + +--- + src/common/dpdk_common.c | 22 ++++++++++++++++++++-- + 1 file changed, 20 insertions(+), 2 deletions(-) + +diff --git a/src/common/dpdk_common.c b/src/common/dpdk_common.c +index 23c96d6..52a163f 100644 +--- a/src/common/dpdk_common.c ++++ b/src/common/dpdk_common.c +@@ -92,11 +92,18 @@ void eth_params_checksum(struct rte_eth_conf *conf, struct rte_eth_dev_info *dev + COMMON_INFO("DEV_RX_OFFLOAD_IPV4_CKSUM\n"); + } + ++ // rx tcp + if (rx_ol_capa & DEV_RX_OFFLOAD_TCP_CKSUM) { + rx_ol |= DEV_RX_OFFLOAD_TCP_CKSUM; + COMMON_INFO("DEV_RX_OFFLOAD_TCP_CKSUM\n"); + } + ++ // rx udp ++ if (rx_ol_capa & DEV_RX_OFFLOAD_UDP_CKSUM) { ++ rx_ol |= DEV_RX_OFFLOAD_UDP_CKSUM; ++ COMMON_INFO("DEV_RX_OFFLOAD_UDP_CKSUM\n"); ++ } ++ + // tx ip + if (tx_ol_capa & DEV_TX_OFFLOAD_IPV4_CKSUM) { + tx_ol |= DEV_TX_OFFLOAD_IPV4_CKSUM; +@@ -109,15 +116,26 @@ void eth_params_checksum(struct rte_eth_conf *conf, struct rte_eth_dev_info *dev + COMMON_INFO("DEV_TX_OFFLOAD_TCP_CKSUM\n"); + } + ++ // tx udp ++ if (tx_ol_capa & DEV_TX_OFFLOAD_UDP_CKSUM) { ++ tx_ol |= DEV_TX_OFFLOAD_UDP_CKSUM; ++ COMMON_INFO("DEV_TX_OFFLOAD_UDP_CKSUM\n"); ++ } ++ ++ // tx tso + if (tx_ol_capa & DEV_TX_OFFLOAD_TCP_TSO) { + tx_ol |= (DEV_TX_OFFLOAD_TCP_TSO | DEV_TX_OFFLOAD_MULTI_SEGS); + COMMON_INFO("DEV_TX_OFFLOAD_TCP_TSO\n"); + } + +- if (!(rx_ol & DEV_RX_OFFLOAD_TCP_CKSUM) || !(rx_ol & DEV_RX_OFFLOAD_IPV4_CKSUM)) { ++ if (!(rx_ol & DEV_RX_OFFLOAD_UDP_CKSUM) || ++ !(rx_ol & DEV_RX_OFFLOAD_TCP_CKSUM) || ++ !(rx_ol & DEV_RX_OFFLOAD_IPV4_CKSUM)) { + rx_ol = 0; + } +- if (!(tx_ol & DEV_TX_OFFLOAD_TCP_CKSUM) || !(tx_ol & DEV_TX_OFFLOAD_IPV4_CKSUM)) { ++ if (!(tx_ol & DEV_TX_OFFLOAD_UDP_CKSUM) || ++ !(tx_ol & DEV_TX_OFFLOAD_TCP_CKSUM) || ++ !(tx_ol & DEV_TX_OFFLOAD_IPV4_CKSUM)) { + tx_ol = 0; + } + +-- +2.33.0 + diff --git a/gazelle.spec b/gazelle.spec index a17dfb4..7acce4e 100644 --- a/gazelle.spec +++ b/gazelle.spec @@ -2,7 +2,7 @@ Name: gazelle Version: 1.0.1 -Release: 66 +Release: 67 Summary: gazelle is a high performance user-mode stack License: MulanPSL-2.0 URL: https://gitee.com/openeuler/gazelle @@ -268,6 +268,10 @@ Patch9250: 0250-adapt-to-dpdk-19.11-and-dpdk-21.11.patch Patch9251: 0251-change-send_ring_size-32-in-lstack-conf.patch Patch9252: 0252-add-use_sockmap-in-cfg-to-distinguish-whether-to-use.patch Patch9253: 0253-add-multicast-enable-in-dpdk_ethdev_init.patch +Patch9254: 0254-fix-null-pointer-of-sock-in-udp_recvfrom.patch +Patch9255: 0255-skip-gro-when-tcp-ip-checksum-offloads-disable.patch +Patch9256: 0256-lstack-cfg-add-app_exclude_cpus.patch +Patch9257: 0257-enable-UDP-CKSUM-in-gazelle.patch %description %{name} is a high performance user-mode stack. @@ -309,6 +313,12 @@ install -Dpm 0640 %{_builddir}/%{name}-%{version}/src/ltran/ltran.conf %{b %config(noreplace) %{conf_path}/ltran.conf %changelog +* Sun Jun 25 2023 kircher - 1.0.1-67 +- enable UDP CKSUM in gazelle +- lstack: cfg add app_exclude_cpus +- skip gro when tcp/ip checksum offloads disable +- fix null pointer of sock in udp_recvfrom + * Mon Jun 19 2023 jiangheng12 - 1.0.1-66 - add multicast enable in dpdk_ethdev_init - add use_sockmap in cfg to distinguish whether to use dpdk ring communication between processes @@ -382,7 +392,7 @@ install -Dpm 0640 %{_builddir}/%{name}-%{version}/src/ltran/ltran.conf %{b * Thu Apr 20 2023 sunsuwan - 1.0.1-55 - sepeate_string_to array add error args handle -* Thu Apr 20 UTC wu-changsheng - 1.0.1-54 +* Thu Apr 20 2023 wu-changsheng - 1.0.1-54 - waiting when primary process not start already - gazelle send/recv thread bind numa