11/*
22 * Copyright (c) 2020, 2024, Red Hat Inc.
3+ * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved.
34 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
45 *
56 * This code is free software; you can redistribute it and/or modify it
@@ -61,6 +62,34 @@ class CgroupV2CpuController: public CgroupCpuController {
6162 int cpu_quota () override ;
6263 int cpu_period () override ;
6364 int cpu_shares () override ;
65+ jlong cpu_usage_in_micros ();
66+ bool is_read_only () override {
67+ return reader ()->is_read_only ();
68+ }
69+ const char * subsystem_path () override {
70+ return reader ()->subsystem_path ();
71+ }
72+ bool needs_hierarchy_adjustment () override {
73+ return reader ()->needs_hierarchy_adjustment ();
74+ }
75+ void set_subsystem_path (const char * cgroup_path) override {
76+ reader ()->set_subsystem_path (cgroup_path);
77+ }
78+ const char * mount_point () override { return reader ()->mount_point (); }
79+ const char * cgroup_path () override { return reader ()->cgroup_path (); }
80+ };
81+
82+ class CgroupV2CpuacctController : public CgroupCpuacctController {
83+ private:
84+ CgroupV2CpuController* _reader;
85+ CgroupV2CpuController* reader () { return _reader; }
86+ public:
87+ CgroupV2CpuacctController (CgroupV2CpuController* reader) : _reader(reader) {
88+ }
89+ // In cgroup v2, cpu usage is a part of the cpu controller.
90+ jlong cpu_usage_in_micros () override {
91+ return reader ()->cpu_usage_in_micros ();
92+ }
6493 bool is_read_only () override {
6594 return reader ()->is_read_only ();
6695 }
@@ -89,6 +118,7 @@ class CgroupV2MemoryController final: public CgroupMemoryController {
89118 jlong memory_and_swap_limit_in_bytes (julong host_mem, julong host_swp) override ;
90119 jlong memory_and_swap_usage_in_bytes (julong host_mem, julong host_swp) override ;
91120 jlong memory_soft_limit_in_bytes (julong upper_bound) override ;
121+ jlong memory_throttle_limit_in_bytes () override ;
92122 jlong memory_usage_in_bytes () override ;
93123 jlong memory_max_usage_in_bytes () override ;
94124 jlong rss_usage_in_bytes () override ;
@@ -118,11 +148,14 @@ class CgroupV2Subsystem: public CgroupSubsystem {
118148 CachingCgroupController<CgroupMemoryController>* _memory = nullptr ;
119149 CachingCgroupController<CgroupCpuController>* _cpu = nullptr ;
120150
151+ CgroupCpuacctController* _cpuacct = nullptr ;
152+
121153 CgroupV2Controller* unified () { return &_unified; }
122154
123155 public:
124156 CgroupV2Subsystem (CgroupV2MemoryController * memory,
125157 CgroupV2CpuController* cpu,
158+ CgroupV2CpuacctController* cpuacct,
126159 CgroupV2Controller unified);
127160
128161 char * cpu_cpuset_cpus () override ;
@@ -137,6 +170,7 @@ class CgroupV2Subsystem: public CgroupSubsystem {
137170 }
138171 CachingCgroupController<CgroupMemoryController>* memory_controller () override { return _memory; }
139172 CachingCgroupController<CgroupCpuController>* cpu_controller () override { return _cpu; }
173+ CgroupCpuacctController* cpuacct_controller () override { return _cpuacct; };
140174};
141175
142176#endif // CGROUP_V2_SUBSYSTEM_LINUX_HPP
0 commit comments