ipvs: increase ip_vs_conn_tab_bits range for 64BIT

commit 04292c695f upstream.

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>
Cc: Allen Pais <apais@linux.microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Abhijeet Rastogi
2023-05-16 20:08:49 -07:00
committed by Greg Kroah-Hartman
parent 759e582b1c
commit 8fcb478b55
2 changed files with 16 additions and 15 deletions

View File

@@ -44,7 +44,8 @@ config IP_VS_DEBUG
config IP_VS_TAB_BITS config IP_VS_TAB_BITS
int "IPVS connection table size (the Nth power of 2)" 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 default 12
help help
The IPVS connection hash table uses the chaining scheme to handle The IPVS connection hash table uses the chaining scheme to handle
@@ -54,24 +55,24 @@ config IP_VS_TAB_BITS
Note the table size must be power of 2. The table size will be the 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 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 from 8 to 27 for 64BIT(20 otherwise), the default number is 12,
is 4096. Don't input the number too small, otherwise you will lose which means the table size is 4096. Don't input the number too
performance on it. You can adapt the table size yourself, according small, otherwise you will lose performance on it. You can adapt the
to your virtual server application. It is good to set the table size table size yourself, according to your virtual server application.
not far less than the number of connections per second multiplying It is good to set the table size not far less than the number of
average lasting time of connection in the table. For example, your connections per second multiplying average lasting time of
virtual server gets 200 connections per second, the connection lasts connection in the table. For example, your virtual server gets 200
for 200 seconds in average in the connection table, the table size connections per second, the connection lasts for 200 seconds in
should be not far less than 200x200, it is good to set the table average in the connection table, the table size should be not far
size 32768 (2**15). less than 200x200, it is good to set the table size 32768 (2**15).
Another note that each connection occupies 128 bytes effectively and Another note that each connection occupies 128 bytes effectively and
each hash entry uses 8 bytes, so you can estimate how much memory is each hash entry uses 8 bytes, so you can estimate how much memory is
needed for your box. needed for your box.
You can overwrite this number setting conn_tab_bits module parameter You can overwrite this number setting conn_tab_bits module parameter
or by appending ip_vs.conn_tab_bits=? to the kernel command line or by appending ip_vs.conn_tab_bits=? to the kernel command line if
if IP VS was compiled built-in. IP VS was compiled built-in.
comment "IPVS transport protocol load balancing support" comment "IPVS transport protocol load balancing support"

View File

@@ -1484,8 +1484,8 @@ int __init ip_vs_conn_init(void)
int idx; int idx;
/* Compute size and mask */ /* Compute size and mask */
if (ip_vs_conn_tab_bits < 8 || ip_vs_conn_tab_bits > 20) { if (ip_vs_conn_tab_bits < 8 || ip_vs_conn_tab_bits > 27) {
pr_info("conn_tab_bits not in [8, 20]. Using default value\n"); 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_bits = CONFIG_IP_VS_TAB_BITS;
} }
ip_vs_conn_tab_size = 1 << ip_vs_conn_tab_bits; ip_vs_conn_tab_size = 1 << ip_vs_conn_tab_bits;