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
|
0 - disabled
|
||||||
not 0 - enabled (default)
|
not 0 - enabled (default)
|
||||||
|
|
||||||
If disabled, the estimation will be stop, and you can't see
|
If disabled, the estimation will be suspended and kthread tasks
|
||||||
any update on speed estimation data.
|
stopped.
|
||||||
|
|
||||||
You can always re-enable estimation by setting this value to 1.
|
You can always re-enable estimation by setting this value to 1.
|
||||||
But be careful, the first estimation after re-enable is not
|
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)
|
static inline void ip_vs_est_stopped_recalc(struct netns_ipvs *ipvs)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_SYSCTL
|
#ifdef CONFIG_SYSCTL
|
||||||
ipvs->est_stopped = ipvs->est_cpulist_valid &&
|
/* Stop tasks while cpulist is empty or if disabled with flag */
|
||||||
cpumask_empty(sysctl_est_cpulist(ipvs));
|
ipvs->est_stopped = !sysctl_run_estimation(ipvs) ||
|
||||||
|
(ipvs->est_cpulist_valid &&
|
||||||
|
cpumask_empty(sysctl_est_cpulist(ipvs)));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2056,6 +2056,32 @@ static int ipvs_proc_est_nice(struct ctl_table *table, int write,
|
||||||
return ret;
|
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/)
|
* IPVS sysctl table (under the /proc/sys/net/ipv4/vs/)
|
||||||
* Do not change order or insert new entries without
|
* Do not change order or insert new entries without
|
||||||
|
@ -2230,7 +2256,7 @@ static struct ctl_table vs_vars[] = {
|
||||||
.procname = "run_estimation",
|
.procname = "run_estimation",
|
||||||
.maxlen = sizeof(int),
|
.maxlen = sizeof(int),
|
||||||
.mode = 0644,
|
.mode = 0644,
|
||||||
.proc_handler = proc_dointvec,
|
.proc_handler = ipvs_proc_run_estimation,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.procname = "est_cpulist",
|
.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_schedule_icmp;
|
||||||
tbl[idx++].data = &ipvs->sysctl_ignore_tunneled;
|
tbl[idx++].data = &ipvs->sysctl_ignore_tunneled;
|
||||||
ipvs->sysctl_run_estimation = 1;
|
ipvs->sysctl_run_estimation = 1;
|
||||||
|
tbl[idx].extra2 = ipvs;
|
||||||
tbl[idx++].data = &ipvs->sysctl_run_estimation;
|
tbl[idx++].data = &ipvs->sysctl_run_estimation;
|
||||||
|
|
||||||
ipvs->est_cpulist_valid = 0;
|
ipvs->est_cpulist_valid = 0;
|
||||||
|
|
|
@ -212,7 +212,7 @@ static int ip_vs_estimation_kthread(void *data)
|
||||||
kd->est_timer = now;
|
kd->est_timer = now;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sysctl_run_estimation(ipvs) && kd->tick_len[row])
|
if (kd->tick_len[row])
|
||||||
ip_vs_tick_estimation(kd, row);
|
ip_vs_tick_estimation(kd, row);
|
||||||
|
|
||||||
row++;
|
row++;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче