feat(wifi): optimize esp32c6 iperf performance

This commit is contained in:
Xu Xiao 2023-09-04 14:34:54 +08:00 committed by Jiang Jiang Jian
parent d6c52277b6
commit 8847eeec0c
17 changed files with 171 additions and 36 deletions

View File

@ -38,7 +38,7 @@ ieee80211_is_tx_allowed = 0x40000b8c;
ieee80211_output_pending_eb = 0x40000b90;
ieee80211_output_process = 0x40000b94;
ieee80211_set_tx_desc = 0x40000b98;
sta_input = 0x40000b9c;
//sta_input = 0x40000b9c;
wifi_get_macaddr = 0x40000ba0;
wifi_rf_phy_disable = 0x40000ba4;
wifi_rf_phy_enable = 0x40000ba8;

View File

@ -52,7 +52,6 @@
#else
#define ESP_TASKD_EVENT_STACK (CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE + TASK_EXTRA_STACK_SIZE)
#endif /* CONFIG_LWIP_TCPIP_CORE_LOCKING */
#define ESP_TASK_TCPIP_PRIO (ESP_TASK_PRIO_MAX - 7)
#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)

View File

@ -226,6 +226,15 @@ menu "Wi-Fi"
When this option is disabled, more than 10Kbytes of IRAM memory will be saved
but Wi-Fi throughput will be reduced.
config ESP_WIFI_EXTRA_IRAM_OPT
bool "WiFi EXTRA IRAM speed optimization"
default y if IDF_TARGET_ESP32C6
default n
help
Select this option to place additional frequently called Wi-Fi library functions
in IRAM. When this option is disabled, more than 5Kbytes of IRAM memory will be saved
but Wi-Fi throughput will be reduced.
config ESP_WIFI_RX_IRAM_OPT
bool "WiFi RX IRAM speed optimization"
default n if (BT_ENABLED && SPIRAM && IDF_TARGET_ESP32)

@ -1 +1 @@
Subproject commit 470a8ed16ecbc56c20ec0d8d9235445b45f3d385
Subproject commit 5d67eba0abbf6b7e8e59cf49f26c7973097914b1

View File

@ -18,6 +18,10 @@ entries:
entries:
.wifislprxiram+
[sections:wifi_extra_iram]
entries:
.wifiextrairam+
[scheme:wifi_iram]
entries:
wifi_iram -> iram0_text
@ -43,6 +47,10 @@ entries:
entries:
wifi_slp_rx_iram -> iram0_text
[scheme:wifi_extra_iram]
entries:
wifi_extra_iram -> iram0_text
[sections:wifi_log_error]
entries:
.rodata_wlog_error+
@ -70,6 +78,7 @@ entries:
wifi_slp_rx_iram -> flash_text
wifi_iram -> flash_text
wifi_rx_iram -> flash_text
wifi_extra_iram -> flash_text
if LOG_MAXIMUM_LEVEL <= 0:
wifi_log_error -> rodata_noload
else:
@ -117,6 +126,9 @@ entries:
if ESP_ALLOW_BSS_SEG_EXTERNAL_MEMORY = y:
* (extram_bss)
if ESP_WIFI_EXTRA_IRAM_OPT = y:
* (wifi_extra_iram)
[mapping:net80211]
archive: libnet80211.a
entries:
@ -135,9 +147,16 @@ entries:
if ESP_WIFI_RX_IRAM_OPT || ESP_WIFI_SLP_IRAM_OPT:
* (wifi_slp_rx_iram)
if ESP_WIFI_EXTRA_IRAM_OPT = y:
* (wifi_extra_iram)
[mapping:esp_wifi]
archive: libesp_wifi.a
entries:
if ESP_WIFI_IRAM_OPT = y:
esp_adapter:coex_pti_get_wrapper (noflash)
wifi_netif:wifi_sta_receive (noflash)
wifi_netif:wifi_transmit_wrap (noflash)
if ESP_WIFI_SLP_IRAM_OPT =y:
esp_adapter:wifi_clock_enable_wrapper (noflash)
esp_adapter:wifi_clock_disable_wrapper (noflash)

