web-dev-qa-db-fra.com

Taille maximale UDP du tampon de réception sous Linux

Quelle est la taille maximale du tampon de réception Linux UDP? Je pensais que c’était limité uniquement par la RAM disponible, mais quand j’ai mis

5 Go pour rmem_max:

echo 5000000000 > /proc/sys/net/core/rmem_max

et 4 Go pour le tampon de socket actuel (en Erlang):

gen_udp:listen(Port, [{recbuf, 4000000000}])

Lorsque je mesure l'utilisation de la mémoire tampon, cela indique:

# netstat -u6anp | grep 5050
udp6  1409995136      0 :::5050  :::*       13483/beam.smp

Je ne peux pas dépasser ce 1,4 Go. Pour des tailles de tampon plus petites, comme par ex. 500 Mo, la taille réelle de la mémoire tampon correspond à la valeur configurée. Mon système est Debian 6.0, la machine dispose de 50 Go RAM disponibles.

10

Il semble qu'il y ait une limite dans linux. J'ai essayé de définir rmem_max sur 2 ^ 32-1 avec succès.

   root@xxx:/proc/sys/net/core# echo 2147483647 > rmem_max
   root@xxx:/proc/sys/net/core# cat rmem_max
   2147483647

2 ^ 32 était trop:

   root@xxx:/proc/sys/net/core# echo 2147483648 > rmem_max
   root@xxx:/proc/sys/net/core# cat rmem_max
   -18446744071562067968

Réglage à 5000000000 rendements:

   root@xxx:/proc/sys/net/core# echo 5000000000 > rmem_max
   root@xxx:/proc/sys/net/core# cat rmem_max
   705032704

J'ai testé en python ce paramètre et obtenir socket tampon de réception avec

   ss.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, bufferSize)
   print ss.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF)

Si 'bufferSize' est inférieur à 1024 ^ 3, le programme imprime doublé 'bufferSize', sinon il retombe à 256.

La valeur 705032704 * 2 = 1410065408 est proche du 1409995136 obtenu par netstat.

9
Lech Głowiak

2 ^ 32-1 (2147483647, entier signé maximum de 32 bits)

root@root@localhost:~# sysctl -w net.core.rmem_max=2147483647
net.core.rmem_max = 2147483647

root@localhost:~# sysctl -w net.core.rmem_max=2147483648
sysctl: setting key "net.core.rmem_max": Invalid argument
net.core.rmem_max = 2147483648

Les échos dans le système de fichiers /proc semblent déborder lorsque vous tentez de définir des valeurs plus grandes.

0
Ivan Hamilton