Commande «ss» dans le package iproute; pourquoi interroger la table de dalle pour les sockets timewait?

15

Pardonnez-moi si ce n'est pas le meilleur forum pour cette question, mais cela semble plus pertinent pour le noyau que pour la programmation elle-même.

J'écris un script qui interroge le système pour les ports ouverts afin que nous puissions représenter graphiquement et surveiller les statistiques. Pour cela, j'utilise la commande "ss" du package iproute. Si vous exécutez, ss -s|grep estabvous recevrez une sortie similaire à ceci:

TCP:   296 (estab 6, closed 238, orphaned 0, synrecv 0, timewait 238/0), ports 0

Ma question concerne la variable timewait, qui montre les sockets calculées dans l'état TIME_WAIT. Lorsque j'ai essayé de comprendre quel numéro était référencé après la barre oblique, c'est devenu une aventure tourbillonnante de recherche de code source qui m'a finalement conduit à trouver l'extrait de code suivant:

printf("TCP:   %d (estab %d, closed %d, orphaned %d, synrecv %d, timewait %d/%d), ports %d\n",
       s.tcp_total + slabstat.tcp_syns + s.tcp_tws,
       sn.tcp_estab,
       s.tcp_total - (s.tcp4_hashed+s.tcp6_hashed-s.tcp_tws),
       s.tcp_orphans,
       slabstat.tcp_syns,
       s.tcp_tws, slabstat.tcp_tws,
       slabstat.tcp_ports
       );

Je dois admettre que ma recherche de ce que "slabstat" était censé signifier a finalement conduit à mon apprentissage des caches de dalle et de leur interface de rapport sur / proc / slabinfo.

La question: qu'est-ce que la table de tableaux a à voir avec les calculs de socket TIME_WAIT? Je n'arrive pas à comprendre pourquoi ce nombre est signalé, car chaque fois que j'exécute la commande sur tous les serveurs sur lesquels j'ai essayé, le nombre a toujours été zéro.

Peter Grace
la source
En toute honnêteté, vous obtiendriez probablement les meilleures réponses en publiant ceci sur l'une des listes de diffusion du noyau pertinentes, voir tux.org/lkml/#related-lists
jeremiahd
Le code montre simplement combien de sockets en attente sont allouées dans la dalle. OMI, cela aide simplement à déterminer l'utilisation de la mémoire
Ulrich Dangel

Réponses:

0

Il ressemble à tcp_tw_bucketsce qui est finalement interrogé, qui est une structure supprimée à partir de Linux 2.6.12

Ainsi, le dernier nombre serait probablement toujours 0, sauf s'il s'agit de noyaux de 7 ans.

En ce qui concerne l'interrogation de la dalle, pour autant que je sache, c'est ridiculement plus rapide que les autres méthodes disponibles.

Jodie C
la source
S'il se trouve sur un noyau avant 2.6.12, la valeur slabstat.tcp_tws sera- t-elle égale à s.tcp_tws ? Y a-t-il une différence entre ces deux valeurs? (l'un provient de / proc / net / sockstat et l'autre de / proc / slabinfo)
ruanhao