Практически в каждом документе по настройке сети FreeBSD я могу найти:
# /boot/loader.conf
net.inet.tcp.tcbhashsize=4096
Обычно это сопряжено с некоторыми бесполезными инструкциями, такими как «Настройка хеш-таблицы блока управления TCP» или «Установите разумное значение». man 4 tcp
тоже не сильно поможет:
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).
Единственный документ, который я могу найти, который затрагивает эту загадочную вещь, - это подраздел «Поиск блока управления протоколом» под транспортным уровнем в Оптимизации стека FreeBSD IP и TCP , но его описание больше касается потенциальных узких мест в его использовании. Кажется, это связано с сопоставлением новых сегментов TCP с их сокетами прослушивания, но я не уверен, как.
Для чего именно используется блок управления TCP? Почему вы хотите установить размер хеша равным 4096 или какому-то другому числу?
источник
inpcb
только через .Ответы:
Это больше похоже на вопрос информатики. Особенно, если вы хотите копаться в хеш-таблицах и нотациях Big-O .
Ответ таков:
если вы обрабатываете много сеансов TCP на сервере sever, вы действительно хотите искать tcp-параметры соединения за O (1) время вместо O (n). FreeBSD использует цепочку для разрешения коллизий хеш-таблиц. Так что, если есть много соединений, будет много коллизий, и поэтому вместо поиска в хеш-таблице O (1) вам нужно будет выполнить поиск по линейной цепочке со сложностью O (n).
Указанный вами параметр -
tcbhashsize
это, по сути, количество сегментов в хеш-таблице.На наших серверах установлены высокие значения, такие как
16384
и даже выше. С этой настройкой мы обрабатываем около 60 000 подключений на сервер.Каждая запись в хэш-таблице сама по себе в настоящее время в x86_64 использует 252 байта (
tcp_inpcb
) + 688 байтов (tcpcb
) памяти ядра для каждой записи (размер kmem составляет 512 ГБ в amd64, начиная с 7.2+ IIRC). Это можно посмотреть черезvmstat -z
.О структуре блока TCP Control вы можете прочитать в источниках FreeBSD: tcp_var.h или прочитать TCP / IP Illustrated, Том 2: Реализация Гари Р. Райт, В. Ричард Стивенс
источник