Commande "ss" dans le package iproute; pourquoi requestr table de dalle pour les sockets timewait?

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

J'écris un script qui interroge le système pour les ports ouverts afin que nous puissions graver et surveiller les statistics. Pour cela, j'utilise la command "ss" du packageage iproute. Si vous exécutez ss -s|grep estab vous recevrez un résultat similaire à ceci:

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

Ma question a à voir avec la variable timewait, qui montre les sockets calculées dans l'état TIME_WAIT. Quand j'ai essayé de comprendre quel numéro a été référencé après la barre oblique, c'est devenu une aventure tourbillonnante de chercher le code source qui m'a finalement amené à find 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 search de ce que «slabstat» était censé signifier a finalement conduit à mon apprentissage sur les caches slab et leur interface de reporting à / proc / slabinfo.

La question: Qu'est-ce que le slabtable a à voir avec les calculs de socket TIME_WAIT? Je n'arrive pas à comprendre pourquoi ce numéro est signalé, car chaque fois que j'ai exécuté la command sur tous les servers sur lesquels j'ai essayé, le numéro a toujours été zéro.

Il semble que tcp_tw_buckets soit ce qui est finalement interrogé, qui est une structure supprimée à partir de Linux 2.6.12

Donc, le dernier nombre serait probablement toujours à 0 sauf s'il s'agit de grains de 7 ans.

En ce qui concerne l'interrogation de la dalle, autant que je peux dire, c'est ridiculement plus rapide que les autres methods disponibles.