Search code examples
linuxmemory-managementtcp

How much memory is consumed by the Linux kernel per TCP/IP network connection?


How much memory on average is consumed by the Linux kernel (in kernel address space) per TCP/IP network connection?


Solution

  • For a TCP connection memory consumed depends on

    1. size of sk_buff (internal networking structure used by linux kernel)

    2. the read and write buffer for a connection

    the size of buffers can be tweaked as required

    root@x:~# sysctl -A | grep net | grep mem
    

    check for these variables

    these specify the maximum default memory buffer usage for all network connections in kernel

    net.core.wmem_max = 131071
    
    net.core.rmem_max = 131071
    
    net.core.wmem_default = 126976
    
    net.core.rmem_default = 126976
    

    these specify buffer memory usage specific to tcp connections

    net.ipv4.tcp_mem = 378528   504704  757056
    
    net.ipv4.tcp_wmem = 4096    16384   4194304
    
    net.ipv4.tcp_rmem = 4096    87380   4194304
    

    the three values specified are " min default max" buffer sizes. So to start with linux will use the default values of read and write buffer for each connection. As the number of connection increases , these buffers will be reduced [at most till the specified min value] Same is the case for max buffer value.

    These values can be set using this sysctl -w KEY=KEY VALUE

    eg. The below command ensures the read and write buffers for each connection are 4096 each.

    sysctl -w net.ipv4.tcp_rmem='4096 4096 4096'
    
    sysctl -w net.ipv4.tcp_wmem='4096 4096 4096'