[LTP] [PATCH 05/16] API/cgroup: Add more controllers to tst_cgroup
Li Wang
liwang@redhat.com
Mon Jan 24 08:10:12 CET 2022
On Wed, Jan 19, 2022 at 10:44 PM Luke Nowakowski-Krijger
<luke.nowakowskikrijger@canonical.com> wrote:
>
> Add more controllers so that they can be mounted and used using the
> cgroup C api.
>
> Most of the controllers used in controllers tests are added and a
> reasonable working set of the controller control files that I came
> across are added as well.
>
> Signed-off-by: Luke Nowakowski-Krijger <luke.nowakowskikrijger@canonical.com>
> ---
> lib/tst_cgroup.c | 153 ++++++++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 152 insertions(+), 1 deletion(-)
>
> diff --git a/lib/tst_cgroup.c b/lib/tst_cgroup.c
> index df541d26a..3d56a3364 100644
> --- a/lib/tst_cgroup.c
> +++ b/lib/tst_cgroup.c
> @@ -84,8 +84,20 @@ enum cgroup_ctrl_indx {
> CTRL_MEMORY = 1,
> CTRL_CPU,
> CTRL_CPUSET,
> + CTRL_IO,
> + CTRL_PIDS,
> + CTRL_RDMA,
> + CTRL_HUGETLB,
> + CTRL_CPUACCT,
> + CTRL_DEVICES,
> + CTRL_FREEZER,
> + CTRL_NETCLS,
> + CTRL_NETPRIO,
> + CTRL_BLKIO,
> + CTRL_MISC,
> + CTRL_PERFEVENT
Maybe add CTRL_DEBUG as well? Though most of the platform
diable CONFIG_CGROUP_DEBUG by default, cgroup_fj_function.sh
test debug ctrl and report an error with unknown controller:
(this config is always seen in debug-kernel)
tst_cgroup.c:902: TBROK: 'debug' controller is unknown to LTP
> };
> -#define CTRLS_MAX CTRL_CPUSET
> +#define CTRLS_MAX CTRL_PERFEVENT
>
> /* At most we can have one cgroup V1 tree for each controller and one
> * (empty) v2 tree.
> @@ -181,6 +193,109 @@ static const struct cgroup_file cpuset_ctrl_files[] = {
> { }
> };
>
> +static const struct cgroup_file io_ctrl_files[] = {
> + { "io.state", NULL, CTRL_IO },
io.stat?
> + { "io.cost.qos", NULL, CTRL_IO },
> + { "io.cost.model", NULL, CTRL_IO },
> + { "io.weight", NULL, CTRL_IO },
io.bfq.weight?
> + { "io.max", NULL, CTRL_IO },
> + { "io.pressure", NULL, CTRL_IO },
> + { }
I'm not sure if we have the same cgroup configurations, here I
got many different ctrl_files on V2:
# cat cgroup.controllers
cpuset cpu io memory hugetlb pids
# grep -i CGROUP_IO /boot/config-5.14.0-42.el9.aarch64
CONFIG_BLK_CGROUP_IOLATENCY=y
# CONFIG_BLK_CGROUP_IOCOST is not set
# CONFIG_BLK_CGROUP_IOPRIO is not set
# ls |grep io
io.bfq.weight
io.latency
io.max
io.pressure
io.stat
> +};
> +
> +static const struct cgroup_file pids_ctrl_files[] = {
> + { "pids.max", "pids.max", CTRL_PIDS },
> + { "pids.current", "pids.current", CTRL_PIDS },
I'm afraid there is no "pids.max|current" in the cgroup V1 directory.
> + { }
> +};
> +
> +static const struct cgroup_file rdma_ctrl_files[] = {
> + { "rdma.max", "rdma.max", CTRL_RDMA },
> + { "rdma.current", "rdma.current", CTRL_RDMA },
Here as well, can you recheck them exist in V1?
> + { }
> +};
> +
> +#define HUGETLB_ENTRY(SIZE) \
> + { "hugetlb.SIZE.max", "hugetlb.SIZE.limit_in_bytes", CTRL_HUGETLB }, \
> + { "hugetlb.SIZE.current", "hugetlb.SIZE.usage_in_bytes", CTRL_HUGETLB }, \
> + { "hugetlb.SIZE.rsvd.max", "hugetlb.SIZE.rsvd.limit_in_bytes", CTRL_HUGETLB }, \
> + { "hugetlb.SIZE.rsvd.curent", "hugetlb.SIZE.rsvd.usage_in_bytes", CTRL_HUGETLB }, \
> + { "hugetlb.SIZE.rsvd.max_usage_in_bytes", "hugetlb.SIZE.rsvd.max_usage_in_bytes", CTRL_HUGETLB }, \
> + { "hugetlb.SIZE.max_usage_in_bytes", "hugetlb.SIZE.max_usage_in_bytes", CTRL_HUGETLB }, \
> + { "hugetlb.SIZE.events", NULL, CTRL_HUGETLB }, \
> + { "hugetlb.SIZE.events.local", NULL, CTRL_HUGETLB }, \
> + { "hugetlb.SIZE.failcnt", "hugetlb.SIZE.failcnt", CTRL_HUGETLB }, \
> + { "hugetlb.SIZE.rsvd.failcnt", "hugetlb.SIZE.rsvd.failcnt", CTRL_HUGETLB },
> +
> +// TODO Add rest of hugetlb entries or find better way to reference files
> +static const struct cgroup_file hugetlb_ctrl_files[] = {
> + HUGETLB_ENTRY(2MB)
> + HUGETLB_ENTRY(1GB)
> + { }
> +};
> +
> +static const struct cgroup_file cpuacct_ctrl_files[] = {
> + { "cpuacct.state", "cpuacct.state", CTRL_CPUACCT },
cpuacct.stat?
> + { "cpuacct.usage", "cpuacct.usage", CTRL_CPUACCT },
> + { "cpuacct.usage_all", "cpuacct.usage_all", CTRL_CPUACCT },
> + { "cpuacct.usage_percpu", "cpuacct.usage_percpu", CTRL_CPUACCT },
> + { "cpuacct.usage_percpu_sys", "cpuacct.usage_percpu_sys", CTRL_CPUACCT },
> + { "cpuacct.usage_percpu_user", "cpuacct.usage_percpu_user", CTRL_CPUACCT },
> + { "cpuacct.usage_sys", "cpuacct.usage_sys", CTRL_CPUACCT },
> + { "cpuacct.usage_user", "cpuacct.usage_user", CTRL_CPUACCT },
> + { }
> +};
> +
> +static const struct cgroup_file devices_ctrl_files[] = {
> + { "devices.allow", "devices.allow", CTRL_DEVICES },
> + { "devices.deny", "devices.deny", CTRL_DEVICES },
> + { "devices.list", "devices.list", CTRL_DEVICES },
> + { }
> +};
> +
> +static const struct cgroup_file freezer_ctrl_files[] = {
> + { "freezer.parent_freezing", "freezer.parent_freezing", CTRL_FREEZER },
> + { "freezer.self_freezing", "freezer.self_freezing", CTRL_FREEZER },
> + { "freezer.parent_state", "freezer.parent_state", CTRL_FREEZER },
freezer.state?
> + { }
> +};
> +
> +static const struct cgroup_file netcls_ctrl_files[] = {
> + { "net_cls.classid", "net_cls.classid", CTRL_NETCLS },
> + { }
> +};
> +
> +static const struct cgroup_file netprio_ctrl_files[] = {
> + { "net_prio.ifpriomap", "net_prio.ifpriomap", CTRL_NETPRIO },
> + { "net_prio.prioidx", "net_prio.prioidx", CTRL_NETPRIO },
> + { }
> +};
> +
> +static const struct cgroup_file blkio_ctrl_files[] = {
> + { "blkio.reset_stats", "blkio.reset_stats", CTRL_BLKIO },
> + { "blkio.throttle.io_service_bytes", "blkio.io_service_bytes", CTRL_BLKIO },
> + { "blkio.throttle.io_service_bytes_recursive", "blkio.throttle.io_service_bytes_recursive", CTRL_BLKIO },
> + { "blkio.throttle.io_serviced", "blkio.throttle.io_serviced", CTRL_BLKIO },
> + { "blkio.throttle.io_serviced_recursive", "blkio.throttle.io_serviced_recursive", CTRL_BLKIO },
> + { "blkio.throttle.read_bps_device", "blkio.throttle.read_bps_device", CTRL_BLKIO },
> + { "blkio.throttle.read_iops_device", "blkio.throttle.read_iops_device", CTRL_BLKIO },
> + { "blkio.throttle.write_bps_device", "blkio.throttle.write_bps_device", CTRL_BLKIO },
> + { "blkio.throttle.write_iops_device", "blkio.throttle.write_iops_device", CTRL_BLKIO },
> + { }
> +};
> +
> +static const struct cgroup_file misc_ctrl_files[] = {
> + { "misc.capacity", "misc.capacity", CTRL_MISC },
> + { "misc.current", "misc.current", CTRL_MISC },
> + { "misc.max", "misc.max", CTRL_MISC },
> + { "misc.events", "misc.events", CTRL_MISC },
> + { }
> +};
> +
> +static const struct cgroup_file perf_event_ctrl_files[] = {
> + { }
> +};
> +
> /* Lookup tree for item names. */
> static struct cgroup_ctrl controllers[] = {
> [0] = { "cgroup", cgroup_ctrl_files, 0, NULL, 0 },
> @@ -193,6 +308,42 @@ static struct cgroup_ctrl controllers[] = {
> [CTRL_CPUSET] = {
> "cpuset", cpuset_ctrl_files, CTRL_CPUSET, NULL, 0
> },
> + [CTRL_IO] = {
> + "io", io_ctrl_files, CTRL_IO, NULL, 0
> + },
> + [CTRL_PIDS] = {
> + "pids", pids_ctrl_files, CTRL_PIDS, NULL, 0
> + },
> + [CTRL_RDMA] = {
> + "rdma", rdma_ctrl_files, CTRL_RDMA, NULL, 0
> + },
> + [CTRL_HUGETLB] = {
> + "hugetlb", hugetlb_ctrl_files, CTRL_HUGETLB, NULL, 0
> + },
> + [CTRL_CPUACCT] = {
> + "cpuacct", cpuacct_ctrl_files, CTRL_CPUACCT, NULL, 0
> + },
> + [CTRL_DEVICES] = {
> + "devices", devices_ctrl_files, CTRL_DEVICES, NULL, 0
> + },
> + [CTRL_FREEZER] = {
> + "freezer", freezer_ctrl_files, CTRL_FREEZER, NULL, 0
> + },
> + [CTRL_NETCLS] = {
> + "net_cls", netcls_ctrl_files, CTRL_NETCLS, NULL, 0
> + },
> + [CTRL_NETPRIO] = {
> + "net_prio", netprio_ctrl_files, CTRL_NETPRIO, NULL, 0
> + },
> + [CTRL_BLKIO] = {
> + "blkio", blkio_ctrl_files, CTRL_BLKIO, NULL, 0
> + },
> + [CTRL_MISC] = {
> + "misc", misc_ctrl_files, CTRL_MISC, NULL, 0
> + },
> + [CTRL_PERFEVENT] = {
> + "perf_event", perf_event_ctrl_files, CTRL_PERFEVENT, NULL, 0
> + },
> { }
> };
>
> --
> 2.32.0
>
--
Regards,
Li Wang
More information about the ltp
mailing list