system
(system)
August 10, 2015, 3:09am
1
lciummo wrote on Monday, August 10, 2015 :
I’m trying to chase down an out of heap memory problem when a TCP socket is created. heap2 malloc fails requesting 5872 bytes. This looks like it’s based on creating stream buffers via…
#ifndef ipconfigTCP_RX_BUF_LEN
#define ipconfigTCP_RX_BUF_LEN ( 4 * ipconfigTCP_MSS ) /* defaults to 5840 bytes */
#endif
/* Define the size of Tx stream buffer for TCP sockets */
#ifndef ipconfigTCP_TX_BUF_LEN
define ipconfigTCP_TX_BUF_LEN ( 4 * ipconfigTCP_MSS ) /* defaults to 5840 bytes */
This seems ot add up to >10K per tcp socket. Can I reduce TCP_MSS to something smaller? Can it be less than an ethernet Mtu?
Thanks
Larry
htibosch
(Hein Tibosch)
August 10, 2015, 3:50am
2
heinbali01 wrote on Monday, August 10, 2015 :
Hi Larry,
About posting: you can include literal code if you put it between two lines which only contain 5 tildas `````, as here:
int function( void )
{
/* This is a comment */
return 0;
}
I’m glad you traced down the problem.
This seems ot add up to >10K per tcp socket. Can I reduce
TCP_MSS to something smaller? Can it be less than an ethernet Mtu?
This is a TCP packet:
1) Ethernet header = 14 bytes
2) IP-header = 20 bytes
3) TCP-header = 20 bytes
4) TCP contents/payload <= MSS
MTU (Maximum Transmission Unit) equals MSS + 40.
The ‘Ethernet header’ of 14 bytes is not included in the MTU.
I would recommend bringing down the MTU for testing, e.g.:
#define ipconfigNETWORK_MTU 800
The value of MSS will automatically adapt:
#define ipconfigTCP_MSS ( ipconfigNETWORK_MTU - ipSIZE_OF_IP_HEADER - ipSIZE_OF_TCP_HEADER )
which is 1000 - 40 = 960 bytes.
This post might also be interesting for you:
https://sourceforge.net/p/freertos/discussion/382005/thread/a9c8fc93/?limit=25#5a90
Regards,
Hein
rtel
(Richard Barry)
August 10, 2015, 3:36pm
3