Skip to content

Commit

Permalink
ipvs: increase ip_vs_conn_tab_bits range for 64BIT
Browse files Browse the repository at this point in the history
Current range [8, 20] is set purely due to historical reasons
because at the time, ~1M (2^20) was considered sufficient.
With this change, 27 is the upper limit for 64-bit, 20 otherwise.

Previous change regarding this limit is here.

Link: https://lore.kernel.org/all/86eabeb9dd62aebf1e2533926fdd13fed48bab1f.1631289960.git.aclaudi@redhat.com/T/#u

Signed-off-by: Abhijeet Rastogi <abhijeet.1989@gmail.com>
Acked-by: Julian Anastasov <ja@ssi.bg>
Acked-by: Simon Horman <horms@kernel.org>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
  • Loading branch information
Abhijeet Rastogi authored and Pablo Neira Ayuso committed Jun 1, 2023
1 parent 4ff3dfc commit 04292c6
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 15 deletions.
27 changes: 14 additions & 13 deletions net/netfilter/ipvs/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ config IP_VS_DEBUG

config IP_VS_TAB_BITS
int "IPVS connection table size (the Nth power of 2)"
range 8 20
range 8 20 if !64BIT
range 8 27 if 64BIT
default 12
help
The IPVS connection hash table uses the chaining scheme to handle
Expand All @@ -54,24 +55,24 @@ config IP_VS_TAB_BITS

Note the table size must be power of 2. The table size will be the
value of 2 to the your input number power. The number to choose is
from 8 to 20, the default number is 12, which means the table size
is 4096. Don't input the number too small, otherwise you will lose
performance on it. You can adapt the table size yourself, according
to your virtual server application. It is good to set the table size
not far less than the number of connections per second multiplying
average lasting time of connection in the table. For example, your
virtual server gets 200 connections per second, the connection lasts
for 200 seconds in average in the connection table, the table size
should be not far less than 200x200, it is good to set the table
size 32768 (2**15).
from 8 to 27 for 64BIT(20 otherwise), the default number is 12,
which means the table size is 4096. Don't input the number too
small, otherwise you will lose performance on it. You can adapt the
table size yourself, according to your virtual server application.
It is good to set the table size not far less than the number of
connections per second multiplying average lasting time of
connection in the table. For example, your virtual server gets 200
connections per second, the connection lasts for 200 seconds in
average in the connection table, the table size should be not far
less than 200x200, it is good to set the table size 32768 (2**15).

Another note that each connection occupies 128 bytes effectively and
each hash entry uses 8 bytes, so you can estimate how much memory is
needed for your box.

You can overwrite this number setting conn_tab_bits module parameter
or by appending ip_vs.conn_tab_bits=? to the kernel command line
if IP VS was compiled built-in.
or by appending ip_vs.conn_tab_bits=? to the kernel command line if
IP VS was compiled built-in.

comment "IPVS transport protocol load balancing support"

Expand Down
4 changes: 2 additions & 2 deletions net/netfilter/ipvs/ip_vs_conn.c
Original file line number Diff line number Diff line change
Expand Up @@ -1485,8 +1485,8 @@ int __init ip_vs_conn_init(void)
int idx;

/* Compute size and mask */
if (ip_vs_conn_tab_bits < 8 || ip_vs_conn_tab_bits > 20) {
pr_info("conn_tab_bits not in [8, 20]. Using default value\n");
if (ip_vs_conn_tab_bits < 8 || ip_vs_conn_tab_bits > 27) {
pr_info("conn_tab_bits not in [8, 27]. Using default value\n");
ip_vs_conn_tab_bits = CONFIG_IP_VS_TAB_BITS;
}
ip_vs_conn_tab_size = 1 << ip_vs_conn_tab_bits;
Expand Down

0 comments on commit 04292c6

Please sign in to comment.