Commit a885e3f9 authored by Xunlei Pang's avatar Xunlei Pang Committed by Zheng Zengkai
Browse files

psi: support psi under cgroup v1

Export "cpu|io|memory.pressure" to cgroup v1 "cpuacct" subsystem.

hulk inclusion
category: feature
bugzilla: 182979 https://gitee.com/openeuler/kernel/issues/I4HOX6



------------------------------------------

Reviewed-by: default avatarJoseph Qi <joseph.qi@linux.alibaba.com>
Signed-off-by: default avatarXunlei Pang <xlpang@linux.alibaba.com>
Signed-off-by: default avatarChen Wandun <chenwandun@huawei.com>
Reviewed-by: default avatarKefeng Wang <wangkefeng.wang@huawei.com>
Signed-off-by: default avatarZheng Zengkai <zhengzengkai@huawei.com>
parent 763a2abf
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -635,6 +635,16 @@ config PSI_DEFAULT_DISABLED

	  Say N if unsure.

config PSI_CGROUP_V1
	bool "Support PSI under cgroup v1"
	default Y
	depends on PSI
	help
	  If set, pressure stall information tracking will be used
	  for cgroup v1 other than v2.

	  Say N if unsure.

endmenu # "CPU/Task time and stats accounting"

config CPU_ISOLATION
+28 −0
Original line number Diff line number Diff line
@@ -3659,6 +3659,34 @@ static void cgroup_pressure_release(struct kernfs_open_file *of)
{
	psi_trigger_replace(&of->priv, NULL);
}

struct cftype cgroup_v1_psi_files[] = {
	{
		.name = "io.pressure",
		.flags = CFTYPE_NO_PREFIX,
		.seq_show = cgroup_io_pressure_show,
		.write = cgroup_io_pressure_write,
		.poll = cgroup_pressure_poll,
		.release = cgroup_pressure_release,
	},
	{
		.name = "memory.pressure",
		.flags = CFTYPE_NO_PREFIX,
		.seq_show = cgroup_memory_pressure_show,
		.write = cgroup_memory_pressure_write,
		.poll = cgroup_pressure_poll,
		.release = cgroup_pressure_release,
	},
	{
		.name = "cpu.pressure",
		.flags = CFTYPE_NO_PREFIX,
		.seq_show = cgroup_cpu_pressure_show,
		.write = cgroup_cpu_pressure_write,
		.poll = cgroup_pressure_poll,
		.release = cgroup_pressure_release,
	},
	{ } /* terminate */
};
#endif /* CONFIG_PSI */

static int cgroup_freeze_show(struct seq_file *seq, void *v)
+10 −0
Original line number Diff line number Diff line
@@ -374,3 +374,13 @@ struct cgroup_subsys cpuacct_cgrp_subsys = {
	.legacy_cftypes	= files,
	.early_init	= true,
};

#ifdef CONFIG_PSI
static int __init cgroup_v1_psi_init(void)
{
	cgroup_add_legacy_cftypes(&cpuacct_cgrp_subsys, cgroup_v1_psi_files);
	return 0;
}

late_initcall_sync(cgroup_v1_psi_init);
#endif
+4 −0
Original line number Diff line number Diff line
@@ -752,7 +752,11 @@ static struct psi_group *iterate_groups(struct task_struct *task, void **iter)
	struct cgroup *cgroup = NULL;

	if (!*iter)
#ifdef CONFIG_PSI_CGROUP_V1
		cgroup = task_cgroup(task, cpuacct_cgrp_id);
#else
		cgroup = task->cgroups->dfl_cgrp;
#endif
	else if (*iter == &psi_system)
		return NULL;
	else
+4 −0
Original line number Diff line number Diff line
@@ -2585,6 +2585,10 @@ unsigned long scale_irq_capacity(unsigned long util, unsigned long irq, unsigned
}
#endif

#ifdef CONFIG_PSI
extern struct cftype cgroup_v1_psi_files[];
#endif

#if defined(CONFIG_ENERGY_MODEL) && defined(CONFIG_CPU_FREQ_GOV_SCHEDUTIL)

#define perf_domain_span(pd) (to_cpumask(((pd)->em_pd->cpus)))