From b04de734218ceb1b1c4d04196d69eb77a72f42fbceea83ffc83efba506b6dbb2 Mon Sep 17 00:00:00 2001 From: Thomas Renninger Date: Wed, 28 Jan 2015 17:16:02 +0000 Subject: [PATCH] - Update cpupower and turbostat to latest git kernel HEAD version this currently is 3.19-rc6, but it is expected that there are no changes anymore and the version gets named 3.19 already. The patches are already included mainline and get removed from osc: cpupower_disable_by_latency.patch add_idle_manpages_in_Makefile.patch cpupower-always_try_to_load_msr_driver_as_root.patch cpupower-return_zero_on_success.patch cpupower-remove_mc_scheduler_bits.patch OBS-URL: https://build.opensuse.org/package/show/hardware/cpupower?expand=0&rev=46 --- add_idle_manpages_in_Makefile.patch | 13 - cpupower-3.13.tar.bz2 | 3 - cpupower-3.19.tar.bz2 | 3 + ...lways_try_to_load_msr_driver_as_root.patch | 43 ---- cpupower-remove_mc_scheduler_bits.patch | 234 ------------------ cpupower-return_zero_on_success.patch | 23 -- cpupower.changes | 13 + cpupower.spec | 17 +- cpupower_disable_by_latency.patch | 143 ----------- turbostat-3.17.tar.bz2 | 3 - turbostat-3.19.tar.bz2 | 3 + 11 files changed, 22 insertions(+), 476 deletions(-) delete mode 100644 add_idle_manpages_in_Makefile.patch delete mode 100644 cpupower-3.13.tar.bz2 create mode 100644 cpupower-3.19.tar.bz2 delete mode 100644 cpupower-always_try_to_load_msr_driver_as_root.patch delete mode 100644 cpupower-remove_mc_scheduler_bits.patch delete mode 100644 cpupower-return_zero_on_success.patch delete mode 100644 cpupower_disable_by_latency.patch delete mode 100644 turbostat-3.17.tar.bz2 create mode 100644 turbostat-3.19.tar.bz2 diff --git a/add_idle_manpages_in_Makefile.patch b/add_idle_manpages_in_Makefile.patch deleted file mode 100644 index 307e6e2..0000000 --- a/add_idle_manpages_in_Makefile.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: cpupower-3.13/Makefile -=================================================================== ---- cpupower-3.13.orig/Makefile -+++ cpupower-3.13/Makefile -@@ -274,6 +274,8 @@ install-man: - $(INSTALL_DATA) -D man/cpupower.1 $(DESTDIR)${mandir}/man1/cpupower.1 - $(INSTALL_DATA) -D man/cpupower-frequency-set.1 $(DESTDIR)${mandir}/man1/cpupower-frequency-set.1 - $(INSTALL_DATA) -D man/cpupower-frequency-info.1 $(DESTDIR)${mandir}/man1/cpupower-frequency-info.1 -+ $(INSTALL_DATA) -D man/cpupower-idle-set.1 $(DESTDIR)${mandir}/man1/cpupower-idle-set.1 -+ $(INSTALL_DATA) -D man/cpupower-idle-info.1 $(DESTDIR)${mandir}/man1/cpupower-idle-info.1 - $(INSTALL_DATA) -D man/cpupower-set.1 $(DESTDIR)${mandir}/man1/cpupower-set.1 - $(INSTALL_DATA) -D man/cpupower-info.1 $(DESTDIR)${mandir}/man1/cpupower-info.1 - $(INSTALL_DATA) -D man/cpupower-monitor.1 $(DESTDIR)${mandir}/man1/cpupower-monitor.1 diff --git a/cpupower-3.13.tar.bz2 b/cpupower-3.13.tar.bz2 deleted file mode 100644 index c348f20..0000000 --- a/cpupower-3.13.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e57739b412027a105539f8294b0972597858862722cae315152f4c22e014dc88 -size 70424 diff --git a/cpupower-3.19.tar.bz2 b/cpupower-3.19.tar.bz2 new file mode 100644 index 0000000..8bbee6a --- /dev/null +++ b/cpupower-3.19.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc866551e33bca8b6c2398335d93ed3e0db7487566b873197bf68a104c14ef81 +size 70536 diff --git a/cpupower-always_try_to_load_msr_driver_as_root.patch b/cpupower-always_try_to_load_msr_driver_as_root.patch deleted file mode 100644 index 03c4d1c..0000000 --- a/cpupower-always_try_to_load_msr_driver_as_root.patch +++ /dev/null @@ -1,43 +0,0 @@ -cpupower: If root, try to load msr driver on x86 if /dev/cpu/0/msr is not avail - -Signed-off-by: Thomas Renninger - -diff --git a/utils/cpupower.c b/utils/cpupower.c -index 7efc570..7cdcf88 100644 ---- a/utils/cpupower.c -+++ b/utils/cpupower.c -@@ -12,6 +12,9 @@ - #include - #include - #include -+#include -+#include -+#include - - #include "builtin.h" - #include "helpers/helpers.h" -@@ -169,6 +172,8 @@ int main(int argc, const char *argv[]) - { - const char *cmd; - unsigned int i, ret; -+ struct stat statbuf; -+ struct utsname uts; - - cpus_chosen = bitmask_alloc(sysconf(_SC_NPROCESSORS_CONF)); - -@@ -195,6 +200,15 @@ int main(int argc, const char *argv[]) - - get_cpu_info(0, &cpupower_cpu_info); - run_as_root = !getuid(); -+ if (run_as_root) { -+ ret = uname(&uts); -+ if (!ret && !strcmp(uts.machine, "x86_64") && -+ stat("/dev/cpu/0/msr", &statbuf) != 0) { -+ if (system("modprobe msr") == -1) -+ fprintf(stderr, _("MSR access not available.\n")); -+ } -+ } -+ - - for (i = 0; i < ARRAY_SIZE(commands); i++) { - struct cmd_struct *p = commands + i; diff --git a/cpupower-remove_mc_scheduler_bits.patch b/cpupower-remove_mc_scheduler_bits.patch deleted file mode 100644 index 2702ae9..0000000 --- a/cpupower-remove_mc_scheduler_bits.patch +++ /dev/null @@ -1,234 +0,0 @@ -cpupower: Remove mc and smt power aware scheduler info/settings - -These kernel interfaces got removed by: -commit 8e7fbcbc22c12414bcc9dfdd683637f58fb32759 -Author: Peter Zijlstra -Date: Mon Jan 9 11:28:35 2012 +0100 - - sched: Remove stale power aware scheduling remnants and dysfunctional knobs - -No need to further keep them as userspace configurations. - -Signed-off-by: Thomas Renninger - -diff --git a/tools/power/cpupower/man/cpupower-info.1 b/tools/power/cpupower/man/cpupower-info.1 -index 58e2119..340bcd0 100644 ---- a/tools/power/cpupower/man/cpupower-info.1 -+++ b/tools/power/cpupower/man/cpupower-info.1 -@@ -3,7 +3,7 @@ - cpupower\-info \- Shows processor power related kernel or hardware configurations - .SH SYNOPSIS - .ft B --.B cpupower info [ \-b ] [ \-s ] [ \-m ] -+.B cpupower info [ \-b ] - - .SH DESCRIPTION - \fBcpupower info \fP shows kernel configurations or processor hardware -diff --git a/tools/power/cpupower/man/cpupower-set.1 b/tools/power/cpupower/man/cpupower-set.1 -index 9dbd536..2bcc696 100644 ---- a/tools/power/cpupower/man/cpupower-set.1 -+++ b/tools/power/cpupower/man/cpupower-set.1 -@@ -3,7 +3,7 @@ - cpupower\-set \- Set processor power related kernel or hardware configurations - .SH SYNOPSIS - .ft B --.B cpupower set [ \-b VAL ] [ \-s VAL ] [ \-m VAL ] -+.B cpupower set [ \-b VAL ] - - - .SH DESCRIPTION -@@ -55,35 +55,6 @@ Use \fBcpupower -c all info -b\fP to verify. - - This options needs the msr kernel driver (CONFIG_X86_MSR) loaded. - .RE --.PP --\-\-sched\-mc, \-m [ VAL ] --.RE --\-\-sched\-smt, \-s [ VAL ] --.RS 4 --\-\-sched\-mc utilizes cores in one processor package/socket first before --processes are scheduled to other processor packages/sockets. -- --\-\-sched\-smt utilizes thread siblings of one processor core first before --processes are scheduled to other cores. -- --The impact on power consumption and performance (positiv or negativ) heavily --depends on processor support for deep sleep states, frequency scaling and --frequency boost modes and their dependencies between other thread siblings --and processor cores. -- --Taken over from kernel documentation: -- --Adjust the kernel's multi-core scheduler support. -- --Possible values are: --.RS 2 --0 - No power saving load balance (default value) -- --1 - Fill one thread/core/package first for long running threads -- --2 - Also bias task wakeups to semi-idle cpu package for power --savings --.RE - - .SH "SEE ALSO" - cpupower-info(1), cpupower-monitor(1), powertop(1) -diff --git a/tools/power/cpupower/utils/cpupower-info.c b/tools/power/cpupower/utils/cpupower-info.c -index 0ac2577..136d979 100644 ---- a/tools/power/cpupower/utils/cpupower-info.c -+++ b/tools/power/cpupower/utils/cpupower-info.c -@@ -18,8 +18,6 @@ - - static struct option set_opts[] = { - { .name = "perf-bias", .has_arg = optional_argument, .flag = NULL, .val = 'b'}, -- { .name = "sched-mc", .has_arg = optional_argument, .flag = NULL, .val = 'm'}, -- { .name = "sched-smt", .has_arg = optional_argument, .flag = NULL, .val = 's'}, - { }, - }; - -@@ -37,8 +35,6 @@ int cmd_info(int argc, char **argv) - - union { - struct { -- int sched_mc:1; -- int sched_smt:1; - int perf_bias:1; - }; - int params; -@@ -49,23 +45,13 @@ int cmd_info(int argc, char **argv) - textdomain(PACKAGE); - - /* parameter parsing */ -- while ((ret = getopt_long(argc, argv, "msb", set_opts, NULL)) != -1) { -+ while ((ret = getopt_long(argc, argv, "b", set_opts, NULL)) != -1) { - switch (ret) { - case 'b': - if (params.perf_bias) - print_wrong_arg_exit(); - params.perf_bias = 1; - break; -- case 'm': -- if (params.sched_mc) -- print_wrong_arg_exit(); -- params.sched_mc = 1; -- break; -- case 's': -- if (params.sched_smt) -- print_wrong_arg_exit(); -- params.sched_smt = 1; -- break; - default: - print_wrong_arg_exit(); - } -@@ -78,25 +64,6 @@ int cmd_info(int argc, char **argv) - if (bitmask_isallclear(cpus_chosen)) - bitmask_setbit(cpus_chosen, 0); - -- if (params.sched_mc) { -- ret = sysfs_get_sched("mc"); -- printf(_("System's multi core scheduler setting: ")); -- if (ret < 0) -- /* if sysfs file is missing it's: errno == ENOENT */ -- printf(_("not supported\n")); -- else -- printf("%d\n", ret); -- } -- if (params.sched_smt) { -- ret = sysfs_get_sched("smt"); -- printf(_("System's thread sibling scheduler setting: ")); -- if (ret < 0) -- /* if sysfs file is missing it's: errno == ENOENT */ -- printf(_("not supported\n")); -- else -- printf("%d\n", ret); -- } -- - /* Add more per cpu options here */ - if (!params.perf_bias) - return ret; -diff --git a/tools/power/cpupower/utils/cpupower-set.c b/tools/power/cpupower/utils/cpupower-set.c -index bcf1d2f..573c75f 100644 ---- a/tools/power/cpupower/utils/cpupower-set.c -+++ b/tools/power/cpupower/utils/cpupower-set.c -@@ -19,8 +19,6 @@ - - static struct option set_opts[] = { - { .name = "perf-bias", .has_arg = required_argument, .flag = NULL, .val = 'b'}, -- { .name = "sched-mc", .has_arg = required_argument, .flag = NULL, .val = 'm'}, -- { .name = "sched-smt", .has_arg = required_argument, .flag = NULL, .val = 's'}, - { }, - }; - -@@ -38,13 +36,11 @@ int cmd_set(int argc, char **argv) - - union { - struct { -- int sched_mc:1; -- int sched_smt:1; - int perf_bias:1; - }; - int params; - } params; -- int sched_mc = 0, sched_smt = 0, perf_bias = 0; -+ int perf_bias = 0; - int ret = 0; - - setlocale(LC_ALL, ""); -@@ -52,7 +48,7 @@ int cmd_set(int argc, char **argv) - - params.params = 0; - /* parameter parsing */ -- while ((ret = getopt_long(argc, argv, "m:s:b:", -+ while ((ret = getopt_long(argc, argv, "b:", - set_opts, NULL)) != -1) { - switch (ret) { - case 'b': -@@ -66,28 +62,6 @@ int cmd_set(int argc, char **argv) - } - params.perf_bias = 1; - break; -- case 'm': -- if (params.sched_mc) -- print_wrong_arg_exit(); -- sched_mc = atoi(optarg); -- if (sched_mc < 0 || sched_mc > 2) { -- printf(_("--sched-mc param out " -- "of range [0-%d]\n"), 2); -- print_wrong_arg_exit(); -- } -- params.sched_mc = 1; -- break; -- case 's': -- if (params.sched_smt) -- print_wrong_arg_exit(); -- sched_smt = atoi(optarg); -- if (sched_smt < 0 || sched_smt > 2) { -- printf(_("--sched-smt param out " -- "of range [0-%d]\n"), 2); -- print_wrong_arg_exit(); -- } -- params.sched_smt = 1; -- break; - default: - print_wrong_arg_exit(); - } -@@ -96,19 +70,6 @@ int cmd_set(int argc, char **argv) - if (!params.params) - print_wrong_arg_exit(); - -- if (params.sched_mc) { -- ret = sysfs_set_sched("mc", sched_mc); -- if (ret) -- fprintf(stderr, _("Error setting sched-mc %s\n"), -- (ret == -ENODEV) ? "not supported" : ""); -- } -- if (params.sched_smt) { -- ret = sysfs_set_sched("smt", sched_smt); -- if (ret) -- fprintf(stderr, _("Error setting sched-smt %s\n"), -- (ret == -ENODEV) ? "not supported" : ""); -- } -- - /* Default is: set all CPUs */ - if (bitmask_isallclear(cpus_chosen)) - bitmask_setall(cpus_chosen); diff --git a/cpupower-return_zero_on_success.patch b/cpupower-return_zero_on_success.patch deleted file mode 100644 index 9f17c71..0000000 --- a/cpupower-return_zero_on_success.patch +++ /dev/null @@ -1,23 +0,0 @@ -cpupower: cpupower info -b should return 0 on success, not the perf bias value - -Signed-off-by: Thomas Renninger - -diff --git a/utils/cpupower-info.c b/utils/cpupower-info.c -index 3f68632..3e27975 100644 ---- a/utils/cpupower-info.c -+++ b/utils/cpupower-info.c -@@ -125,11 +125,11 @@ int cmd_info(int argc, char **argv) - if (params.perf_bias) { - ret = msr_intel_get_perf_bias(cpu); - if (ret < 0) { -- printf(_("Could not read perf-bias value\n")); -- break; -+ printf(_("Could not read perf-bias value[%d]\n"), ret); -+ exit(EXIT_FAILURE); - } else - printf(_("perf-bias: %d\n"), ret); - } - } -- return ret; -+ return 0; - } diff --git a/cpupower.changes b/cpupower.changes index 205e6ce..9ad564f 100644 --- a/cpupower.changes +++ b/cpupower.changes @@ -1,3 +1,16 @@ +------------------------------------------------------------------- +Wed Jan 28 17:11:07 UTC 2015 - trenn@suse.de + +- Update cpupower and turbostat to latest git kernel HEAD version + this currently is 3.19-rc6, but it is expected that there are no + changes anymore and the version gets named 3.19 already. + The patches are already included mainline and get removed from osc: + cpupower_disable_by_latency.patch + add_idle_manpages_in_Makefile.patch + cpupower-always_try_to_load_msr_driver_as_root.patch + cpupower-return_zero_on_success.patch + cpupower-remove_mc_scheduler_bits.patch + ------------------------------------------------------------------- Wed Aug 13 13:06:27 UTC 2014 - trenn@suse.de diff --git a/cpupower.spec b/cpupower.spec index d04a869..4b75510 100644 --- a/cpupower.spec +++ b/cpupower.spec @@ -1,7 +1,7 @@ # # spec file for package cpupower # -# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany. # Author: Thomas Renninger # # All modifications and additions to the file contributed by third parties @@ -17,25 +17,19 @@ # - Name: cpupower Url: http://www.kernel.org/pub/linux/utils/kernel/cpufreq/cpufrequtils.html # Use this as version when things are in mainline kernel %define version %(rpm -q --qf '%{VERSION}' kernel-source) -Version: 3.13 +Version: 3.19 Release: 0 -%define tsversion 3.17 +%define tsversion 3.19 Summary: Tools to determine and set CPU Power related Settings License: GPL-2.0 Group: System/Base Source: %{name}-%{version}.tar.bz2 Source1: turbostat-%{tsversion}.tar.bz2 Source2: cpupower_export_tarball_from_git.sh -Patch1: cpupower_disable_by_latency.patch -Patch2: add_idle_manpages_in_Makefile.patch -Patch3: cpupower-always_try_to_load_msr_driver_as_root.patch -Patch4: cpupower-return_zero_on_success.patch -Patch5: cpupower-remove_mc_scheduler_bits.patch Patch20: turbostat_fix_man_perm.patch Patch21: make_header_file_passable_from_outside.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -82,11 +76,6 @@ powersave module. %prep %setup -D -b 1 -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p4 cd ../turbostat-%{tsversion} %patch20 -p1 %patch21 -p1 diff --git a/cpupower_disable_by_latency.patch b/cpupower_disable_by_latency.patch deleted file mode 100644 index 7578b16..0000000 --- a/cpupower_disable_by_latency.patch +++ /dev/null @@ -1,143 +0,0 @@ -cpupower: Introduce idle state disable-by-latency and enable-all - -Signed-off-by: Thomas Renninger - -diff --git a/man/cpupower-idle-set.1 b/man/cpupower-idle-set.1 -index 6b16072..1de0bd9 100644 ---- a/man/cpupower-idle-set.1 -+++ b/man/cpupower-idle-set.1 -@@ -13,11 +13,15 @@ sleep states. This can be handy for power vs performance tuning. - .SH "OPTIONS" - .LP - .TP --\fB\-d\fR \fB\-\-disable\fR -+\fB\-d\fR \fB\-\-disable\fR - Disable a specific processor sleep state. - .TP --\fB\-e\fR \fB\-\-enable\fR -+\fB\-e\fR \fB\-\-enable\fR - Enable a specific processor sleep state. -+\fB\-D\fR \fB\-\-disable-by-latency\fR -+Disable all idle states with a equal or higher latency than -+\fB\-E\fR \fB\-\-enable-all\fR -+Enable all idle states if not enabled already. - - .SH "REMARKS" - .LP -diff --git a/utils/cpuidle-set.c b/utils/cpuidle-set.c -index c78141c..d45d8d7 100644 ---- a/utils/cpuidle-set.c -+++ b/utils/cpuidle-set.c -@@ -13,8 +13,14 @@ - #include "helpers/sysfs.h" - - static struct option info_opts[] = { -- { .name = "disable", .has_arg = required_argument, .flag = NULL, .val = 'd'}, -- { .name = "enable", .has_arg = required_argument, .flag = NULL, .val = 'e'}, -+ { .name = "disable", -+ .has_arg = required_argument, .flag = NULL, .val = 'd'}, -+ { .name = "enable", -+ .has_arg = required_argument, .flag = NULL, .val = 'e'}, -+ { .name = "disable-by-latency", -+ .has_arg = required_argument, .flag = NULL, .val = 'D'}, -+ { .name = "enable-all", -+ .has_arg = no_argument, .flag = NULL, .val = 'E'}, - { }, - }; - -@@ -23,11 +29,13 @@ int cmd_idle_set(int argc, char **argv) - { - extern char *optarg; - extern int optind, opterr, optopt; -- int ret = 0, cont = 1, param = 0, idlestate = 0; -- unsigned int cpu = 0; -+ int ret = 0, cont = 1, param = 0, disabled; -+ unsigned long long latency = 0, state_latency; -+ unsigned int cpu = 0, idlestate = 0, idlestates = 0; -+ char *endptr; - - do { -- ret = getopt_long(argc, argv, "d:e:", info_opts, NULL); -+ ret = getopt_long(argc, argv, "d:e:ED:", info_opts, NULL); - if (ret == -1) - break; - switch (ret) { -@@ -53,6 +61,27 @@ int cmd_idle_set(int argc, char **argv) - param = ret; - idlestate = atoi(optarg); - break; -+ case 'D': -+ if (param) { -+ param = -1; -+ cont = 0; -+ break; -+ } -+ param = ret; -+ latency = strtoull(optarg, &endptr, 10); -+ if (*endptr != '\0') { -+ printf(_("Bad latency value: %s\n"), optarg); -+ exit(EXIT_FAILURE); -+ } -+ break; -+ case 'E': -+ if (param) { -+ param = -1; -+ cont = 0; -+ break; -+ } -+ param = ret; -+ break; - case -1: - cont = 0; - break; -@@ -79,8 +108,14 @@ int cmd_idle_set(int argc, char **argv) - if (!bitmask_isbitset(cpus_chosen, cpu)) - continue; - -- switch (param) { -+ if (sysfs_is_cpu_online(cpu) != 1) -+ continue; -+ -+ idlestates = sysfs_get_idlestate_count(cpu); -+ if (idlestates <= 0) -+ continue; - -+ switch (param) { - case 'd': - ret = sysfs_idlestate_disable(cpu, idlestate, 1); - if (ret == 0) -@@ -107,6 +142,34 @@ int cmd_idle_set(int argc, char **argv) - printf(_("Idlestate %u not enabled on CPU %u\n"), - idlestate, cpu); - break; -+ case 'D': -+ for (idlestate = 0; idlestate < idlestates; idlestate++) { -+ disabled = sysfs_is_idlestate_disabled -+ (cpu, idlestate); -+ state_latency = sysfs_get_idlestate_latency -+ (cpu, idlestate); -+ printf("CPU: %u - idlestate %u - state_latency: %llu - latency: %llu\n", -+ cpu, idlestate, state_latency, latency); -+ if (disabled == 1 || latency > state_latency) -+ continue; -+ ret = sysfs_idlestate_disable -+ (cpu, idlestate, 1); -+ if (ret == 0) -+ printf(_("Idlestate %u disabled on CPU %u\n"), idlestate, cpu); -+ } -+ break; -+ case 'E': -+ for (idlestate = 0; idlestate < idlestates; idlestate++) { -+ disabled = sysfs_is_idlestate_disabled -+ (cpu, idlestate); -+ if (disabled == 1) { -+ ret = sysfs_idlestate_disable -+ (cpu, idlestate, 0); -+ if (ret == 0) -+ printf(_("Idlestate %u enabled on CPU %u\n"), idlestate, cpu); -+ } -+ } -+ break; - default: - /* Not reachable with proper args checking */ - printf(_("Invalid or unknown argument\n")); diff --git a/turbostat-3.17.tar.bz2 b/turbostat-3.17.tar.bz2 deleted file mode 100644 index ecffeb4..0000000 --- a/turbostat-3.17.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4f59526debcd30d97130f6b8d247908110a82bff60eb776e513ac998b70304da -size 21640 diff --git a/turbostat-3.19.tar.bz2 b/turbostat-3.19.tar.bz2 new file mode 100644 index 0000000..fbdb985 --- /dev/null +++ b/turbostat-3.19.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13609c4d8776f9c7dbea10a5cfe46471762b4631a67722d8f1aabcff8658f163 +size 17070