On Thu, Jun 25, 2026 at 10:23:22AM +0200, Michal Koutný wrote: > Hi. > > On Wed, Jun 24, 2026 at 12:03:57PM -0400, Joe Simmons-Talbott > <[email protected]> wrote: > > +/* > > + * Best effort attempt to get the kernel's HZ value from the config. > > + * Return the HZ value if found otherwise return -1 to indicate failure. > > + */ > > +static long > > +_get_config_hz(void) > > drop underscore from the static function > > > +{ > > + long hz = -1; > > use the default 1000 here to simplify the callers > > > + 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 +670,21 @@ 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_seconds; > > > > - 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]; > > > > + if (hz == -1) > > + hz = 1000; > > + duration_seconds = 1000 / hz; > > + duration_usec = duration_seconds * USEC_PER_SEC; > > I'd do the calculation in usecs > > duration_usec = duration_seconds * USEC_PER_SEC * 1000 / hz; > > so that actual duration is more precise (for hz=300 which is the only > that doesn't divide 1000) > > All in all, make the adjustments for HZ with less code (since I expect > this will need adjustments for SMPs in future).
Hi Michal, Thanks for your feedback. I'll make the changes you have suggested in v4. Thanks, Joe