View File

@ -15,6 +15,14 @@ menu "LWIP"
could be used to convert network interface index to name
instead of IDF specific esp-netif APIs (such as esp_netif_get_netif_impl_name())
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_TCPIP_CORE_LOCKING
bool "Enable tcpip core locking"
default n
@ -26,6 +34,15 @@ menu "LWIP"
If disable tcpip core locking,TCP IP will perform tasks through context switching
config LWIP_TCPIP_CORE_LOCKING_INPUT
bool "Enable tcpip core locking input"
depends on LWIP_TCPIP_CORE_LOCKING
default n
help
when LWIP_TCPIP_CORE_LOCKING is enabled, this lets tcpip_input() grab the
mutex for input packets as well, instead of allocating a message and passing
it to tcpip_thread.
config LWIP_CHECK_THREAD_SAFETY
bool "Checks that lwip API runs in expected context"
default n
@ -70,6 +87,14 @@ menu "LWIP"
If this feature is disabled, all lwip functions will be put into FLASH.
config LWIP_EXTRA_IRAM_OPTIMIZATION
bool "Enable LWIP IRAM optimization for TCP part"
default n
help
If this feature is enabled, some tcp part functions relating to RX/TX in LWIP will be
put into IRAM, it can improve TCP throughput. On the other hand, it needs about 17KB
IRAM for these optimizations.
config LWIP_TIMERS_ONDEMAND
bool "Enable LWIP Timers on demand"
default y

View File

@ -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)
@ -55,14 +45,11 @@ 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)
pbuf:pbuf_alloced_custom (noflash_text)
pbuf:pbuf_init_alloced_pbuf (noflash_text)
udp:udp_input_local_match (noflash_text)
udp:udp_input (noflash_text)
udp:udp_send (noflash_text)
@ -79,6 +66,71 @@ entries:
sys_arch:sys_mbox_trypost (noflash_text)
sys_arch:sys_arch_mbox_fetch (noflash_text)
lwip_default_hooks:ip4_route_src_hook (noflash_text)
if COMPILER_OPTIMIZATION_DEBUG = 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)
pbuf:pbuf_init_alloced_pbuf (noflash_text)
if LWIP_EXTRA_IRAM_OPTIMIZATION = y:
api_msg:recv_udp (noflash_text)
inet_chksum:inet_chksum_pbuf (noflash_text)
inet_chksum:ip_chksum_pseudo (noflash_text)
inet_chksum:inet_chksum (noflash_text)
inet_chksum:lwip_standard_chksum (noflash_text)
pbuf:pbuf_copy (noflash_text)
pbuf:pbuf_copy_partial_pbuf (noflash_text)
pbuf:pbuf_clone (noflash_text)
tcp:tcp_fasttmr (noflash_text)
tcp:tcp_tmr (noflash_text)
tcp:tcp_update_rcv_ann_wnd (noflash_text)
tcp:tcp_recved (noflash_text)
tcp:tcp_slowtmr (noflash_text)
tcp:tcp_process_refused_data (noflash_text)
tcp:tcp_segs_free (noflash_text)
tcp:tcp_seg_free (noflash_text)
tcp:tcp_seg_copy (noflash_text)
tcp:tcp_recv_null (noflash_text)
tcp_in:tcp_input (noflash_text)
tcp_in:tcp_input_delayed_close (noflash_text)
tcp_in:tcp_oos_insert_segment (noflash_text)
tcp_in:tcp_receive (noflash_text)
tcp_in:tcp_parseopt (noflash_text)
tcp_out:tcp_route (noflash_text)
tcp_out:tcp_create_segment (noflash_text)
tcp_out:tcp_write (noflash_text)
tcp_out:tcp_split_unsent_seg (noflash_text)
tcp_out:tcp_rexmit_rto_prepare (noflash_text)
tcp_out:tcp_rexmit (noflash_text)
tcp_out:tcp_rexmit_fast (noflash_text)
tcp_out:tcp_output_control_segment (noflash_text)
tcp_out:tcp_rst (noflash_text)
tcp_out:tcp_send_empty_ack (noflash_text)
sys_arch:sys_arch_protect (noflash_text)
sys_arch:sys_arch_unprotect (noflash_text)
sys_arch:sys_thread_tcpip (noflash_text)
memp:memp_malloc (noflash_text)
mem:mem_malloc (noflash_text)
raw:raw_input (noflash_text)
if COMPILER_OPTIMIZATION_DEBUG = y:
tcp_in:tcp_free_acked_segments (noflash_text)
tcp_in:tcp_process (noflash_text)
tcp_out:tcp_output_segment (noflash_text)
tcp_out:tcp_output_fill_options (noflash_text)
tcp_out:tcp_output_alloc_header (noflash_text)
tcp_out:tcp_pbuf_prealloc (noflash_text)
tcp_out:tcp_write_checks (noflash_text)
raw:raw_input_local_match (noflash_text)
tcp_out:tcp_output_alloc_header_common (noflash_text)
memp:do_memp_malloc_pool (noflash_text)
if ESP_ALLOW_BSS_SEG_EXTERNAL_MEMORY = y:
* (extram_bss)

