Di hampir setiap dokumen penyetelan jaringan FreeBSD saya dapat menemukan:
# /boot/loader.conf
net.inet.tcp.tcbhashsize=4096
Ini biasanya dipasangkan dengan beberapa pernyataan tidak membantu seperti "penyetelan tabel hash blok kontrol-TCP" atau "Setel ini ke nilai yang masuk akal." man 4 tcp
juga tidak banyak membantu:
tcbhashsize Size of the TCP control-block hash table (read-only). This may be tuned using the kernel option TCBHASHSIZE or by setting net.inet.tcp.tcbhashsize in the loader(8).
Satu-satunya dokumen yang dapat saya temukan yang menyentuh pada hal yang misterius ini adalah sub-bagian Pencarian Blok Kontrol Protokol di bawah Transport Layer dalam Mengoptimalkan IP FreeBSD dan TCP Stack , tetapi uraiannya lebih tentang potensi kemacetan dalam menggunakannya. Tampaknya terkait dengan mencocokkan segmen TCP baru dengan soket pendengaran mereka, tapi saya tidak yakin bagaimana caranya.
Untuk apa sebenarnya Blok Kontrol TCP digunakan? Mengapa Anda ingin mengatur ukuran hash ke 4096 atau nomor tertentu lainnya?
sumber
inpcb
.Jawaban:
Ini lebih seperti pertanyaan ilmu komputer. Terutama jika Anda ingin menggali tabel hash dan notasi O besar .
Jawabannya adalah:
Jika Anda menangani banyak sesi TCP pada sever Anda benar-benar ingin mencari parameter tcp koneksi dalam waktu O (1) alih-alih O (n). FreeBSD menggunakan rantai untuk menyelesaikan tabrakan tabel hash. Jadi jika ada banyak koneksi akan ada banyak tabrakan dan jadi alih-alih O (1) pencarian tabel hash Anda harus melakukan pencarian rantai linier dengan O (n) kompleksitas.
Parameter yang Anda sebutkan -
tcbhashsize
pada dasarnya adalah jumlah ember di tabel hash.Di server kami diatur ke nilai yang cukup tinggi seperti
16384
dan bahkan lebih tinggi. Dengan pengaturan itu kami menangani sekitar 60.000 koneksi per server.Setiap entri dalam tabel hash dengan sendirinya saat ini di x86_64 menggunakan 252 byte (
tcp_inpcb
) + 688 byte (tcpcb
) memori kernel untuk setiap entri (ukuran kmem adalah 512G di amd64 sejak 7.2+ IIRC). Itu dapat dilihat melaluivmstat -z
.Tentang struktur blok Kontrol TCP Anda dapat membaca sumber FreeBSD: tcp_var.h atau membaca TCP / IP Illustrated, Volume 2: Implementasi Oleh Gary R. Wright, W. Richard Stevens
sumber