mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 15:22:21 -04:00
selftests/cgroup: Adjust cpu test duration based on HZ
For lower HZ values a quota of 1000us is much lower than the amount of microseconds per tick which makes the tests test_cpucg_max and test_cpugc_max_nested fail. Increase the test duration to accommodate for lower HZ values. Link: https://lore.kernel.org/lkml/20260625203307.1114538-1-joest@redhat.com/ Signed-off-by: Joe Simmons-Talbott <joest@redhat.com> Acked-by: Michal Koutný <mkoutny@suse.com> Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
committed by
Tejun Heo
parent
da43ea2139
commit
a2703c2980
@@ -8,6 +8,7 @@
|
||||
|
||||
#define MB(x) (x << 20)
|
||||
|
||||
#define NSEC_PER_USEC 1000L
|
||||
#define USEC_PER_SEC 1000000L
|
||||
#define NSEC_PER_SEC 1000000000L
|
||||
|
||||
|
||||
@@ -639,6 +639,31 @@ test_cpucg_nested_weight_underprovisioned(const char *root)
|
||||
return run_cpucg_nested_weight_test(root, false);
|
||||
}
|
||||
|
||||
/*
|
||||
* Best effort attempt to get the kernel's HZ value from the config.
|
||||
* Return the HZ value if found otherwise return 1000 (the default) to
|
||||
* indicate failure.
|
||||
*/
|
||||
static long
|
||||
get_config_hz(void)
|
||||
{
|
||||
long hz = 1000;
|
||||
FILE *f;
|
||||
char cmd[256] = "zcat /proc/config.gz 2>/dev/null | grep '^CONFIG_HZ='";
|
||||
|
||||
f = popen(cmd, "r");
|
||||
|
||||
if (!f)
|
||||
return hz;
|
||||
|
||||
if (fscanf(f, "CONFIG_HZ=%ld", &hz) == EOF)
|
||||
goto out;
|
||||
|
||||
out:
|
||||
pclose(f);
|
||||
return hz;
|
||||
}
|
||||
|
||||
/*
|
||||
* This test creates a cgroup with some maximum value within a period, and
|
||||
* verifies that a process in the cgroup is not overscheduled.
|
||||
@@ -646,15 +671,18 @@ test_cpucg_nested_weight_underprovisioned(const char *root)
|
||||
static int test_cpucg_max(const char *root)
|
||||
{
|
||||
int ret = KSFT_FAIL;
|
||||
long hz = get_config_hz();
|
||||
long quota_usec = 1000;
|
||||
long default_period_usec = 100000; /* cpu.max's default period */
|
||||
long duration_seconds = 1;
|
||||
|
||||
long duration_usec = duration_seconds * USEC_PER_SEC;
|
||||
long duration_usec;
|
||||
long usage_usec, n_periods, remainder_usec, expected_usage_usec;
|
||||
char *cpucg;
|
||||
char quota_buf[32];
|
||||
|
||||
duration_usec = duration_seconds * USEC_PER_SEC * 1000 / hz;
|
||||
|
||||
snprintf(quota_buf, sizeof(quota_buf), "%ld", quota_usec);
|
||||
|
||||
cpucg = cg_name(root, "cpucg_test");
|
||||
@@ -670,8 +698,8 @@ static int test_cpucg_max(const char *root)
|
||||
struct cpu_hog_func_param param = {
|
||||
.nprocs = 1,
|
||||
.ts = {
|
||||
.tv_sec = duration_seconds,
|
||||
.tv_nsec = 0,
|
||||
.tv_sec = duration_usec / USEC_PER_SEC,
|
||||
.tv_nsec = duration_usec % USEC_PER_SEC * NSEC_PER_USEC,
|
||||
},
|
||||
.clock_type = CPU_HOG_CLOCK_WALL,
|
||||
};
|
||||
@@ -710,15 +738,18 @@ static int test_cpucg_max(const char *root)
|
||||
static int test_cpucg_max_nested(const char *root)
|
||||
{
|
||||
int ret = KSFT_FAIL;
|
||||
long hz = get_config_hz();
|
||||
long quota_usec = 1000;
|
||||
long default_period_usec = 100000; /* cpu.max's default period */
|
||||
long duration_seconds = 1;
|
||||
|
||||
long duration_usec = duration_seconds * USEC_PER_SEC;
|
||||
long duration_usec;
|
||||
long usage_usec, n_periods, remainder_usec, expected_usage_usec;
|
||||
char *parent, *child;
|
||||
char quota_buf[32];
|
||||
|
||||
duration_usec = duration_seconds * USEC_PER_SEC * 1000 / hz;
|
||||
|
||||
snprintf(quota_buf, sizeof(quota_buf), "%ld", quota_usec);
|
||||
|
||||
parent = cg_name(root, "cpucg_parent");
|
||||
@@ -741,8 +772,8 @@ static int test_cpucg_max_nested(const char *root)
|
||||
struct cpu_hog_func_param param = {
|
||||
.nprocs = 1,
|
||||
.ts = {
|
||||
.tv_sec = duration_seconds,
|
||||
.tv_nsec = 0,
|
||||
.tv_sec = duration_usec / USEC_PER_SEC,
|
||||
.tv_nsec = duration_usec % USEC_PER_SEC * NSEC_PER_USEC,
|
||||
},
|
||||
.clock_type = CPU_HOG_CLOCK_WALL,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user