Page 1 of 1

Wifi memory use

Posted: Sun Feb 16, 2020 12:13 pm
by PeterR
I am struggling to understand/predict Wifi memory requirements.

Wifi has static and dynamic memory buffers. Static buffers are 1600 bytes, dynamic buffers are sized according to need.
menuconfig allows you to select the type of TX buffer that will be used.
Static is recommended if PSRAM available. I assume then that the dynamic options will not fail if there is insufficient memory but just drop the frame? Not sure how helpful that is if the application has other dynamic memory needs.

Even with TX static selected my boot up code shows:

Code: Select all

I (4793) wifi: Init dynamic tx buffer num: 32


Q) How do I prevent dynamic TX buffers (I have selected static option_
Q) Will dynamic TX buffers be allocated in PSRAM?
Q) Can either static or dynamic RX buffers be allocated in PSRAM?
Q) Why should the dynamic RX buffer limit be at least the static RX limit?

Re: Wifi memory use

Posted: Fri Feb 21, 2020 5:07 am
by liuzhifu
Q) How do I prevent dynamic TX buffers (I have selected static option_

If PSRAM is not supported, we'd better configure the buffer type to dynamic TX buffer to save memory because the memory is very limited.

Q) Will dynamic TX buffers be allocated in PSRAM?
No, it won't.

Q) Can either static or dynamic RX buffers be allocated in PSRAM?
WiFi Static TX/RX Buffer can be considered as WiFi DMA TX/RX buffer, it can only be allocated from internal memory because it's used by WiFi hardware for packet transmitting and receiving.

Q) Why should the dynamic RX buffer limit be at least the static RX limit?

When WiFi hardware receives a packet from air, it puts the packet into WiFi Static RX Buffer and notifies the WiFi software to receive the packet. In WiFi software, it allocates a WiFi Dynamic RX Buffer and copies the packet from WiFi Static RX Buffer to WiFi Dynamic RX Buffer, then returns the WiFi Static RX Buffer for hardware to receive new packet. Then WiFi software processes the WiFi packet and delivers it to LWIP. After LWIP processes the packet, it returns it to WiFi driver to receive new packets. Notified that the WiFi static RX buffer is delivered to LWIP by reference, it means the WiFi Dynamic RX Buffer can be reused until both WiFi Driver and LWIP completely processing it. Generally speaking, the speed of WiFi/LWIP processing is slower than the speed of hardware receiving, so we need to set WiFi Dynamic RX buffer a bigger value than WiFi Static RX Buffer to receive more burst packets.

Moreover, when PSRAM is supported, the WiFi Dynamic RX Buffer is allocated from PSRAM, PSRAM has bigger space than internal memory, we should set a bigger enough value for WiFi Dynamic RX Buffer.

Re: Wifi memory use

Posted: Sat Feb 22, 2020 12:53 am
by PeterR
Cool, thanks. That really helped.
Ok, yes, I now see in menuconfig that TX is always DRAM. That makes sense if static is realy about DMA.
I understand now, a DMA 'pbuf' cache with a (PSRAM or DRAM) backing store.
One confirming question is - if we don't have PSRAM then why bother with dynamic buffers option? Is this just a help text 'issue' ?
So dynamic RX buffers will be PSRAM, great. I will have to profile the CPU/cache hit I suppose.
Thanks.