GNU/Linux >> Tutoriels Linux >  >> Linux

Comment trouver la taille du tampon de socket de Linux

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

  • /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 de taille de mémoire minimale, par défaut et maximale (en octets).


Alors que, comme cela a été souligné, il est possible de voir la valeur par défaut actuelle tailles de tampon de socket en /proc , il est également possible de les vérifier en utilisant sysctl (Remarque :bien que le nom inclut 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 lorsque la chaussette est initialisée, mais le noyau les dimensionne alors dynamiquement (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 en utilisant le ss commande (partie du iproute /iproute2 package), qui peut également fournir un tas d'informations supplémentaires sur les sockets comme le paramètre de contrôle de congestion, etc. Pour lister le TCP actuellement ouvert (t option) sockets et mémoire associée (m ) informations :

ss -tm

Voici quelques exemples de sortie :

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 consulter les sources du noyau (c'est-à-dire 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

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

Linux
  1. Comment savoir si le disque est un SSD ou un disque dur sous Linux

  2. Comment utiliser la commande Linux find pour rechercher des fichiers

  3. Comment changer la taille du MTU sous Linux

  4. Comment puis-je trouver la taille de pile maximale ?

  5. Comment diriger les résultats de 'find' vers mv sous Linux

Comment trouver le numéro de port d'un service sous Linux

Comment trouver la taille d'un répertoire sous Linux

Comment trouver une adresse IP sous Linux

Comment trouver la taille totale d'un répertoire sous Linux

Comment rechercher des fichiers avec la commande fd sous Linux

Comment trouver la liste des référentiels installés sous Linux