ipvs: run_estimation should control the kthread tasks
Change the run_estimation flag to start/stop the kthread tasks. Signed-off-by: Julian Anastasov <ja@ssi.bg> Cc: yunhong-cgl jiang <xintian1976@gmail.com> Cc: "dust.li" <dust.li@linux.alibaba.com> Reviewed-by: Jiri Wiesner <jwiesner@suse.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
Родитель
f0be83d542
Коммит
144361c194
|
@ -324,8 +324,8 @@ run_estimation - BOOLEAN
|
|||
0 - disabled
|
||||
not 0 - enabled (default)
|
||||
|
||||
If disabled, the estimation will be stop, and you can't see
|
||||
any update on speed estimation data.
|
||||
If disabled, the estimation will be suspended and kthread tasks
|
||||
stopped.
|
||||
|
||||
You can always re-enable estimation by setting this value to 1.
|
||||
But be careful, the first estimation after re-enable is not
|
||||
|
|
|
@ -1605,8 +1605,10 @@ void ip_vs_est_kthread_stop(struct ip_vs_est_kt_data *kd);
|
|||
static inline void ip_vs_est_stopped_recalc(struct netns_ipvs *ipvs)
|
||||
{
|
||||
#ifdef CONFIG_SYSCTL
|
||||
ipvs->est_stopped = ipvs->est_cpulist_valid &&
|
||||
cpumask_empty(sysctl_est_cpulist(ipvs));
|
||||
/* Stop tasks while cpulist is empty or if disabled with flag */
|
||||
ipvs->est_stopped = !sysctl_run_estimation(ipvs) ||
|
||||
(ipvs->est_cpulist_valid &&
|
||||
cpumask_empty(sysctl_est_cpulist(ipvs)));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -2056,6 +2056,32 @@ static int ipvs_proc_est_nice(struct ctl_table *table, int write,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int ipvs_proc_run_estimation(struct ctl_table *table, int write,
|
||||
void *buffer, size_t *lenp, loff_t *ppos)
|
||||
{
|
||||
struct netns_ipvs *ipvs = table->extra2;
|
||||
int *valp = table->data;
|
||||
int val = *valp;
|
||||
int ret;
|
||||
|
||||
struct ctl_table tmp_table = {
|
||||
.data = &val,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = table->mode,
|
||||
};
|
||||
|
||||
ret = proc_dointvec(&tmp_table, write, buffer, lenp, ppos);
|
||||
if (write && ret >= 0) {
|
||||
mutex_lock(&ipvs->est_mutex);
|
||||
if (*valp != val) {
|
||||
*valp = val;
|
||||
ip_vs_est_reload_start(ipvs);
|
||||
}
|
||||
mutex_unlock(&ipvs->est_mutex);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* IPVS sysctl table (under the /proc/sys/net/ipv4/vs/)
|
||||
* Do not change order or insert new entries without
|
||||
|
@ -2230,7 +2256,7 @@ static struct ctl_table vs_vars[] = {
|
|||
.procname = "run_estimation",
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
.proc_handler = ipvs_proc_run_estimation,
|
||||
},
|
||||
{
|
||||
.procname = "est_cpulist",
|
||||
|
@ -4323,6 +4349,7 @@ static int __net_init ip_vs_control_net_init_sysctl(struct netns_ipvs *ipvs)
|
|||
tbl[idx++].data = &ipvs->sysctl_schedule_icmp;
|
||||
tbl[idx++].data = &ipvs->sysctl_ignore_tunneled;
|
||||
ipvs->sysctl_run_estimation = 1;
|
||||
tbl[idx].extra2 = ipvs;
|
||||
tbl[idx++].data = &ipvs->sysctl_run_estimation;
|
||||
|
||||
ipvs->est_cpulist_valid = 0;
|
||||
|
|
|
@ -212,7 +212,7 @@ static int ip_vs_estimation_kthread(void *data)
|
|||
kd->est_timer = now;
|
||||
}
|
||||
|
||||
if (sysctl_run_estimation(ipvs) && kd->tick_len[row])
|
||||
if (kd->tick_len[row])
|
||||
ip_vs_tick_estimation(kd, row);
|
||||
|
||||
row++;
|
||||
|
|
Загрузка…
Ссылка в новой задаче