* [PATCH v5 -next] cgroup/misc: Introduce misc.peak
@ 2024-07-03 0:36 Xiu Jianfeng
2024-07-03 9:43 ` Kamalesh Babulal
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Xiu Jianfeng @ 2024-07-03 0:36 UTC (permalink / raw)
To: tj, lizefan.x, hannes, corbet, kamalesh.babulal, haitao.huang
Cc: cgroups, linux-doc, linux-kernel
Introduce misc.peak to record the historical maximum usage of the
resource, as in some scenarios the value of misc.max could be
adjusted based on the peak usage of the resource.
Signed-off-by: Xiu Jianfeng <xiujianfeng@huawei.com>
---
v5: change the type of watermark to atomic64_t
v4: fix the issue of unconditionally updating the watermark
v3: fix while (0)
v2: use cmpxchg to update the watermark
---
Documentation/admin-guide/cgroup-v2.rst | 9 ++++++
include/linux/misc_cgroup.h | 2 ++
kernel/cgroup/misc.c | 41 +++++++++++++++++++++++++
3 files changed, 52 insertions(+)
diff --git a/Documentation/admin-guide/cgroup-v2.rst b/Documentation/admin-guide/cgroup-v2.rst
index ae0fdb6fc618..468a95379009 100644
--- a/Documentation/admin-guide/cgroup-v2.rst
+++ b/Documentation/admin-guide/cgroup-v2.rst
@@ -2646,6 +2646,15 @@ Miscellaneous controller provides 3 interface files. If two misc resources (res_
res_a 3
res_b 0
+ misc.peak
+ A read-only flat-keyed file shown in all cgroups. It shows the
+ historical maximum usage of the resources in the cgroup and its
+ children.::
+
+ $ cat misc.peak
+ res_a 10
+ res_b 8
+
misc.max
A read-write flat-keyed file shown in the non root cgroups. Allowed
maximum usage of the resources in the cgroup and its children.::
diff --git a/include/linux/misc_cgroup.h b/include/linux/misc_cgroup.h
index e799b1f8d05b..ba02e04b7165 100644
--- a/include/linux/misc_cgroup.h
+++ b/include/linux/misc_cgroup.h
@@ -30,11 +30,13 @@ struct misc_cg;
/**
* struct misc_res: Per cgroup per misc type resource
* @max: Maximum limit on the resource.
+ * @watermark: Historical maximum usage of the resource.
* @usage: Current usage of the resource.
* @events: Number of times, the resource limit exceeded.
*/
struct misc_res {
u64 max;
+ atomic64_t watermark;
atomic64_t usage;
atomic64_t events;
};
diff --git a/kernel/cgroup/misc.c b/kernel/cgroup/misc.c
index 79a3717a5803..b92daf5d234d 100644
--- a/kernel/cgroup/misc.c
+++ b/kernel/cgroup/misc.c
@@ -121,6 +121,19 @@ static void misc_cg_cancel_charge(enum misc_res_type type, struct misc_cg *cg,
misc_res_name[type]);
}
+static void misc_cg_update_watermark(struct misc_res *res, u64 new_usage)
+{
+ u64 old;
+
+ while (true) {
+ old = atomic64_read(&res->watermark);
+ if (new_usage <= old)
+ break;
+ if (atomic64_cmpxchg(&res->watermark, old, new_usage) == old)
+ break;
+ }
+}
+
/**
* misc_cg_try_charge() - Try charging the misc cgroup.
* @type: Misc res type to charge.
@@ -159,6 +172,7 @@ int misc_cg_try_charge(enum misc_res_type type, struct misc_cg *cg, u64 amount)
ret = -EBUSY;
goto err_charge;
}
+ misc_cg_update_watermark(res, new_usage);
}
return 0;
@@ -307,6 +321,29 @@ static int misc_cg_current_show(struct seq_file *sf, void *v)
return 0;
}
+/**
+ * misc_cg_peak_show() - Show the peak usage of the misc cgroup.
+ * @sf: Interface file
+ * @v: Arguments passed
+ *
+ * Context: Any context.
+ * Return: 0 to denote successful print.
+ */
+static int misc_cg_peak_show(struct seq_file *sf, void *v)
+{
+ int i;
+ u64 watermark;
+ struct misc_cg *cg = css_misc(seq_css(sf));
+
+ for (i = 0; i < MISC_CG_RES_TYPES; i++) {
+ watermark = atomic64_read(&cg->res[i].watermark);
+ if (READ_ONCE(misc_res_capacity[i]) || watermark)
+ seq_printf(sf, "%s %llu\n", misc_res_name[i], watermark);
+ }
+
+ return 0;
+}
+
/**
* misc_cg_capacity_show() - Show the total capacity of misc res on the host.
* @sf: Interface file
@@ -357,6 +394,10 @@ static struct cftype misc_cg_files[] = {
.name = "current",
.seq_show = misc_cg_current_show,
},
+ {
+ .name = "peak",
+ .seq_show = misc_cg_peak_show,
+ },
{
.name = "capacity",
.seq_show = misc_cg_capacity_show,
--
2.34.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v5 -next] cgroup/misc: Introduce misc.peak
2024-07-03 0:36 [PATCH v5 -next] cgroup/misc: Introduce misc.peak Xiu Jianfeng
@ 2024-07-03 9:43 ` Kamalesh Babulal
2024-07-03 18:03 ` Tejun Heo
2024-07-03 18:09 ` Tejun Heo
2024-07-08 11:48 ` Haitao Huang
2 siblings, 1 reply; 6+ messages in thread
From: Kamalesh Babulal @ 2024-07-03 9:43 UTC (permalink / raw)
To: Xiu Jianfeng, tj, lizefan.x, hannes, corbet, haitao.huang
Cc: cgroups, linux-doc, linux-kernel
On 7/3/24 6:06 AM, Xiu Jianfeng wrote:
> Introduce misc.peak to record the historical maximum usage of the
> resource, as in some scenarios the value of misc.max could be
> adjusted based on the peak usage of the resource.
>
[...]
> /**
> * misc_cg_capacity_show() - Show the total capacity of misc res on the host.
> * @sf: Interface file
> @@ -357,6 +394,10 @@ static struct cftype misc_cg_files[] = {
> .name = "current",
> .seq_show = misc_cg_current_show,
> },
> + {
> + .name = "peak",
> + .seq_show = misc_cg_peak_show,
> + },
> {
> .name = "capacity",
> .seq_show = misc_cg_capacity_show,
The patch looks good to me after the atomic conversion. Sorry for bringing up
this question so late into the discussion. Given that misc.max is available
only for non-root cgroups, does it make sense for misc.peak too, available
for non-root cgroups only?
--
Thanks,
Kamalesh
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v5 -next] cgroup/misc: Introduce misc.peak
2024-07-03 9:43 ` Kamalesh Babulal
@ 2024-07-03 18:03 ` Tejun Heo
2024-07-04 5:54 ` Kamalesh Babulal
0 siblings, 1 reply; 6+ messages in thread
From: Tejun Heo @ 2024-07-03 18:03 UTC (permalink / raw)
To: Kamalesh Babulal
Cc: Xiu Jianfeng, lizefan.x, hannes, corbet, haitao.huang, cgroups,
linux-doc, linux-kernel
On Wed, Jul 03, 2024 at 03:13:29PM +0530, Kamalesh Babulal wrote:
...
> The patch looks good to me after the atomic conversion. Sorry for bringing up
> this question so late into the discussion. Given that misc.max is available
> only for non-root cgroups, does it make sense for misc.peak too, available
> for non-root cgroups only?
It's more tied to the usage - misc.current. For memcg, memory.current is
only on non-root cgroups, so is peak. For misc, as misc.current exists for
the root cgroup, it makes sense for .peak to be there too.
Thanks.
--
tejun
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v5 -next] cgroup/misc: Introduce misc.peak
2024-07-03 0:36 [PATCH v5 -next] cgroup/misc: Introduce misc.peak Xiu Jianfeng
2024-07-03 9:43 ` Kamalesh Babulal
@ 2024-07-03 18:09 ` Tejun Heo
2024-07-08 11:48 ` Haitao Huang
2 siblings, 0 replies; 6+ messages in thread
From: Tejun Heo @ 2024-07-03 18:09 UTC (permalink / raw)
To: Xiu Jianfeng
Cc: lizefan.x, hannes, corbet, kamalesh.babulal, haitao.huang,
cgroups, linux-doc, linux-kernel
On Wed, Jul 03, 2024 at 12:36:46AM +0000, Xiu Jianfeng wrote:
> Introduce misc.peak to record the historical maximum usage of the
> resource, as in some scenarios the value of misc.max could be
> adjusted based on the peak usage of the resource.
>
> Signed-off-by: Xiu Jianfeng <xiujianfeng@huawei.com>
Applied to cgroup/for-6.11.
Thanks.
--
tejun
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v5 -next] cgroup/misc: Introduce misc.peak
2024-07-03 18:03 ` Tejun Heo
@ 2024-07-04 5:54 ` Kamalesh Babulal
0 siblings, 0 replies; 6+ messages in thread
From: Kamalesh Babulal @ 2024-07-04 5:54 UTC (permalink / raw)
To: Tejun Heo
Cc: Xiu Jianfeng, lizefan.x, hannes, corbet, haitao.huang, cgroups,
linux-doc, linux-kernel
On 7/3/24 11:33 PM, Tejun Heo wrote:
> On Wed, Jul 03, 2024 at 03:13:29PM +0530, Kamalesh Babulal wrote:
> ...
>> The patch looks good to me after the atomic conversion. Sorry for bringing up
>> this question so late into the discussion. Given that misc.max is available
>> only for non-root cgroups, does it make sense for misc.peak too, available
>> for non-root cgroups only?
>
> It's more tied to the usage - misc.current. For memcg, memory.current is
> only on non-root cgroups, so is peak. For misc, as misc.current exists for
> the root cgroup, it makes sense for .peak to be there too.
>
Thank you so much for explaining in the context of misc controller.
--
Thanks,
Kamalesh
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v5 -next] cgroup/misc: Introduce misc.peak
2024-07-03 0:36 [PATCH v5 -next] cgroup/misc: Introduce misc.peak Xiu Jianfeng
2024-07-03 9:43 ` Kamalesh Babulal
2024-07-03 18:09 ` Tejun Heo
@ 2024-07-08 11:48 ` Haitao Huang
2 siblings, 0 replies; 6+ messages in thread
From: Haitao Huang @ 2024-07-08 11:48 UTC (permalink / raw)
To: tj, lizefan.x, hannes, corbet, kamalesh.babulal, Xiu Jianfeng
Cc: cgroups, linux-doc, linux-kernel
On Tue, 02 Jul 2024 19:36:46 -0500, Xiu Jianfeng <xiujianfeng@huawei.com>
wrote:
> Introduce misc.peak to record the historical maximum usage of the
> resource, as in some scenarios the value of misc.max could be
> adjusted based on the peak usage of the resource.
>
Acked-by: haitao.huang@linux.intel.com
BTW, from SGX point of view, I think it also makes sense to show peak
usage in the root group.
Thanks
Haitao
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-07-08 11:48 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-03 0:36 [PATCH v5 -next] cgroup/misc: Introduce misc.peak Xiu Jianfeng
2024-07-03 9:43 ` Kamalesh Babulal
2024-07-03 18:03 ` Tejun Heo
2024-07-04 5:54 ` Kamalesh Babulal
2024-07-03 18:09 ` Tejun Heo
2024-07-08 11:48 ` Haitao Huang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox