Hello, On Mon, 24 Jul 2023, Dust Li wrote: > From: Jiejian Wu <jiejian@xxxxxxxxxxxxxxxxx> > > Current ipvs uses one global mutex "__ip_vs_mutex" to keep the global > "ip_vs_svc_table" and "ip_vs_svc_fwm_table" safe. But when there are > tens of thousands of services from different netns in the table, it > takes a long time to look up the table, for example, using "ipvsadm > -ln" from different netns simultaneously. > > We make "ip_vs_svc_table" and "ip_vs_svc_fwm_table" per netns, and we > add "service_mutex" per netns to keep these two tables safe instead of > the global "__ip_vs_mutex" in current version. To this end, looking up > services from different netns simultaneously will not get stuck, > shortening the time consumption in large-scale deployment. It can be > reproduced using the simple scripts below. > > init.sh: #!/bin/bash > for((i=1;i<=4;i++));do > ip netns add ns$i > ip netns exec ns$i ip link set dev lo up > ip netns exec ns$i sh add-services.sh > done > > add-services.sh: #!/bin/bash > for((i=0;i<30000;i++)); do > ipvsadm -A -t 10.10.10.10:$((80+$i)) -s rr > done > > runtest.sh: #!/bin/bash > for((i=1;i<4;i++));do > ip netns exec ns$i ipvsadm -ln > /dev/null & > done > ip netns exec ns4 ipvsadm -ln > /dev/null > > Run "sh init.sh" to initiate the network environment. Then run "time > ./runtest.sh" to evaluate the time consumption. Our testbed is a 4-core > Intel Xeon ECS. The result of the original version is around 8 seconds, > while the result of the modified version is only 0.8 seconds. > > Signed-off-by: Jiejian Wu <jiejian@xxxxxxxxxxxxxxxxx> > Co-developed-by: Dust Li <dust.li@xxxxxxxxxxxxxxxxx> > Signed-off-by: Dust Li <dust.li@xxxxxxxxxxxxxxxxx> Looks good to me, thanks! I'm taking this patch and will repost it together with other related patches. > --- > v3: > * fix complains of checkpatch > v2: > * remove global __ip_vs_mutex in ip_vs_est.c > * remove ip_vs_ prefix for svc_table and svc_fwm_table > * remove redundant "svc->ipvs == ipvs" checks > --- Regards -- Julian Anastasov <ja@xxxxxx>