From 59cb30e837e0391ada821a643a5800eed9628d9a Mon Sep 17 00:00:00 2001 From: xuxiao Date: Tue, 10 Oct 2023 20:53:06 +0800 Subject: [PATCH] feat(wifi): optimize iperf performance (Backport V4.3) --- components/esp_common/include/esp_task.h | 2 +- components/lwip/Kconfig | 8 ++++++++ components/lwip/linker.lf | 25 ++++++++++++------------ examples/wifi/iperf/main/cmd_wifi.c | 1 + examples/wifi/iperf/sdkconfig.defaults | 3 +++ 5 files changed, 26 insertions(+), 13 deletions(-) diff --git a/components/esp_common/include/esp_task.h b/components/esp_common/include/esp_task.h index 06ddd606cc..e830c0909d 100644 --- a/components/esp_common/include/esp_task.h +++ b/components/esp_common/include/esp_task.h @@ -51,7 +51,7 @@ #define ESP_TASK_TIMER_STACK (CONFIG_ESP_TIMER_TASK_STACK_SIZE + TASK_EXTRA_STACK_SIZE) #define ESP_TASKD_EVENT_PRIO (ESP_TASK_PRIO_MAX - 5) #define ESP_TASKD_EVENT_STACK (CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE + TASK_EXTRA_STACK_SIZE) -#define ESP_TASK_TCPIP_PRIO (ESP_TASK_PRIO_MAX - 7) +#define ESP_TASK_TCPIP_PRIO (CONFIG_LWIP_TCPIP_TASK_PRIO) #define ESP_TASK_TCPIP_STACK (CONFIG_LWIP_TCPIP_TASK_STACK_SIZE + TASK_EXTRA_STACK_SIZE) #define ESP_TASK_MAIN_PRIO (ESP_TASK_PRIO_MIN + 1) #define ESP_TASK_MAIN_STACK (CONFIG_ESP_MAIN_TASK_STACK_SIZE + TASK_EXTRA_STACK_SIZE) diff --git a/components/lwip/Kconfig b/components/lwip/Kconfig index 593e96a7c7..336567cb83 100644 --- a/components/lwip/Kconfig +++ b/components/lwip/Kconfig @@ -15,6 +15,14 @@ menu "LWIP" support .local addresses by sending one shot multicast mDNS query + config LWIP_TCPIP_TASK_PRIO + int "LWIP TCP/IP Task Priority" + default 18 + range 1 24 + help + LWIP tcpip task priority. In case of high throughput, this parameter + could be changed up to (configMAX_PRIORITIES-1). + config LWIP_L2_TO_L3_COPY bool "Enable copy between Layer2 and Layer3 packets" default n diff --git a/components/lwip/linker.lf b/components/lwip/linker.lf index 55972ecae5..8f2fff5790 100644 --- a/components/lwip/linker.lf +++ b/components/lwip/linker.lf @@ -3,24 +3,15 @@ archive: liblwip.a entries: if LWIP_IRAM_OPTIMIZATION = y: sockets:get_socket (noflash_text) - sockets:tryget_socket (noflash_text) - sockets:tryget_socket_unconn (noflash_text) - sockets:sock_inc_used (noflash_text) - sockets:tryget_socket_unconn_nouse (noflash_text) sockets:tryget_socket_unconn_locked (noflash_text) sockets:done_socket (noflash_text) sockets:lwip_recvfrom (noflash_text) sockets:lwip_recv_tcp (noflash_text) - sockets:lwip_recv_tcp_from (noflash_text) - sockets:lwip_recvfrom_udp_raw (noflash_text) sockets:lwip_send (noflash_text) sockets:lwip_sendto (noflash_text) sockets:event_callback (noflash_text) sockets:lwip_select (noflash_text) - sockets:select_check_waiters (noflash_text) - api_lib:netconn_apimsg (noflash_text) api_lib:netconn_recv_data (noflash_text) - api_lib:netconn_tcp_recvd_msg (noflash_text) api_lib:netconn_tcp_recvd (noflash_text) api_lib:netconn_recv_data_tcp (noflash_text) api_lib:netconn_recv_tcp_pbuf_flags (noflash_text) @@ -35,7 +26,6 @@ entries: netbuf:netbuf_alloc (noflash_text) netbuf:netbuf_free (noflash_text) tcpip:tcpip_thread (noflash_text) - tcpip:tcpip_thread_handle_msg (noflash_text) tcpip:tcpip_inpkt (noflash_text) tcpip:tcpip_input (noflash_text) tcpip:tcpip_callback (noflash_text) @@ -56,10 +46,8 @@ entries: ip4:ip4_output_if_opt_src (noflash_text) ip4:ip4_output (noflash_text) pbuf:pbuf_alloc (noflash_text) - pbuf:pbuf_add_header_impl (noflash_text) pbuf:pbuf_add_header (noflash_text) pbuf:pbuf_remove_header (noflash_text) - pbuf:pbuf_header_impl (noflash_text) pbuf:pbuf_header (noflash_text) pbuf:pbuf_free (noflash_text) udp:udp_input_local_match (noflash_text) @@ -81,6 +69,19 @@ entries: ethernetif:ethernetif_input (noflash_text) wlanif:low_level_output (noflash_text) wlanif:wlanif_input (noflash_text) + if COMPILER_OPTIMIZATION_DEFAULT = y: + sockets:tryget_socket_unconn (noflash_text) + sockets:tryget_socket (noflash_text) + sockets:lwip_recvfrom_udp_raw (noflash_text) + sockets:tryget_socket_unconn_nouse (noflash_text) + sockets:sock_inc_used (noflash_text) + tcpip:tcpip_thread_handle_msg (noflash_text) + api_lib:netconn_apimsg (noflash_text) + sockets:lwip_recv_tcp_from (noflash_text) + sockets:select_check_waiters (noflash_text) + api_lib:netconn_tcp_recvd_msg (noflash_text) + pbuf:pbuf_header_impl (noflash_text) + pbuf:pbuf_add_header_impl (noflash_text) else: * (default) diff --git a/examples/wifi/iperf/main/cmd_wifi.c b/examples/wifi/iperf/main/cmd_wifi.c index e5f5369f1d..4f34cff7a1 100644 --- a/examples/wifi/iperf/main/cmd_wifi.c +++ b/examples/wifi/iperf/main/cmd_wifi.c @@ -181,6 +181,7 @@ static int wifi_cmd_sta(int argc, char** argv) } ESP_LOGI(TAG, "sta connecting to '%s'", sta_args.ssid->sval[0]); + ESP_ERROR_CHECK(esp_wifi_set_ps(WIFI_PS_NONE)); wifi_cmd_sta_join(sta_args.ssid->sval[0], sta_args.password->sval[0]); return 0; } diff --git a/examples/wifi/iperf/sdkconfig.defaults b/examples/wifi/iperf/sdkconfig.defaults index 147d1b6fc4..a071ea8b12 100644 --- a/examples/wifi/iperf/sdkconfig.defaults +++ b/examples/wifi/iperf/sdkconfig.defaults @@ -12,3 +12,6 @@ CONFIG_ESP_TASK_WDT=n CONFIG_LWIP_ETHARP_TRUST_IP_MAC=n CONFIG_LWIP_IRAM_OPTIMIZATION=y + +CONFIG_LWIP_TCPIP_TASK_PRIO=23 +CONFIG_COMPILER_OPTIMIZATION_PERF=y