"Ss" perintah dalam paket iproute; mengapa permintaan tabel slab untuk soket timewait?

15

Maafkan saya jika ini bukan forum terbaik untuk pertanyaan ini, tetapi tampaknya lebih relevan untuk kernel daripada pemrograman itu sendiri.

Saya sedang menulis skrip yang menanyakan sistem untuk port terbuka sehingga kami dapat membuat grafik dan memantau statistik. Untuk ini, saya menggunakan perintah "ss" dari paket iproute. Jika Anda mengeksekusi ss -s|grep estabAnda akan menerima output yang mirip dengan ini:

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

Pertanyaan saya berkaitan dengan variabel timewait, yang menunjukkan soket yang dihitung dalam keadaan TIME_WAIT. Ketika saya mencoba mencari tahu nomor apa yang dirujuk setelah slash, itu menjadi petualangan angin puyuh untuk mencari kode sumber yang akhirnya membuat saya menemukan potongan berikut:

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
       );

Harus saya akui, pencarian saya akan arti "slabstat" pada akhirnya mengarah pada pembelajaran saya tentang cache slab dan antarmuka pelaporannya di / proc / slabinfo.

Pertanyaannya: Apa hubungan slabtable dengan perhitungan soket TIME_WAIT? Saya gagal mengetahui mengapa nomor ini dilaporkan, karena setiap kali saya menjalankan perintah di setiap server yang saya coba, jumlahnya selalu nol.

Peter Grace
sumber
Dalam semua kejujuran, Anda mungkin akan mendapatkan jawaban terbaik dengan memposting ini ke salah satu mailing list kernel yang relevan, lihat tux.org/lkml/#related-lists
jeremiahd
Kode hanya menunjukkan berapa banyak soket yang menunggu dialokasikan di slab. IMO itu hanya membantu menentukan penggunaan memori
Ulrich Dangel

Jawaban:

0

Sepertinya tcp_tw_bucketsinilah yang akhirnya disurvei, yang merupakan struct dihapus dari Linux 2.6.12

Jadi angka terakhir mungkin selalu 0 kecuali pada kernel 7 tahun.

Adapun query slab, sejauh yang saya tahu itu sangat cepat lebih cepat daripada metode lain yang tersedia.

Jodie C
sumber
Jika ada di kernel sebelum 2.6.12, akankah nilai slabstat.tcp_tws sama dengan s.tcp_tws ? Apakah ada perbedaan antara kedua nilai ini? (satu dari / proc / net / sockstat dan satu dari / proc / slabinfo)
ruanhao