diff options
| author | Thadeu Lima de Souza Cascardo <cascardo@igalia.com> | 2026-05-14 14:36:08 -0300 |
|---|---|---|
| committer | Maarten Lankhorst <dev@lankhorst.se> | 2026-06-05 12:36:55 +0200 |
| commit | 640c57d6ca1346a1c2363a3f473b405af979e046 (patch) | |
| tree | 4bebe5f8055adef8d3f2c4a7f166736444e624f0 /kernel/cgroup | |
| parent | e3ddb0b340e49440efefe442eb47fa03da9c0c3a (diff) | |
| download | linux-next-640c57d6ca1346a1c2363a3f473b405af979e046.tar.gz linux-next-640c57d6ca1346a1c2363a3f473b405af979e046.zip | |
cgroup/dmem: introduce a peak file
Just like we have memory.peak, introduce a dmem.peak, which uses the
page_counter support for that.
For now, make it read-only.
This allows for memory usage monitoring without polling dmem.current when
the information needed is the maximum device memory used. That can be used
for capacity planning, such that dmem.max can be properly setup for a given
workload. It can also be used for debugging to determine whether a given
workload would have caused eviction or system memory use.
Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
Reviewed-by: Michal Koutný <mkoutny@suse.com>
Reviewed-by: Maarten Lankhorst <dev@lankhorst.se>
Link: https://patch.msgid.link/20260514-dmem_peak-v3-1-b64ce5d3ac38@igalia.com
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
Diffstat (limited to 'kernel/cgroup')
| -rw-r--r-- | kernel/cgroup/dmem.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/kernel/cgroup/dmem.c b/kernel/cgroup/dmem.c index 4753a67d0f0f..6430c7ce1e03 100644 --- a/kernel/cgroup/dmem.c +++ b/kernel/cgroup/dmem.c @@ -182,6 +182,11 @@ static u64 get_resource_current(struct dmem_cgroup_pool_state *pool) return pool ? page_counter_read(&pool->cnt) : 0; } +static u64 get_resource_peak(struct dmem_cgroup_pool_state *pool) +{ + return pool ? READ_ONCE(pool->cnt.watermark) : 0; +} + static void reset_all_resource_limits(struct dmem_cgroup_pool_state *rpool) { set_resource_min(rpool, 0); @@ -808,6 +813,11 @@ static int dmemcg_limit_show(struct seq_file *sf, void *v, return 0; } +static int dmem_cgroup_region_peak_show(struct seq_file *sf, void *v) +{ + return dmemcg_limit_show(sf, v, get_resource_peak); +} + static int dmem_cgroup_region_current_show(struct seq_file *sf, void *v) { return dmemcg_limit_show(sf, v, get_resource_current); @@ -857,6 +867,11 @@ static struct cftype files[] = { .seq_show = dmem_cgroup_region_current_show, }, { + .name = "peak", + .seq_show = dmem_cgroup_region_peak_show, + .flags = CFTYPE_NOT_ON_ROOT, + }, + { .name = "min", .write = dmem_cgroup_region_min_write, .seq_show = dmem_cgroup_region_min_show, |
