Re: [Powertop] [PATCH v3 29/31] tunables: removed on-demand cpu frequency governor

Sergey Senozhatsky <sergey.senozhatsky at gmail.com>
Newsgroups dev.linux.lists.powertop
Message-ID <20131210202752.GE2422@swordfish>
On (11/18/13 12:27), Alexandra Yates wrote:
> Remove suggestion to use the on-demand cpu frequency governor from
> PowerTOP tunables as that is no longer a good suggestion since the
> P-State driver is the Intel recommended replacement.

I need to think about it.

IIRC, in this email
https://lists.01.org/pipermail/powertop/2013-September/000952.html

Christian Krause wrote:

>
>tunables show:
>
>    Bad           Using 'ondemand' cpufreq governor
>
>but: I don't have a ondemand cpufreq governor -- that is what I just found out: since some kernel
>versions ago the intel_pstate driver is the default for my cpu:
>
>    # zgrep PSTATE /proc/config.gz
>    CONFIG_X86_INTEL_PSTATE=y
>
>    # cat /sys/devices/system/cpu/cpu[0-9]*/cpufreq/scaling_driver
>    intel_pstate
>    intel_pstate
>    intel_pstate
>    intel_pstate
>



I'm not really sure why we delete cpufreq code and kill this feature.



for example:

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
ondemand performance

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
performance



powertop can help here


	-ss


> Signed-off-by: Alexandra Yates <alexandra.yates(a)linux.intel.com>
> ---
>  src/Makefile.am        |    4 +-
>  src/tuning/cpufreq.cpp |  213 ------------------------------------------------
>  src/tuning/cpufreq.h   |   50 ------------
>  src/tuning/tuning.cpp  |    2 -
>  4 files changed, 2 insertions(+), 267 deletions(-)
>  delete mode 100644 src/tuning/cpufreq.cpp
>  delete mode 100644 src/tuning/cpufreq.h
> 
> diff --git a/src/Makefile.am b/src/Makefile.am
> index e19b606..0fe3c04 100644
> --- a/src/Makefile.am
> +++ b/src/Makefile.am
> @@ -18,8 +18,8 @@ powertop_SOURCES = parameters/persistent.cpp parameters/learn.cpp parameters/par
>  		devices/thinkpad-light.cpp devices/ahci.h devices/i915-gpu.h devices/network.h \
>  		devices/rfkill.cpp devices/alsa.h devices/thinkpad-fan.h devices/device.h \
>  		devices/usb.h devices/backlight.h devices/backlight.cpp devices/runtime_pm.h \
> -		devices/thinkpad-light.h devices/network.cpp lib.h tuning tuning/cpufreq.h \
> -		tuning/bluetooth.cpp tuning/cpufreq.cpp tuning/tuning.cpp tuning/tuningusb.cpp \
> +		devices/thinkpad-light.h devices/network.cpp lib.h tuning \
> +		tuning/bluetooth.cpp tuning/tuning.cpp tuning/tuningusb.cpp \
>  		tuning/ethernet.cpp tuning/bluetooth.h tuning/tuning.h tuning/ethernet.h \
>  		tuning/tunable.cpp tuning/nl80211.h tuning/iw.c tuning/wifi.cpp tuning/tuningsysfs.h \
>  		tuning/tuningsysfs.cpp tuning/wifi.h tuning/runtime.cpp tuning/tunable.h \
> diff --git a/src/tuning/cpufreq.cpp b/src/tuning/cpufreq.cpp
> deleted file mode 100644
> index e870559..0000000
> --- a/src/tuning/cpufreq.cpp
> +++ /dev/null
> @@ -1,213 +0,0 @@
> -/*
> - * Copyright 2010, Intel Corporation
> - *
> - * This file is part of PowerTOP
> - *
> - * This program file is free software; you can redistribute it and/or modify it
> - * under the terms of the GNU General Public License as published by the
> - * Free Software Foundation; version 2 of the License.
> - *
> - * This program is distributed in the hope that it will be useful, but WITHOUT
> - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
> - * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
> - * for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program in a file named COPYING; if not, write to the
> - * Free Software Foundation, Inc,
> - * 51 Franklin Street, Fifth Floor,
> - * Boston, MA 02110-1301 USA
> - * or just google for it.
> - *
> - * Authors:
> - *	Arjan van de Ven <arjan(a)linux.intel.com>
> - */
> -
> -#include "tuning.h"
> -#include "tunable.h"
> -#include <unistd.h>
> -#include <stdio.h>
> -#include <stdlib.h>
> -#include <string.h>
> -#include <utility>
> -#include <iostream>
> -#include <fstream>
> -#include <unistd.h>
> -#include <dirent.h>
> -#include <errno.h>
> -#include <sys/stat.h>
> -#include <ctype.h>
> -
> -#include "../lib.h"
> -#include "cpufreq.h"
> -
> -cpufreq_tunable::cpufreq_tunable(void) : tunable("", 0.3, _("Good"), _("Bad"), _("Unknown"))
> -{
> -	string str;
> -	sprintf(desc, _("Using 'ondemand' cpufreq governor"));
> -
> -	str = read_sysfs_string("/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor");
> -	strcpy(original, str.c_str());
> -	if (strlen(original) < 1)
> -		strcpy(original, "ondemand");
> -}
> -
> -
> -int cpufreq_tunable::good_bad(void)
> -{
> -	DIR *dir;
> -	struct dirent *dirent;
> -	FILE *file;
> -	char filename[PATH_MAX];
> -	char line[1024];
> -
> -	char gov[1024];
> -	int ret = TUNE_GOOD;
> -
> -
> -	gov[0] = 0;
> -
> -
> -	dir = opendir("/sys/devices/system/cpu");
> -	if (!dir)
> -		return ret;
> -
> -	while ((dirent = readdir(dir))) {
> -		if (strncmp(dirent->d_name, "cpu", 3) != 0 || !isdigit(dirent->d_name[3]))
> -			continue;
> -		sprintf(filename, "/sys/devices/system/cpu/%s/cpufreq/scaling_governor", dirent->d_name);
> -		file = fopen(filename, "r");
> -		if (!file)
> -			continue;
> -		memset(line, 0, 1024);
> -		if (fgets(line, 1023,file)==NULL) {
> -			fclose(file);
> -			continue;
> -		}
> -		if (strlen(gov)==0)
> -			strcpy(gov, line);
> -		else
> -			/* if the governors are inconsistent, warn */
> -			if (strcmp(gov, line))
> -				ret = TUNE_BAD;
> -		fclose(file);
> -	}
> -
> -	closedir(dir);
> -
> -	/* if the governor is set to userspace, also warn */
> -	if (strstr(gov, "userspace"))
> -		ret = TUNE_BAD;
> -
> -	/* if the governor is set to performance, also warn */
> -	/* FIXME: check if this is fair on all cpus */
> -	if (strstr(gov, "performance"))
> -		ret = TUNE_BAD;
> -
> -	return ret;
> -}
> -
> -void cpufreq_tunable::toggle(void)
> -{
> -	DIR *dir;
> -	struct dirent *dirent;
> -	FILE *file;
> -	char filename[PATH_MAX];
> -	int good;
> -	good = good_bad();
> -
> -	system("/sbin/modprobe cpufreq_ondemand > /dev/null 2>&1");
> -
> -	if (good == TUNE_GOOD) {
> -		dir = opendir("/sys/devices/system/cpu");
> -		if (!dir)
> -			return;
> -
> -		while ((dirent = readdir(dir))) {
> -			if (strncmp(dirent->d_name, "cpu", 3) != 0 || !isdigit(dirent->d_name[3]))
> -				continue;
> -			sprintf(filename, "/sys/devices/system/cpu/%s/cpufreq/scaling_governor", dirent->d_name);
> -			file = fopen(filename, "w");
> -			if (!file)
> -				continue;
> -			fprintf(file, "%s\n", original);
> -			fclose(file);
> -		}
> -
> -		closedir(dir);
> -		return;
> -	}
> -	dir = opendir("/sys/devices/system/cpu");
> -	if (!dir)
> -		return;
> -
> -	while ((dirent = readdir(dir))) {
> -		if (strncmp(dirent->d_name, "cpu", 3) != 0 || !isdigit(dirent->d_name[3]))
> -			continue;
> -		sprintf(filename, "/sys/devices/system/cpu/%s/cpufreq/scaling_governor", dirent->d_name);
> -		file = fopen(filename, "w");
> -		if (!file)
> -			continue;
> -		fprintf(file, "ondemand\n");
> -		fclose(file);
> -	}
> -
> -	closedir(dir);
> -}
> -
> -const char *cpufreq_tunable::toggle_script(void) {
> -	DIR *dir;
> -	struct dirent *dirent;
> -	char filename[PATH_MAX];
> -	char tmp[4096];
> -	struct stat statbuf;
> -	int good;
> -	good = good_bad();
> -
> -	strcpy(toggle_good, "/sbin/modprobe cpufreq_ondemand > /dev/null 2>&1\n");
> -
> -	if (good == TUNE_GOOD) {
> -		dir = opendir("/sys/devices/system/cpu");
> -		if (!dir)
> -			return NULL;
> -
> -		while ((dirent = readdir(dir))) {
> -			if (strncmp(dirent->d_name, "cpu", 3) != 0 || !isdigit(dirent->d_name[3]))
> -				continue;
> -			sprintf(filename, "/sys/devices/system/cpu/%s/cpufreq/scaling_governor", dirent->d_name);
> -			if (stat(filename, &statbuf) == -1)
> -				continue;
> -			sprintf(tmp, "echo '%s' > '%s';\n", original, filename);
> -			strcat(toggle_good, tmp);
> -		}
> -
> -		closedir(dir);
> -		return toggle_good;
> -	}
> -
> -	dir = opendir("/sys/devices/system/cpu");
> -	if (!dir)
> -		return NULL;
> -
> -	while ((dirent = readdir(dir))) {
> -		if (strncmp(dirent->d_name, "cpu", 3) != 0 || !isdigit(dirent->d_name[3]))
> -			continue;
> -		sprintf(filename, "/sys/devices/system/cpu/%s/cpufreq/scaling_governor", dirent->d_name);
> -		if (stat(filename, &statbuf) == -1)
> -			continue;
> -		sprintf(tmp, "echo 'ondemand' > '%s';\n", filename);
> -		strcat(toggle_good, tmp);
> -	}
> -
> -	closedir(dir);
> -	return toggle_good;
> -}
> -
> -
> -void add_cpufreq_tunable(void)
> -{
> -	class cpufreq_tunable *cf;
> -
> -	cf = new class cpufreq_tunable();
> -	all_tunables.push_back(cf);
> -}
> diff --git a/src/tuning/cpufreq.h b/src/tuning/cpufreq.h
> deleted file mode 100644
> index 983f813..0000000
> --- a/src/tuning/cpufreq.h
> +++ /dev/null
> @@ -1,50 +0,0 @@
> -/*
> - * Copyright 2010, Intel Corporation
> - *
> - * This file is part of PowerTOP
> - *
> - * This program file is free software; you can redistribute it and/or modify it
> - * under the terms of the GNU General Public License as published by the
> - * Free Software Foundation; version 2 of the License.
> - *
> - * This program is distributed in the hope that it will be useful, but WITHOUT
> - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
> - * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
> - * for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program in a file named COPYING; if not, write to the
> - * Free Software Foundation, Inc,
> - * 51 Franklin Street, Fifth Floor,
> - * Boston, MA 02110-1301 USA
> - * or just google for it.
> - *
> - * Authors:
> - *	Arjan van de Ven <arjan(a)linux.intel.com>
> - */
> -#ifndef _INCLUDE_GUARD_CPUFREQ_TUNE_H
> -#define _INCLUDE_GUARD_CPUFREQ_TUNE_H
> -
> -#include <vector>
> -
> -#include "tunable.h"
> -
> -using namespace std;
> -
> -class cpufreq_tunable : public tunable {
> -	char original[4096];
> -public:
> -	cpufreq_tunable(void);
> -
> -	virtual int good_bad(void);
> -
> -	virtual void toggle(void);
> -
> -	virtual const char *toggle_script(void);
> -
> -};
> -
> -extern void add_cpufreq_tunable(void);
> -
> -
> -#endif
> diff --git a/src/tuning/tuning.cpp b/src/tuning/tuning.cpp
> index 67d604f..ec7d2ad 100644
> --- a/src/tuning/tuning.cpp
> +++ b/src/tuning/tuning.cpp
> @@ -35,7 +35,6 @@
>  #include "tuningusb.h"
>  #include "runtime.h"
>  #include "bluetooth.h"
> -#include "cpufreq.h"
>  #include "ethernet.h"
>  #include "wifi.h"
>  #include "../display.h"
> @@ -67,7 +66,6 @@ static void init_tuning(void)
>  	add_ethernet_tunable();
>  	add_bt_tunable();
>  	add_wifi_tunables();
> -	add_cpufreq_tunable();
>  
>  	sort_tunables();
>  }
> -- 
> 1.7.9.5
> 
> _______________________________________________
> PowerTop mailing list
> PowerTop(a)lists.01.org
> https://lists.01.org/mailman/listinfo/powertop
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.