web-dev-qa-db-fra.com

Comment trouver la taille du tampon de socket de Linux

Quelle est la taille de tampon de socket par défaut de Linux? Y at-il une commande pour le voir?

53
Freewind

Si vous voulez voir votre taille de tampon dans le terminal, vous pouvez jeter un oeil à:

  • /proc/sys/net/ipv4/tcp_rmem (pour lecture)
  • /proc/sys/net/ipv4/tcp_wmem (pour écrire)

Ils contiennent trois nombres, qui sont respectivement les valeurs minimale, par défaut et maximale de la taille de la mémoire (en octets).

99
saeedn

Pour obtenir la taille de la mémoire tampon dans le programme c/c ++, voici le flux

int n;
unsigned int m = sizeof(n);
int fdsocket;
fdsocket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); // example
getsockopt(fdsocket,SOL_SOCKET,SO_RCVBUF,(void *)&n, &m);
// now the variable n will have the socket size
28
Dinesh P.R.

Comme il a été souligné, il est possible de voir les tailles actuelles par défaut du tampon de socket dans /proc, il est également possible de les vérifier avec sysctl (Note: Bien que le nom inclue ipv4, ces tailles s’appliquent également aux sockets ipv6 - le code ipv6 tcp_v6_init_sock () appelle simplement la fonction ipv4 tcp_init_sock ()):

 sysctl net.ipv4.tcp_rmem
 sysctl net.ipv4.tcp_wmem

Cependant, les tampons de socket par défaut ne sont définis que lors de l'initialisation de la chaussette, mais le noyau les redimensionne de manière dynamique (sauf s'ils sont définis à l'aide de setsockopt () avec SO_SNDBUF). La taille réelle des tampons pour les sockets actuellement ouverts peut être inspectée à l'aide de la commande ss (partie du paquet iproute,), qui peut également fournir beaucoup plus d'informations sur les sockets comme le paramètre de contrôle de congestion, etc. . Par exemple Pour répertorier les sockets TCP (t option) actuellement ouverts et la mémoire associée (m)]:

ss -tm

Voici quelques exemples de résultats:

State       Recv-Q Send-Q        Local Address:Port        Peer Address:Port
ESTAB       0      0             192.168.56.102:ssh        192.168.56.1:56328
skmem:(r0,rb369280,t0,tb87040,f0,w0,o0,bl0,d0)

Voici une brève explication de skmem (mémoire de socket) - pour plus d’informations, vous devrez vous pencher sur les sources du noyau (par exemple, sock.h ):

r:sk_rmem_alloc
rb:sk_rcvbuf          # current receive buffer size
t:sk_wmem_alloc
tb:sk_sndbuf          # current transmit buffer size
f:sk_forward_alloc
w:sk_wmem_queued      # persistent transmit queue size
o:sk_omem_alloc
bl:sk_backlog
d:sk_drops
1
Pierz