View File

@ -43,6 +43,11 @@ extern "C" {
*/
#ifdef CONFIG_LWIP_TCPIP_CORE_LOCKING
#define LWIP_TCPIP_CORE_LOCKING 1
#ifdef CONFIG_LWIP_TCPIP_CORE_LOCKING_INPUT
#define LWIP_TCPIP_CORE_LOCKING_INPUT 1
#else
#define LWIP_TCPIP_CORE_LOCKING_INPUT 0
#endif
#define LOCK_TCPIP_CORE() do { sys_mutex_lock(&lock_tcpip_core); sys_thread_tcpip(LWIP_CORE_LOCK_MARK_HOLDER); } while(0)
#define UNLOCK_TCPIP_CORE() do { sys_thread_tcpip(LWIP_CORE_LOCK_UNMARK_HOLDER); sys_mutex_unlock(&lock_tcpip_core); } while(0)
#ifdef CONFIG_LWIP_CHECK_THREAD_SAFETY
@ -51,6 +56,7 @@ extern "C" {
#else
#define LWIP_TCPIP_CORE_LOCKING 0
#define LWIP_TCPIP_CORE_LOCKING_INPUT 0
#ifdef CONFIG_LWIP_CHECK_THREAD_SAFETY
#define LWIP_ASSERT_CORE_LOCKED() do { LWIP_ASSERT("Required to run in TCPIP context!", sys_thread_tcpip(LWIP_CORE_LOCK_QUERY_HOLDER)); } while(0)
#endif /* CONFIG_LWIP_CHECK_THREAD_SAFETY */
@ -787,7 +793,7 @@ static inline uint32_t timeout_from_offered(uint32_t lease, uint32_t min)
* The priority value itself is platform-dependent, but is passed to
* sys_thread_new() when the thread is created.
*/
#define TCPIP_THREAD_PRIO ESP_TASK_TCPIP_PRIO
#define TCPIP_THREAD_PRIO CONFIG_LWIP_TCPIP_TASK_PRIO
/**
* TCPIP_MBOX_SIZE: The mailbox size for the tcpip thread messages

View File

@ -428,11 +428,11 @@ The :example_file:`wifi/iperf/sdkconfig.defaults` file for the iperf example con
.. important:: Suggest applying changes a few at a time and checking the performance each time with a particular application workload.
- If a lot of tasks are competing for CPU time on the system, consider that the lwIP task has configurable CPU affinity (:ref:`CONFIG_LWIP_TCPIP_TASK_AFFINITY`) and runs at fixed priority ``ESP_TASK_TCPIP_PRIO`` (18). Configure competing tasks to be pinned to a different core, or to run at a lower priority. See also :ref:`built-in-task-priorities`.
- If a lot of tasks are competing for CPU time on the system, consider that the lwIP task has configurable CPU affinity (:ref:`CONFIG_LWIP_TCPIP_TASK_AFFINITY`) and runs at fixed priority (18). Configure competing tasks to be pinned to a different core, or to run at a lower priority. See also :ref:`built-in-task-priorities`.
- If using ``select()`` function with socket arguments only, disabling :ref:`CONFIG_VFS_SUPPORT_SELECT` will make ``select()`` calls faster.
- If there is enough free IRAM, select :ref:`CONFIG_LWIP_IRAM_OPTIMIZATION` to improve TX/RX throughput
- If there is enough free IRAM, select :ref:`CONFIG_LWIP_IRAM_OPTIMIZATION` and :ref:`CONFIG_LWIP_EXTRA_IRAM_OPTIMIZATION` to improve TX/RX throughput
.. only:: SOC_WIFI_SUPPORTED

View File

@ -166,7 +166,7 @@ Common priorities are:
- :doc:`/api-reference/system/esp_timer` system task to manage timer events and execute callbacks has high priority (22, ``ESP_TASK_TIMER_PRIO``)
- FreeRTOS Timer Task to handle FreeRTOS timer callbacks is created when the scheduler initializes and has minimum task priority (1, :ref:`configurable <CONFIG_FREERTOS_TIMER_TASK_PRIORITY>`).
- :doc:`/api-reference/system/esp_event` system task to manage the default system event loop and execute callbacks has high priority (20, ``ESP_TASK_EVENT_PRIO``). This configuration is only used if the application calls :cpp:func:`esp_event_loop_create_default`. It is possible to call :cpp:func:`esp_event_loop_create` with a custom task configuration instead.
- :doc:`/api-guides/lwip` TCP/IP task has high priority (18, ``ESP_TASK_TCPIP_PRIO``).
- :doc:`/api-guides/lwip` TCP/IP task has high priority (18).
:SOC_WIFI_SUPPORTED: - :doc:`/api-guides/wifi` task has high priority (23).
:SOC_WIFI_SUPPORTED: - Wi-Fi wpa_supplicant component may create dedicated tasks while the Wi-Fi Protected Setup (WPS), WPA2 EAP-TLS, Device Provisioning Protocol (DPP) or BSS Transition Management (BTM) features are in use. These tasks all have low priority (2).
:SOC_BT_SUPPORTED: - :doc:`/api-reference/bluetooth/controller_vhci` task has high priority (23, ``ESP_TASK_BT_CONTROLLER_PRIO``). The Bluetooth Controller needs to respond to requests with low latency, so it should always be among the highest priority task in the system.
@ -183,7 +183,7 @@ Common priorities are:
- :doc:`/api-reference/system/esp_timer` system task to manage high precision timer events and execute callbacks has high priority (22, ``ESP_TASK_TIMER_PRIO``). This task is pinned to Core 0.
- FreeRTOS Timer Task to handle FreeRTOS timer callbacks is created when the scheduler initializes and has minimum task priority (1, :ref:`configurable <CONFIG_FREERTOS_TIMER_TASK_PRIORITY>`). This task is pinned to Core 0.
- :doc:`/api-reference/system/esp_event` system task to manage the default system event loop and execute callbacks has high priority (20, ``ESP_TASK_EVENT_PRIO``) and it is pinned to Core 0. This configuration is only used if the application calls :cpp:func:`esp_event_loop_create_default`, it is possible to call :cpp:func:`esp_event_loop_create` with a custom task configuration instead.
- :doc:`/api-guides/lwip` TCP/IP task has high priority (18, ``ESP_TASK_TCPIP_PRIO``) and is not pinned to any core (:ref:`configurable<CONFIG_LWIP_TCPIP_TASK_AFFINITY>`).
- :doc:`/api-guides/lwip` TCP/IP task has high priority (18) and is not pinned to any core (:ref:`configurable<CONFIG_LWIP_TCPIP_TASK_AFFINITY>`).
:SOC_WIFI_SUPPORTED: - :doc:`/api-guides/wifi` task has high priority (23) and is pinned to Core 0 by default (:ref:`configurable<CONFIG_ESP_WIFI_TASK_CORE_ID>`).
:SOC_WIFI_SUPPORTED: - Wi-Fi wpa_supplicant component may create dedicated tasks while the Wi-Fi Protected Setup (WPS), WPA2 EAP-TLS, Device Provisioning Protocol (DPP) or BSS Transition Management (BTM) features are in use. These tasks all have low priority (2) and are not pinned to any core.
:SOC_BT_SUPPORTED: - :doc:`/api-reference/bluetooth/controller_vhci` task has high priority (23, ``ESP_TASK_BT_CONTROLLER_PRIO``) and is pinned to Core 0 by default (:ref:`configurable <{IDF_TARGET_CONTROLLER_CORE_CONFIG}>`). The Bluetooth Controller needs to respond to requests with low latency, so it should always be among the highest priority task assigned to a single CPU.

View File

@ -165,7 +165,7 @@ ESP-IDF 启动的系统任务预设了固定优先级。启动时,一些任务
- 系统任务 :doc:`/api-reference/system/esp_timer` 用于管理定时器事件并执行回调函数,优先级较高 (22, ``ESP_TASK_TIMER_PRIO``)。
- FreeRTOS 初始化调度器时会创建定时器任务,用于处理 FreeRTOS 定时器的回调函数优先级最低1, :ref:`可配置 <CONFIG_FREERTOS_TIMER_TASK_PRIORITY>` )。
- 系统任务 :doc:`/api-reference/system/esp_event` 用于管理默认的系统事件循环并执行回调函数,优先级较高 (20, ``ESP_TASK_EVENT_PRIO``)。仅在应用程序调用 :cpp:func:`esp_event_loop_create_default` 时使用此配置。可以调用 :cpp:func:`esp_event_loop_create` 添加自定义任务配置。
- :doc:`/api-guides/lwip` TCP/IP 任务优先级较高 (18, ``ESP_TASK_TCPIP_PRIO``)。
- :doc:`/api-guides/lwip` TCP/IP 任务优先级较高 (18)。
:SOC_WIFI_SUPPORTED: - :doc:`/api-guides/wifi` 任务优先级较高 (23).
:SOC_WIFI_SUPPORTED: - 使用 Wi-Fi Protected Setup (WPS)、WPA2 EAP-TLS、Device Provisioning Protocol (DPP) 或 BSS Transition Management (BTM) 等功能时Wi-Fi wpa_supplicant 组件可能会创建优先级较低的专用任务 (2)。
:SOC_BT_SUPPORTED: - :doc:`/api-reference/bluetooth/controller_vhci` 任务优先级较高 (23, ``ESP_TASK_BT_CONTROLLER_PRIO``)。蓝牙控制器需要以低延迟响应请求,因此其任务应始终为系统最高优先级的任务之一。
@ -182,7 +182,7 @@ ESP-IDF 启动的系统任务预设了固定优先级。启动时,一些任务
- 系统任务 :doc:`/api-reference/system/esp_timer` 用于管理定时器事件并执行回调函数,优先级较高 (22, ``ESP_TASK_TIMER_PRIO``) 且固定在核心 0 上执行。
- FreeRTOS 初始化调度器时会创建定时器任务,用于处理 FreeRTOS 定时器的回调函数优先级最低1 :ref:`可配置 <CONFIG_FREERTOS_TIMER_TASK_PRIORITY>` )且固定在核心 0 上执行。
- 系统任务 :doc:`/api-reference/system/esp_event` 用于管理默认的系统事件循环并执行回调函数,优先级较高 (20, ``ESP_TASK_EVENT_PRIO``) 且固定在核心 0 上执行。此配置仅在应用程序调用 :cpp:func:`esp_event_loop_create_default` 时使用。可以调用 :cpp:func:`esp_event_loop_create` 添加自定义任务配置。
- :doc:`/api-guides/lwip` TCP/IP 任务优先级较高 (18, ``ESP_TASK_TCPIP_PRIO``) 且并未固定在特定核心上执行( :ref:`可配置 <CONFIG_LWIP_TCPIP_TASK_AFFINITY>` )。
- :doc:`/api-guides/lwip` TCP/IP 任务优先级较高 (18) 且并未固定在特定核心上执行( :ref:`可配置 <CONFIG_LWIP_TCPIP_TASK_AFFINITY>` )。
:SOC_WIFI_SUPPORTED: - :doc:`/api-guides/wifi` 任务优先级较高 (23) 且默认固定在核心 0 上执行( :ref:`可配置 <CONFIG_ESP_WIFI_TASK_CORE_ID>` )。
:SOC_WIFI_SUPPORTED: - 使用 Wi-Fi Protected Setup (WPS)、WPA2 EAP-TLS、Device Provisioning Protocol (DPP) 或 BSS Transition Management (BTM) 等功能时Wi-Fi wpa_supplicant 组件可能会创建优先级较低的专用任务 (2),这些任务并未固定在特定核心上执行。
:SOC_BT_SUPPORTED: - :doc:`/api-reference/bluetooth/controller_vhci` 任务优先级较高 (23, ``ESP_TASK_BT_CONTROLLER_PRIO``) 且默认固定在核心 0 上执行( :ref:`可配置 <{IDF_TARGET_CONTROLLER_CORE_CONFIG}>` )。蓝牙控制器需要以低延迟响应请求,因此其任务应始终为最高优先级的任务之一并分配给单个 CPU 执行。

View File

@ -14,5 +14,18 @@ menu "Iperf Configuration"
The value is used for iperf socket TCP tx timeout, iperf will be aborted
and socket will be closed and shutdown.
config IPERF_TRAFFIC_TASK_PRIORITY
int "iperf traffic task priority"
default 4
range 1 24
help
The value is used for iperf traffic task priority.
config IPERF_REPORT_TASK_PRIORITY
int "iperf result report task priority"
default 6
range 1 24
help
The value is used for iperf result report task priority.
endmenu

View File

@ -36,10 +36,10 @@ extern "C" {
#define IPERF_DEFAULT_NO_BW_LIMIT -1
#define IPERF_TRAFFIC_TASK_NAME "iperf_traffic"
#define IPERF_TRAFFIC_TASK_PRIORITY 4
#define IPERF_TRAFFIC_TASK_PRIORITY CONFIG_IPERF_TRAFFIC_TASK_PRIORITY
#define IPERF_TRAFFIC_TASK_STACK 4096
#define IPERF_REPORT_TASK_NAME "iperf_report"
#define IPERF_REPORT_TASK_PRIORITY 6
#define IPERF_REPORT_TASK_PRIORITY CONFIG_IPERF_REPORT_TASK_PRIORITY
#define IPERF_REPORT_TASK_STACK 4096
#define IPERF_UDP_TX_LEN (1470)

View File

@ -118,7 +118,7 @@ static esp_err_t iperf_start_report(void)
return ESP_OK;
}
static void socket_recv(int recv_socket, struct sockaddr_storage listen_addr, uint8_t type)
static void IRAM_ATTR socket_recv(int recv_socket, struct sockaddr_storage listen_addr, uint8_t type)
{
bool iperf_recv_start = true;
uint8_t *buffer;
@ -149,7 +149,7 @@ static void socket_recv(int recv_socket, struct sockaddr_storage listen_addr, ui
}
}
static void socket_send(int send_socket, struct sockaddr_storage dest_addr, uint8_t type, int bw_lim)
static void IRAM_ATTR socket_send(int send_socket, struct sockaddr_storage dest_addr, uint8_t type, int bw_lim)
{
uint8_t *buffer;
int32_t *pkt_id_p;
@ -222,7 +222,7 @@ static void socket_send(int send_socket, struct sockaddr_storage dest_addr, uint
}
}
static esp_err_t IRAM_ATTR iperf_run_tcp_server(void)
static esp_err_t iperf_run_tcp_server(void)
{
int listen_socket = -1;
int client_socket = -1;
@ -389,7 +389,7 @@ exit:
return ret;
}
static esp_err_t IRAM_ATTR iperf_run_udp_server(void)
static esp_err_t iperf_run_udp_server(void)
{
int listen_socket = -1;
int opt = 1;

View File

@ -243,6 +243,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], false);
return 0;
}
@ -276,6 +277,7 @@ static int wifi_cmd_sta_mcs89(int argc, char **argv)
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
ESP_ERROR_CHECK(esp_wifi_set_protocol(0, WIFI_PROTOCOL_11B | WIFI_PROTOCOL_11G | WIFI_PROTOCOL_11N | WIFI_PROTOCOL_11AX));
ESP_ERROR_CHECK(esp_wifi_set_bandwidth(0, WIFI_BW_HT20));
ESP_ERROR_CHECK(esp_wifi_set_ps(WIFI_PS_NONE));
ESP_LOGI(TAG, "sta connecting to '%s'", sta_args.ssid->sval[0]);
wifi_cmd_sta_join(sta_args.ssid->sval[0], sta_args.password->sval[0], true);

View File

@ -8,3 +8,10 @@ CONFIG_ESP_TASK_WDT_EN=n
CONFIG_LWIP_ETHARP_TRUST_IP_MAC=n
CONFIG_LWIP_IRAM_OPTIMIZATION=y
CONFIG_LWIP_TCPIP_TASK_PRIO=23
CONFIG_IPERF_TRAFFIC_TASK_PRIORITY=23
CONFIG_IPERF_REPORT_TASK_PRIORITY=24
CONFIG_LWIP_TCPIP_CORE_LOCKING=y
CONFIG_LWIP_TCPIP_CORE_LOCKING_INPUT=y
CONFIG_COMPILER_OPTIMIZATION_PERF=y

View File

@ -1,17 +1,17 @@
#
# ESP32C6-Specific
#
CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=20
CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=38
CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER_NUM=35
CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=40
CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=60
CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER_NUM=40
CONFIG_ESP_WIFI_AMPDU_TX_ENABLED=y
CONFIG_ESP_WIFI_TX_BA_WIN=20
CONFIG_ESP_WIFI_TX_BA_WIN=32
CONFIG_ESP_WIFI_AMPDU_RX_ENABLED=y
CONFIG_ESP_WIFI_RX_BA_WIN=20
CONFIG_ESP_WIFI_RX_BA_WIN=32
CONFIG_ESP_WIFI_NVS_ENABLED=n
CONFIG_LWIP_TCP_SND_BUF_DEFAULT=30000
CONFIG_LWIP_TCP_WND_DEFAULT=34000
CONFIG_LWIP_TCP_SND_BUF_DEFAULT=51200
CONFIG_LWIP_TCP_WND_DEFAULT=65535
CONFIG_LWIP_TCP_RECVMBOX_SIZE=64
CONFIG_LWIP_UDP_RECVMBOX_SIZE=64
CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=64
@ -20,3 +20,6 @@ CONFIG_LWIP_IP_REASS_MAX_PBUFS=15
CONFIG_ESP_WIFI_ENABLE_WIFI_RX_STATS=n
CONFIG_ESP_WIFI_ENABLE_WIFI_TX_STATS=n
CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
CONFIG_ESPTOOLPY_FLASHFREQ_80M=y
CONFIG_LWIP_EXTRA_IRAM_OPTIMIZATION=y