LWIP學習筆記8——提高 LwIP 網絡傳輸的速度

提高 LwIP 網絡傳輸的速度

以太網發送和接收的緩衝區大小,默認是 4,可以稍微改大一點,

1 #define ETH_RXBUFNB ((uint32_t)8U) /* 接收緩衝區 */
2 #define ETH_TXBUFNB ((uint32_t)8U) /* 發送緩衝區 */

對 LwIP 管理的內存肯定要分配的大一些, 而對於發送數據是存儲在 ROM 或者靜態存儲區的時候,還要將 MEMP_NUM_PBUF 宏定義改的大一點, 當然發送緩衝區大小和發送緩衝區隊列長度決定了發送速度的大小,根據不同需求進行配置,並且需要不斷調試,而對於接收數據的配置,應該配置 TCP 緩衝隊列中的報文段數量與 TCP 接收窗口大小,特別是接收窗口的大小,這直接可以影響數據的接收速度。

//內存堆 heap 大小
2 #define MEM_SIZE (25*1024)
3
4 /* memp 結構的 pbuf 數量,如果應用從 ROM 或者靜態存儲區發送大量數據時
5 這個值應該設置大一點 */
6 #define MEMP_NUM_PBUF 25
7
8 /* 最多同時在 TCP 緩衝隊列中的報文段數量 */
9 #define MEMP_NUM_TCP_SEG 150
10
11 /* 內存池大小 */
12 #define PBUF_POOL_SIZE 65
13
14 /* 每個 pbuf 內存池大小 */
15 #define PBUF_POOL_BUFSIZE \
16
LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_ENCAPSULATION_HLEN+PBUF_LINK_HLEN)
17
18
19 /* 最大 TCP 報文段, TCP_MSS = (MTU - IP 報頭大小 - TCP 報頭大小 */
20 #define TCP_MSS (1500 - 40)
21
22 /* TCP 發送緩衝區大小(字節) */
23 #define TCP_SND_BUF (11*TCP_MSS)
24
25 /* TCP 發送緩衝區隊列的最大長度 */
26 #define TCP_SND_QUEUELEN (8* TCP_SND_BUF/TCP_MSS)
27
28 /* TCP 接收窗口大小 */
29 #define TCP_WND (11*TCP_MSS)

當然,除此之外,想要整個 LwIP 能高速平穩運行,只配置這些是不夠的,比如我們應該使用中斷的方式接收數據,這就省去了 CPU 查詢數據,而且,我們應該將內核郵箱的容量增大,這樣子在接收到數據之後,投遞給內核就不會因爲無法投遞而阻塞,同時內核線程的優先級應該設置得更高一點,這樣子就能及時去處理這些數據,當然,我們也可以獨立使用一個新的發送線程,這樣子內核就無需調用底層網卡函數,它可以專心處理數據,發送數據的事情就交由發送線程去處理,同時,在處理數據的時候,不用使用串口打印信息,因爲串口是一個很慢的外設,當然啦, 關於提高 LwIP 網絡傳輸的速度,還有很多東西要優化的,這也跟使用環境有關係,不能一概而論,只是給出一些方向,具體怎麼實現,還需要大家親身實踐去調試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章