OSDN Git Service

cpupower: Add "perf" option to print AMD P-State information
authorHuang Rui <ray.huang@amd.com>
Tue, 22 Feb 2022 15:34:26 +0000 (23:34 +0800)
committerShuah Khan <skhan@linuxfoundation.org>
Thu, 24 Feb 2022 00:46:21 +0000 (17:46 -0700)
Add "-c --perf" option in cpupower-frequency-info to get the performance
and frequency values for AMD P-State.

Commit message amended:
Shuah Khan <skhan@linuxfoundation.org>

Reviewed-by: Shuah Khan <skhan@linuxfoundation.org>
Signed-off-by: Huang Rui <ray.huang@amd.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
tools/power/cpupower/man/cpupower-frequency-info.1
tools/power/cpupower/utils/cpufreq-info.c

index 6aa8d23..dd545b4 100644 (file)
@@ -53,6 +53,9 @@ human\-readable output for the \-f, \-w, \-s and \-y parameters.
 \fB\-n\fR \fB\-\-no-rounding\fR
 Output frequencies and latencies without rounding off values.
 .TP  
+\fB\-c\fR \fB\-\-perf\fR
+Get performances and frequencies capabilities of CPPC, by reading it from hardware (only available on the hardware with CPPC).
+.TP
 .SH "REMARKS"
 .LP 
 By default only values of core zero are displayed. How to display settings of
index 235243e..0646f61 100644 (file)
@@ -438,6 +438,17 @@ static int get_latency(unsigned int cpu, unsigned int human)
        return 0;
 }
 
+/* --performance / -c */
+
+static int get_perf_cap(unsigned int cpu)
+{
+       if (cpupower_cpu_info.vendor == X86_VENDOR_AMD &&
+           cpupower_cpu_info.caps & CPUPOWER_CAP_AMD_PSTATE)
+               amd_pstate_show_perf_and_freq(cpu, no_rounding);
+
+       return 0;
+}
+
 static void debug_output_one(unsigned int cpu)
 {
        struct cpufreq_available_frequencies *freqs;
@@ -466,6 +477,7 @@ static void debug_output_one(unsigned int cpu)
        if (get_freq_hardware(cpu, 1) < 0)
                get_freq_kernel(cpu, 1);
        get_boost_mode(cpu);
+       get_perf_cap(cpu);
 }
 
 static struct option info_opts[] = {
@@ -484,6 +496,7 @@ static struct option info_opts[] = {
        {"proc",         no_argument,            NULL,   'o'},
        {"human",        no_argument,            NULL,   'm'},
        {"no-rounding", no_argument,     NULL,   'n'},
+       {"performance", no_argument,     NULL,   'c'},
        { },
 };
 
@@ -497,7 +510,7 @@ int cmd_freq_info(int argc, char **argv)
        int output_param = 0;
 
        do {
-               ret = getopt_long(argc, argv, "oefwldpgrasmybn", info_opts,
+               ret = getopt_long(argc, argv, "oefwldpgrasmybnc", info_opts,
                                  NULL);
                switch (ret) {
                case '?':
@@ -520,6 +533,7 @@ int cmd_freq_info(int argc, char **argv)
                case 'e':
                case 's':
                case 'y':
+               case 'c':
                        if (output_param) {
                                output_param = -1;
                                cont = 0;
@@ -626,6 +640,9 @@ int cmd_freq_info(int argc, char **argv)
                case 'y':
                        ret = get_latency(cpu, human);
                        break;
+               case 'c':
+                       ret = get_perf_cap(cpu);
+                       break;
                }
                if (ret)
                        return ret;