Commit 04292c69 authored by Abhijeet Rastogi's avatar Abhijeet Rastogi Committed by Pablo Neira Ayuso

ipvs: increase ip_vs_conn_tab_bits range for 64BIT

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/#uSigned-off-by: default avatarAbhijeet Rastogi <abhijeet.1989@gmail.com>
Acked-by: default avatarJulian Anastasov <ja@ssi.bg>
Acked-by: default avatarSimon Horman <horms@kernel.org>
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent 4ff3dfc9
...@@ -44,7 +44,8 @@ config IP_VS_DEBUG ...@@ -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 ...@@ -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"
......
...@@ -1485,8 +1485,8 @@ int __init ip_vs_conn_init(void) ...@@ -1485,8 +1485,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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment