É mais como uma questão de ciência da computação. Especialmente se você quiser se aprofundar nas tabelas de hash e big-O notações.
A resposta é:
Se você está lidando com muitas sessões TCP no servidor, você realmente quer procurar os parâmetros tcp da conexão em tempo O (1) ao invés de O (n). O FreeBSD usa encadeamento para resolver colisões de tabelas de hash. Portanto, se houver muita conexão, haverá muitas colisões e, assim, em vez da consulta de tabela de hash O (1), você precisará fazer uma pesquisa de cadeia linear com complexidade O (n).
Parâmetro que você mencionou - tcbhashsize
é basicamente o número de depósitos na tabela de hash.
Em nossos servidores, ele está configurado para valores muito altos, como 16384
e ainda maiores. Com essa configuração, estamos lidando com cerca de 60.000 conexões por servidor.
Cada entrada na tabela hash atualmente em x86_64 usa 252 bytes ( tcp_inpcb
) + 688 bytes ( tcpcb
) da memória do kernel para cada entrada (o tamanho de kmem é 512G em amd64 desde 7.2+ IIRC). Pode ser visto via vmstat -z
.
Sobre a estrutura do bloco de controle TCP você pode ler fontes do FreeBSD: tcp_var.h ou leia TCP / IP ilustrado, volume 2: A implementação por Gary R. Wright, W. Richard Stevens