Quelle est la taille de tampon de socket par défaut de Linux? Y at-il une commande pour le voir?
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).
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
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