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 tracer et surveiller les statistiques. Pour cela, j'utilise la commande "ss" du package iproute. Si vous exécutez ss -s|grep estab
vous recevrez une sortie semblable à celle-ci :
TCP: 296 (estab 6, closed 238, orphaned 0, synrecv 0, timewait 238/0), ports 0
Ma question concerne la variable timewait, qui affiche les sockets calculés dans l'état TIME_WAIT. Lorsque j'ai essayé de déterminer quel numéro était référencé après la barre oblique, la recherche du code source s'est transformée en une aventure fulgurante qui m'a finalement conduit à trouver l'extrait 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 m'a finalement conduit à découvrir les caches de dalles et leur interface de création de rapports sur /proc/slabinfo.
La question :Qu'est-ce que la slabtable 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 je l'ai essayée, le nombre a toujours été zéro.
Réponse acceptée :
Cela ressemble à tcp_tw_buckets
est ce 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 vieux de 7 ans.
Quant à l'interrogation de slab, pour autant que je sache, c'est ridiculement plus rapide que les autres méthodes disponibles.