Message ID | abdcbdb265264f736df316622a695ad30019c05f.1584766216.git.len.brown@intel.com (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | Len Brown |
Headers | show |
Series | None | expand |
Hi Len, On 2020.03.20 21:55 Len Brown wrote: > From: Len Brown <len.brown@intel.com> > > Print cpuidle driver and governor. > > Originally-by: Antti Laakso <antti.laakso@linux.intel.com> > Signed-off-by: Len Brown <len.brown@intel.com> > --- > tools/power/x86/turbostat/turbostat.c | 26 ++++++++++++++++++++++++++ > 1 file changed, 26 insertions(+) > > diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c > index 77f89371ec5f..05dbe23570d4 100644 > --- a/tools/power/x86/turbostat/turbostat.c > +++ b/tools/power/x86/turbostat/turbostat.c ... > > static void > dump_sysfs_cstate_config(void) > { > @@ -3516,6 +3533,15 @@ dump_sysfs_cstate_config(void) > if (!DO_BIC(BIC_sysfs)) > return; I do not understand why this information needs to be a function of the --show options and not solely a function of the --quiet option. My reasoning is that I almost always want all the information possible in the start spew of stuff, and if I don't I'll use --quiet option. However, I rarely show more than about 6 columns at a time resulting in intermittent inclusion of this information. > > + if (access("/sys/devices/system/cpu/cpuidle", R_OK)) { > + fprintf(outf, "cpuidle not loaded\n"); > + return; > + } > + > + dump_sysfs_file("/sys/devices/system/cpu/cpuidle/current_driver"); > + dump_sysfs_file("/sys/devices/system/cpu/cpuidle/current_governor"); > + dump_sysfs_file("/sys/devices/system/cpu/cpuidle/current_governor_ro"); > + > for (state = 0; state < 10; ++state) { > > sprintf(path, "/sys/devices/system/cpu/cpu%d/cpuidle/state%d/name",
Doug, I agree with you. Looks like an oversight -- will fix. thanks! -Len On Tue, Mar 24, 2020 at 8:50 PM Doug Smythies <dsmythies@telus.net> wrote: > > Hi Len, > > On 2020.03.20 21:55 Len Brown wrote: > > > From: Len Brown <len.brown@intel.com> > > > > Print cpuidle driver and governor. > > > > Originally-by: Antti Laakso <antti.laakso@linux.intel.com> > > Signed-off-by: Len Brown <len.brown@intel.com> > > --- > > tools/power/x86/turbostat/turbostat.c | 26 ++++++++++++++++++++++++++ > > 1 file changed, 26 insertions(+) > > > > diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c > > index 77f89371ec5f..05dbe23570d4 100644 > > --- a/tools/power/x86/turbostat/turbostat.c > > +++ b/tools/power/x86/turbostat/turbostat.c > > > ... > > > > > static void > > dump_sysfs_cstate_config(void) > > { > > @@ -3516,6 +3533,15 @@ dump_sysfs_cstate_config(void) > > if (!DO_BIC(BIC_sysfs)) > > return; > > I do not understand why this information needs to be > a function of the --show options and not solely a > function of the --quiet option. > > My reasoning is that I almost always want all the information > possible in the start spew of stuff, and if I don't I'll > use --quiet option. However, I rarely show more than > about 6 columns at a time resulting in intermittent inclusion > of this information. > > > > > + if (access("/sys/devices/system/cpu/cpuidle", R_OK)) { > > + fprintf(outf, "cpuidle not loaded\n"); > > + return; > > + } > > + > > + dump_sysfs_file("/sys/devices/system/cpu/cpuidle/current_driver"); > > + dump_sysfs_file("/sys/devices/system/cpu/cpuidle/current_governor"); > > + dump_sysfs_file("/sys/devices/system/cpu/cpuidle/current_governor_ro"); > > + > > for (state = 0; state < 10; ++state) { > > > > sprintf(path, "/sys/devices/system/cpu/cpu%d/cpuidle/state%d/name", > >
diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c index 77f89371ec5f..05dbe23570d4 100644 --- a/tools/power/x86/turbostat/turbostat.c +++ b/tools/power/x86/turbostat/turbostat.c @@ -3503,6 +3503,23 @@ dump_cstate_pstate_config_info(unsigned int family, unsigned int model) dump_nhm_cst_cfg(); } +static void dump_sysfs_file(char *path) +{ + FILE *input; + char cpuidle_buf[64]; + + input = fopen(path, "r"); + if (input == NULL) { + if (debug) + fprintf(outf, "NSFOD %s\n", path); + return; + } + if (!fgets(cpuidle_buf, sizeof(cpuidle_buf), input)) + err(1, "%s: failed to read file", path); + fclose(input); + + fprintf(outf, "%s: %s", strrchr(path, '/') + 1, cpuidle_buf); +} static void dump_sysfs_cstate_config(void) { @@ -3516,6 +3533,15 @@ dump_sysfs_cstate_config(void) if (!DO_BIC(BIC_sysfs)) return; + if (access("/sys/devices/system/cpu/cpuidle", R_OK)) { + fprintf(outf, "cpuidle not loaded\n"); + return; + } + + dump_sysfs_file("/sys/devices/system/cpu/cpuidle/current_driver"); + dump_sysfs_file("/sys/devices/system/cpu/cpuidle/current_governor"); + dump_sysfs_file("/sys/devices/system/cpu/cpuidle/current_governor_ro"); + for (state = 0; state < 10; ++state) { sprintf(path, "/sys/devices/system/cpu/cpu%d/cpuidle/state%d/name",