Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'linux-cpupower-6.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux

Pull cpupower utility updates for 6.2-rc1 from Shuah Khan:

"This cpupower update for Linux 6.2-rc1 consists of:

- enhancement to choose base_cpu to display default cpupower details
instead of picking cpu 0 and failing show information when it is
offline. This change ensure user will see power information on
the cpu the tool runs on.
- adds Georgian translation to cpupower documentation.
- introduces powercap intel-rapl library, powercap-info command, and
rapl monitor. This adds the ability to show the used power consumption
in for each rapl domain"

* tag 'linux-cpupower-6.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux:
cpupower: rapl monitor - shows the used power consumption in uj for each rapl domain
cpupower: Introduce powercap intel-rapl library and powercap-info command
cpupower: Add Georgian translation
tools/cpupower: Choose base_cpu to display default cpupower details

+1642 -13
+11 -4
tools/power/cpupower/Makefile
··· 131 131 utils/idle_monitor/hsw_ext_idle.o \ 132 132 utils/idle_monitor/amd_fam14h_idle.o utils/idle_monitor/cpuidle_sysfs.o \ 133 133 utils/idle_monitor/mperf_monitor.o utils/idle_monitor/cpupower-monitor.o \ 134 + utils/idle_monitor/rapl_monitor.o \ 134 135 utils/cpupower.o utils/cpufreq-info.o utils/cpufreq-set.o \ 135 136 utils/cpupower-set.o utils/cpupower-info.o utils/cpuidle-info.o \ 136 - utils/cpuidle-set.o 137 + utils/cpuidle-set.o utils/powercap-info.o 137 138 138 139 UTIL_SRC := $(UTIL_OBJS:.o=.c) 139 140 ··· 144 143 utils/helpers/bitmask.h \ 145 144 utils/idle_monitor/idle_monitors.h utils/idle_monitor/idle_monitors.def 146 145 147 - LIB_HEADERS = lib/cpufreq.h lib/cpupower.h lib/cpuidle.h lib/acpi_cppc.h 148 - LIB_SRC = lib/cpufreq.c lib/cpupower.c lib/cpuidle.c lib/acpi_cppc.c 149 - LIB_OBJS = lib/cpufreq.o lib/cpupower.o lib/cpuidle.o lib/acpi_cppc.o 146 + LIB_HEADERS = lib/cpufreq.h lib/cpupower.h lib/cpuidle.h lib/acpi_cppc.h \ 147 + lib/powercap.h 148 + LIB_SRC = lib/cpufreq.c lib/cpupower.c lib/cpuidle.c lib/acpi_cppc.c \ 149 + lib/powercap.c 150 + LIB_OBJS = lib/cpufreq.o lib/cpupower.o lib/cpuidle.o lib/acpi_cppc.o \ 151 + lib/powercap.o 150 152 LIB_OBJS := $(addprefix $(OUTPUT),$(LIB_OBJS)) 151 153 152 154 override CFLAGS += -pipe ··· 280 276 $(INSTALL) -d $(DESTDIR)${includedir} 281 277 $(INSTALL_DATA) lib/cpufreq.h $(DESTDIR)${includedir}/cpufreq.h 282 278 $(INSTALL_DATA) lib/cpuidle.h $(DESTDIR)${includedir}/cpuidle.h 279 + $(INSTALL_DATA) lib/powercap.h $(DESTDIR)${includedir}/powercap.h 283 280 284 281 install-tools: $(OUTPUT)cpupower 285 282 $(INSTALL) -d $(DESTDIR)${bindir} ··· 297 292 $(INSTALL_DATA) -D man/cpupower-set.1 $(DESTDIR)${mandir}/man1/cpupower-set.1 298 293 $(INSTALL_DATA) -D man/cpupower-info.1 $(DESTDIR)${mandir}/man1/cpupower-info.1 299 294 $(INSTALL_DATA) -D man/cpupower-monitor.1 $(DESTDIR)${mandir}/man1/cpupower-monitor.1 295 + $(INSTALL_DATA) -D man/cpupower-powercap-info.1 $(DESTDIR)${mandir}/man1/cpupower-powercap-info.1 300 296 301 297 install-gmo: create-gmo 302 298 $(INSTALL) -d $(DESTDIR)${localedir} ··· 327 321 - rm -f $(DESTDIR)${mandir}/man1/cpupower-set.1 328 322 - rm -f $(DESTDIR)${mandir}/man1/cpupower-info.1 329 323 - rm -f $(DESTDIR)${mandir}/man1/cpupower-monitor.1 324 + - rm -f $(DESTDIR)${mandir}/man1/cpupower-powercap-info.1 330 325 - for HLANG in $(LANGUAGES); do \ 331 326 rm -f $(DESTDIR)${localedir}/$$HLANG/LC_MESSAGES/cpupower.mo; \ 332 327 done;
+290
tools/power/cpupower/lib/powercap.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* 3 + * (C) 2016 SUSE Software Solutions GmbH 4 + * Thomas Renninger <trenn@suse.de> 5 + */ 6 + 7 + #include <sys/types.h> 8 + #include <sys/stat.h> 9 + #include <unistd.h> 10 + #include <stdlib.h> 11 + #include <string.h> 12 + #include <fcntl.h> 13 + #include <stdio.h> 14 + #include <dirent.h> 15 + 16 + #include "powercap.h" 17 + 18 + static unsigned int sysfs_read_file(const char *path, char *buf, size_t buflen) 19 + { 20 + int fd; 21 + ssize_t numread; 22 + 23 + fd = open(path, O_RDONLY); 24 + if (fd == -1) 25 + return 0; 26 + 27 + numread = read(fd, buf, buflen - 1); 28 + if (numread < 1) { 29 + close(fd); 30 + return 0; 31 + } 32 + 33 + buf[numread] = '\0'; 34 + close(fd); 35 + 36 + return (unsigned int) numread; 37 + } 38 + 39 + static int sysfs_get_enabled(char *path, int *mode) 40 + { 41 + int fd; 42 + char yes_no; 43 + 44 + *mode = 0; 45 + 46 + fd = open(path, O_RDONLY); 47 + if (fd == -1) 48 + return -1; 49 + 50 + if (read(fd, &yes_no, 1) != 1) { 51 + close(fd); 52 + return -1; 53 + } 54 + 55 + if (yes_no == '1') { 56 + *mode = 1; 57 + return 0; 58 + } else if (yes_no == '0') { 59 + return 0; 60 + } 61 + return -1; 62 + } 63 + 64 + int powercap_get_enabled(int *mode) 65 + { 66 + char path[SYSFS_PATH_MAX] = PATH_TO_POWERCAP "/intel-rapl/enabled"; 67 + 68 + return sysfs_get_enabled(path, mode); 69 + } 70 + 71 + /* 72 + * Hardcoded, because rapl is the only powercap implementation 73 + - * this needs to get more generic if more powercap implementations 74 + * should show up 75 + */ 76 + int powercap_get_driver(char *driver, int buflen) 77 + { 78 + char file[SYSFS_PATH_MAX] = PATH_TO_RAPL; 79 + 80 + struct stat statbuf; 81 + 82 + if (stat(file, &statbuf) != 0 || !S_ISDIR(statbuf.st_mode)) { 83 + driver = ""; 84 + return -1; 85 + } else if (buflen > 10) { 86 + strcpy(driver, "intel-rapl"); 87 + return 0; 88 + } else 89 + return -1; 90 + } 91 + 92 + enum powercap_get64 { 93 + GET_ENERGY_UJ, 94 + GET_MAX_ENERGY_RANGE_UJ, 95 + GET_POWER_UW, 96 + GET_MAX_POWER_RANGE_UW, 97 + MAX_GET_64_FILES 98 + }; 99 + 100 + static const char *powercap_get64_files[MAX_GET_64_FILES] = { 101 + [GET_POWER_UW] = "power_uw", 102 + [GET_MAX_POWER_RANGE_UW] = "max_power_range_uw", 103 + [GET_ENERGY_UJ] = "energy_uj", 104 + [GET_MAX_ENERGY_RANGE_UJ] = "max_energy_range_uj", 105 + }; 106 + 107 + static int sysfs_powercap_get64_val(struct powercap_zone *zone, 108 + enum powercap_get64 which, 109 + uint64_t *val) 110 + { 111 + char file[SYSFS_PATH_MAX] = PATH_TO_POWERCAP "/"; 112 + int ret; 113 + char buf[MAX_LINE_LEN]; 114 + 115 + strcat(file, zone->sys_name); 116 + strcat(file, "/"); 117 + strcat(file, powercap_get64_files[which]); 118 + 119 + ret = sysfs_read_file(file, buf, MAX_LINE_LEN); 120 + if (ret < 0) 121 + return ret; 122 + if (ret == 0) 123 + return -1; 124 + 125 + *val = strtoll(buf, NULL, 10); 126 + return 0; 127 + } 128 + 129 + int powercap_get_max_energy_range_uj(struct powercap_zone *zone, uint64_t *val) 130 + { 131 + return sysfs_powercap_get64_val(zone, GET_MAX_ENERGY_RANGE_UJ, val); 132 + } 133 + 134 + int powercap_get_energy_uj(struct powercap_zone *zone, uint64_t *val) 135 + { 136 + return sysfs_powercap_get64_val(zone, GET_ENERGY_UJ, val); 137 + } 138 + 139 + int powercap_get_max_power_range_uw(struct powercap_zone *zone, uint64_t *val) 140 + { 141 + return sysfs_powercap_get64_val(zone, GET_MAX_POWER_RANGE_UW, val); 142 + } 143 + 144 + int powercap_get_power_uw(struct powercap_zone *zone, uint64_t *val) 145 + { 146 + return sysfs_powercap_get64_val(zone, GET_POWER_UW, val); 147 + } 148 + 149 + int powercap_zone_get_enabled(struct powercap_zone *zone, int *mode) 150 + { 151 + char path[SYSFS_PATH_MAX] = PATH_TO_POWERCAP; 152 + 153 + if ((strlen(PATH_TO_POWERCAP) + strlen(zone->sys_name)) + 154 + strlen("/enabled") + 1 >= SYSFS_PATH_MAX) 155 + return -1; 156 + 157 + strcat(path, "/"); 158 + strcat(path, zone->sys_name); 159 + strcat(path, "/enabled"); 160 + 161 + return sysfs_get_enabled(path, mode); 162 + } 163 + 164 + int powercap_zone_set_enabled(struct powercap_zone *zone, int mode) 165 + { 166 + /* To be done if needed */ 167 + return 0; 168 + } 169 + 170 + 171 + int powercap_read_zone(struct powercap_zone *zone) 172 + { 173 + struct dirent *dent; 174 + DIR *zone_dir; 175 + char sysfs_dir[SYSFS_PATH_MAX] = PATH_TO_POWERCAP; 176 + struct powercap_zone *child_zone; 177 + char file[SYSFS_PATH_MAX] = PATH_TO_POWERCAP; 178 + int i, ret = 0; 179 + uint64_t val = 0; 180 + 181 + strcat(sysfs_dir, "/"); 182 + strcat(sysfs_dir, zone->sys_name); 183 + 184 + zone_dir = opendir(sysfs_dir); 185 + if (zone_dir == NULL) 186 + return -1; 187 + 188 + strcat(file, "/"); 189 + strcat(file, zone->sys_name); 190 + strcat(file, "/name"); 191 + sysfs_read_file(file, zone->name, MAX_LINE_LEN); 192 + if (zone->parent) 193 + zone->tree_depth = zone->parent->tree_depth + 1; 194 + ret = powercap_get_energy_uj(zone, &val); 195 + if (ret == 0) 196 + zone->has_energy_uj = 1; 197 + ret = powercap_get_power_uw(zone, &val); 198 + if (ret == 0) 199 + zone->has_power_uw = 1; 200 + 201 + while ((dent = readdir(zone_dir)) != NULL) { 202 + struct stat st; 203 + 204 + if (strcmp(dent->d_name, ".") == 0 || strcmp(dent->d_name, "..") == 0) 205 + continue; 206 + 207 + if (stat(dent->d_name, &st) != 0 || !S_ISDIR(st.st_mode)) 208 + if (fstatat(dirfd(zone_dir), dent->d_name, &st, 0) < 0) 209 + continue; 210 + 211 + if (strncmp(dent->d_name, "intel-rapl:", 11) != 0) 212 + continue; 213 + 214 + child_zone = calloc(1, sizeof(struct powercap_zone)); 215 + if (child_zone == NULL) 216 + return -1; 217 + for (i = 0; i < POWERCAP_MAX_CHILD_ZONES; i++) { 218 + if (zone->children[i] == NULL) { 219 + zone->children[i] = child_zone; 220 + break; 221 + } 222 + if (i == POWERCAP_MAX_CHILD_ZONES - 1) { 223 + free(child_zone); 224 + fprintf(stderr, "Reached POWERCAP_MAX_CHILD_ZONES %d\n", 225 + POWERCAP_MAX_CHILD_ZONES); 226 + return -1; 227 + } 228 + } 229 + strcpy(child_zone->sys_name, zone->sys_name); 230 + strcat(child_zone->sys_name, "/"); 231 + strcat(child_zone->sys_name, dent->d_name); 232 + child_zone->parent = zone; 233 + if (zone->tree_depth >= POWERCAP_MAX_TREE_DEPTH) { 234 + fprintf(stderr, "Maximum zone hierarchy depth[%d] reached\n", 235 + POWERCAP_MAX_TREE_DEPTH); 236 + ret = -1; 237 + break; 238 + } 239 + powercap_read_zone(child_zone); 240 + } 241 + closedir(zone_dir); 242 + return ret; 243 + } 244 + 245 + struct powercap_zone *powercap_init_zones(void) 246 + { 247 + int enabled; 248 + struct powercap_zone *root_zone; 249 + int ret; 250 + char file[SYSFS_PATH_MAX] = PATH_TO_RAPL "/enabled"; 251 + 252 + ret = sysfs_get_enabled(file, &enabled); 253 + 254 + if (ret) 255 + return NULL; 256 + 257 + if (!enabled) 258 + return NULL; 259 + 260 + root_zone = calloc(1, sizeof(struct powercap_zone)); 261 + if (!root_zone) 262 + return NULL; 263 + 264 + strcpy(root_zone->sys_name, "intel-rapl/intel-rapl:0"); 265 + 266 + powercap_read_zone(root_zone); 267 + 268 + return root_zone; 269 + } 270 + 271 + /* Call function *f on the passed zone and all its children */ 272 + 273 + int powercap_walk_zones(struct powercap_zone *zone, 274 + int (*f)(struct powercap_zone *zone)) 275 + { 276 + int i, ret; 277 + 278 + if (!zone) 279 + return -1; 280 + 281 + ret = f(zone); 282 + if (ret) 283 + return ret; 284 + 285 + for (i = 0; i < POWERCAP_MAX_CHILD_ZONES; i++) { 286 + if (zone->children[i] != NULL) 287 + powercap_walk_zones(zone->children[i], f); 288 + } 289 + return 0; 290 + }
+54
tools/power/cpupower/lib/powercap.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0-only */ 2 + /* 3 + * (C) 2016 SUSE Software Solutions GmbH 4 + * Thomas Renninger <trenn@suse.de> 5 + */ 6 + 7 + #ifndef __CPUPOWER_RAPL_H__ 8 + #define __CPUPOWER_RAPL_H__ 9 + 10 + #define PATH_TO_POWERCAP "/sys/devices/virtual/powercap" 11 + #define PATH_TO_RAPL "/sys/devices/virtual/powercap/intel-rapl" 12 + #define PATH_TO_RAPL_CLASS "/sys/devices/virtual/powercap/intel-rapl" 13 + 14 + #define POWERCAP_MAX_CHILD_ZONES 10 15 + #define POWERCAP_MAX_TREE_DEPTH 10 16 + 17 + #define MAX_LINE_LEN 4096 18 + #define SYSFS_PATH_MAX 255 19 + 20 + #include <stdint.h> 21 + 22 + struct powercap_zone { 23 + char name[MAX_LINE_LEN]; 24 + /* 25 + * sys_name relative to PATH_TO_POWERCAP, 26 + * do not forget the / in between 27 + */ 28 + char sys_name[SYSFS_PATH_MAX]; 29 + int tree_depth; 30 + struct powercap_zone *parent; 31 + struct powercap_zone *children[POWERCAP_MAX_CHILD_ZONES]; 32 + /* More possible caps or attributes to be added? */ 33 + uint32_t has_power_uw:1, 34 + has_energy_uj:1; 35 + 36 + }; 37 + 38 + int powercap_walk_zones(struct powercap_zone *zone, 39 + int (*f)(struct powercap_zone *zone)); 40 + 41 + struct powercap_zone *powercap_init_zones(void); 42 + int powercap_get_enabled(int *mode); 43 + int powercap_set_enabled(int mode); 44 + int powercap_get_driver(char *driver, int buflen); 45 + 46 + int powercap_get_max_energy_range_uj(struct powercap_zone *zone, uint64_t *val); 47 + int powercap_get_energy_uj(struct powercap_zone *zone, uint64_t *val); 48 + int powercap_get_max_power_range_uw(struct powercap_zone *zone, uint64_t *val); 49 + int powercap_get_power_uw(struct powercap_zone *zone, uint64_t *val); 50 + int powercap_zone_get_enabled(struct powercap_zone *zone, int *mode); 51 + int powercap_zone_set_enabled(struct powercap_zone *zone, int mode); 52 + 53 + 54 + #endif /* __CPUPOWER_RAPL_H__ */
+25
tools/power/cpupower/man/cpupower-powercap-info.1
··· 1 + .TH CPUPOWER\-POWERCAP\-INFO "1" "05/08/2016" "" "cpupower Manual" 2 + .SH NAME 3 + cpupower\-powercap\-info \- Shows powercapping related kernel and hardware configurations 4 + .SH SYNOPSIS 5 + .ft B 6 + .B cpupower powercap-info 7 + 8 + .SH DESCRIPTION 9 + \fBcpupower powercap-info \fP shows kernel powercapping subsystem information. 10 + This needs hardware support and a loaded powercapping driver (at this time only 11 + intel_rapl driver exits) exporting hardware values userspace via sysfs. 12 + 13 + Some options are platform wide, some affect single cores. By default values 14 + of core zero are displayed only. cpupower --cpu all cpuinfo will show the 15 + settings of all cores, see cpupower(1) how to choose specific cores. 16 + 17 + .SH "DOCUMENTATION" 18 + 19 + kernel sources: 20 + Documentation/power/powercap/powercap.txt 21 + 22 + 23 + .SH "SEE ALSO" 24 + 25 + cpupower(1)
+983
tools/power/cpupower/po/ka.po
··· 1 + # Georgian translation for cpufrequtils package 2 + # Georgian messages for cpufrequtils. 3 + # Copyright (C) 2004-2022 Dominik Brodowski <linux@dominikbrodowski.net> 4 + # This file is distributed under the same license as the cpufrequtils package. 5 + # Ekaterine Papava <katopapava@gmail.com>, 2022. 6 + 7 + msgid "" 8 + msgstr "" 9 + "Project-Id-Version: cpufrequtils 006\n" 10 + "Report-Msgid-Bugs-To: \n" 11 + "POT-Creation-Date: 2011-03-08 17:03+0100\n" 12 + "PO-Revision-Date: 2022-09-18 22:12+0200\n" 13 + "Last-Translator: Ekaterine Papava <katopapava@gmail.com>\n" 14 + "Language-Team: NONE\n" 15 + "Language: ka\n" 16 + "MIME-Version: 1.0\n" 17 + "Content-Type: text/plain; charset=UTF-8\n" 18 + "Content-Transfer-Encoding: 8bit\n" 19 + "Plural-Forms: nplurals=2; plural=(n != 1);\n" 20 + "X-Generator: Poedit 3.1.1\n" 21 + 22 + #: utils/idle_monitor/nhm_idle.c:36 23 + msgid "Processor Core C3" 24 + msgstr "პროცესორის ბირთვი C3" 25 + 26 + #: utils/idle_monitor/nhm_idle.c:43 27 + msgid "Processor Core C6" 28 + msgstr "პროცესორის ბირთვი C6" 29 + 30 + #: utils/idle_monitor/nhm_idle.c:51 31 + msgid "Processor Package C3" 32 + msgstr "პროცესორის პაკეტი C3" 33 + 34 + #: utils/idle_monitor/nhm_idle.c:58 utils/idle_monitor/amd_fam14h_idle.c:70 35 + msgid "Processor Package C6" 36 + msgstr "პროცესორის პაკეტი C6" 37 + 38 + #: utils/idle_monitor/snb_idle.c:33 39 + msgid "Processor Core C7" 40 + msgstr "პროცესორის Core C7" 41 + 42 + #: utils/idle_monitor/snb_idle.c:40 43 + msgid "Processor Package C2" 44 + msgstr "პროცესორის პაკეტი C2" 45 + 46 + #: utils/idle_monitor/snb_idle.c:47 47 + msgid "Processor Package C7" 48 + msgstr "პროცესორის პაკეტი C7" 49 + 50 + #: utils/idle_monitor/amd_fam14h_idle.c:56 51 + msgid "Package in sleep state (PC1 or deeper)" 52 + msgstr "პაკეტი ძილის მდგომარეობაში (PC1 ან ღრმა)" 53 + 54 + #: utils/idle_monitor/amd_fam14h_idle.c:63 55 + msgid "Processor Package C1" 56 + msgstr "პროცესორის პაკეტი C1" 57 + 58 + #: utils/idle_monitor/amd_fam14h_idle.c:77 59 + msgid "North Bridge P1 boolean counter (returns 0 or 1)" 60 + msgstr "ჩრდილო ხიდის P1 ლოგიკური მთვლელი (აბრუნებს 0 ან 1-ს)" 61 + 62 + #: utils/idle_monitor/mperf_monitor.c:35 63 + msgid "Processor Core not idle" 64 + msgstr "პროცესორის ბირთვი უქმი არაა" 65 + 66 + #: utils/idle_monitor/mperf_monitor.c:42 67 + msgid "Processor Core in an idle state" 68 + msgstr "პროცესორის ბირთვი უქმ მდგომარეობაში არაა" 69 + 70 + #: utils/idle_monitor/mperf_monitor.c:50 71 + msgid "Average Frequency (including boost) in MHz" 72 + msgstr "საშუალო სიხშირე (პიკურის ჩათვლით) მეგაჰერცებში" 73 + 74 + #: utils/idle_monitor/cpupower-monitor.c:66 75 + #, c-format 76 + msgid "" 77 + "cpupower monitor: [-h] [ [-t] | [-l] | [-m <mon1>,[<mon2>] ] ] [-i " 78 + "interval_sec | -c command ...]\n" 79 + msgstr "" 80 + "cpupower monitor: [-h] [ [-t] | [-l] | [-m <mon1>,[<mon2>] ] ] [-i " 81 + "ინტერვალი_წმ | -c ბრძანება ...]\n" 82 + 83 + #: utils/idle_monitor/cpupower-monitor.c:69 84 + #, c-format 85 + msgid "" 86 + "cpupower monitor: [-v] [-h] [ [-t] | [-l] | [-m <mon1>,[<mon2>] ] ] [-i " 87 + "interval_sec | -c command ...]\n" 88 + msgstr "" 89 + "cpupower monitor: [-v] [-h] [ [-t] | [-l] | [-m <mon1>,[<mon2>] ] ] [-i " 90 + "ინტერვალი_წმ | -c ბრძანება ...]\n" 91 + 92 + #: utils/idle_monitor/cpupower-monitor.c:71 93 + #, c-format 94 + msgid "\t -v: be more verbose\n" 95 + msgstr "\t -v: დამატებითი ინფორმაციის გამოტანა\n" 96 + 97 + #: utils/idle_monitor/cpupower-monitor.c:73 98 + #, c-format 99 + msgid "\t -h: print this help\n" 100 + msgstr "\t -h: ამ დახმარების გამოტანა\n" 101 + 102 + #: utils/idle_monitor/cpupower-monitor.c:74 103 + #, c-format 104 + msgid "\t -i: time interval to measure for in seconds (default 1)\n" 105 + msgstr "" 106 + "\t -i: გასაზომი დროის ინტერვალი, წამებში (ნაგულისხმები მნიშვნელობაა 1)\n" 107 + 108 + #: utils/idle_monitor/cpupower-monitor.c:75 109 + #, c-format 110 + msgid "\t -t: show CPU topology/hierarchy\n" 111 + msgstr "\t -t: CPU -ის ტოპოლოგიის/იერარქიის ჩვენება\n" 112 + 113 + #: utils/idle_monitor/cpupower-monitor.c:76 114 + #, c-format 115 + msgid "\t -l: list available CPU sleep monitors (for use with -m)\n" 116 + msgstr "" 117 + "\t -l: CPU-ის ძილის მონიტორების სიის გამოტანა (განკუთვნილია -m -სთან ერთად " 118 + "გამოსაყენებლად)\n" 119 + 120 + #: utils/idle_monitor/cpupower-monitor.c:77 121 + #, c-format 122 + msgid "\t -m: show specific CPU sleep monitors only (in same order)\n" 123 + msgstr "" 124 + "\t -m: მხოლოდ მითითებული CPU-ის ძილის მონიტორების ჩვენება (იგივე " 125 + "მიმდევრობით)\n" 126 + 127 + #: utils/idle_monitor/cpupower-monitor.c:79 128 + #, c-format 129 + msgid "" 130 + "only one of: -t, -l, -m are allowed\n" 131 + "If none of them is passed," 132 + msgstr "" 133 + "დასაშვებია მხოლოდ ერთ-ერთის: -t, -l ან -m მითითება\n" 134 + "თუ მითითებული არც ერთი არაა," 135 + 136 + #: utils/idle_monitor/cpupower-monitor.c:80 137 + #, c-format 138 + msgid " all supported monitors are shown\n" 139 + msgstr " ნაჩვენები იქნება ყველა მხარდაჭერილი მონიტორი\n" 140 + 141 + #: utils/idle_monitor/cpupower-monitor.c:197 142 + #, c-format 143 + msgid "Monitor %s, Counter %s has no count function. Implementation error\n" 144 + msgstr "" 145 + "მონიტორი %s, მთვლელი %s. დათვლის ფუნქცია არ გააჩნია. განხორციელების შეცდომა\n" 146 + 147 + #: utils/idle_monitor/cpupower-monitor.c:207 148 + #, c-format 149 + msgid " *is offline\n" 150 + msgstr " *გათიშულია\n" 151 + 152 + #: utils/idle_monitor/cpupower-monitor.c:236 153 + #, c-format 154 + msgid "%s: max monitor name length (%d) exceeded\n" 155 + msgstr "%s: მონიტორის სახელის მაქსიმალური სიგრძე (%d) გადაჭარბებულია\n" 156 + 157 + #: utils/idle_monitor/cpupower-monitor.c:250 158 + #, c-format 159 + msgid "No matching monitor found in %s, try -l option\n" 160 + msgstr "%s-ში აღწერილი მონიტორი ვერ ვიპოვე. სცადეთ -l პარამეტრი\n" 161 + 162 + #: utils/idle_monitor/cpupower-monitor.c:266 163 + #, c-format 164 + msgid "Monitor \"%s\" (%d states) - Might overflow after %u s\n" 165 + msgstr "მონიტორი \"%s\" (%d მდგომარეობა) - გადაივსება %u წამის შემდეგ\n" 166 + 167 + #: utils/idle_monitor/cpupower-monitor.c:319 168 + #, c-format 169 + msgid "%s took %.5f seconds and exited with status %d\n" 170 + msgstr "%s-ს %.5f წამი დასჭირდა და მუშაობა სტატუსით %d დაასრულა\n" 171 + 172 + #: utils/idle_monitor/cpupower-monitor.c:406 173 + #, c-format 174 + msgid "Cannot read number of available processors\n" 175 + msgstr "ხელმისაწვდომი პროცესორების რიცხვის წაკითხვა შეუძლებელია\n" 176 + 177 + #: utils/idle_monitor/cpupower-monitor.c:417 178 + #, c-format 179 + msgid "Available monitor %s needs root access\n" 180 + msgstr "ხელმისაწვდომ მონიტორს (%s) root-ის წვდომს სჭირდება\n" 181 + 182 + #: utils/idle_monitor/cpupower-monitor.c:428 183 + #, c-format 184 + msgid "No HW Cstate monitors found\n" 185 + msgstr "აპარატურული C-მდგომარეობის მონიტორები ვერ ვიპოვე\n" 186 + 187 + #: utils/cpupower.c:78 188 + #, c-format 189 + msgid "cpupower [ -c cpulist ] subcommand [ARGS]\n" 190 + msgstr "cpupower [ -c cpu-ებისსია ] ქვებრძანება [არგუმენტები]\n" 191 + 192 + #: utils/cpupower.c:79 193 + #, c-format 194 + msgid "cpupower --version\n" 195 + msgstr "cpupower --version\n" 196 + 197 + #: utils/cpupower.c:80 198 + #, c-format 199 + msgid "Supported subcommands are:\n" 200 + msgstr "ხელმისაწვდომი ქვებრძანებებია:\n" 201 + 202 + #: utils/cpupower.c:83 203 + #, c-format 204 + msgid "" 205 + "\n" 206 + "Some subcommands can make use of the -c cpulist option.\n" 207 + msgstr "" 208 + "\n" 209 + "ზოგიერთ ქვებრძანებას შეუძლია -c cpu-ებისსია პარამეტრი გამოიყენოს.\n" 210 + 211 + #: utils/cpupower.c:84 212 + #, c-format 213 + msgid "Look at the general cpupower manpage how to use it\n" 214 + msgstr "" 215 + "გამოყენების ინსტრუქციისთვის cpupower-ის სახელმძღვანელოში (manpage) ჩაიხედეთ\n" 216 + 217 + #: utils/cpupower.c:85 218 + #, c-format 219 + msgid "and read up the subcommand's manpage whether it is supported.\n" 220 + msgstr "" 221 + "და წაიკითხეთ ქვებრძანების სახელმძღვანელო (manpage), თუ ის მხარდაჭერილია.\n" 222 + 223 + #: utils/cpupower.c:86 224 + #, c-format 225 + msgid "" 226 + "\n" 227 + "Use cpupower help subcommand for getting help for above subcommands.\n" 228 + msgstr "" 229 + "\n" 230 + "ზემოთ მოყვანილი ქვებრძანებების შესახებ ინფორმაციის მისაღებად გამოიყენეთ " 231 + "cpupower help ქვებრძანების_სახელი.\n" 232 + 233 + #: utils/cpupower.c:91 234 + #, c-format 235 + msgid "Report errors and bugs to %s, please.\n" 236 + msgstr "გთხოვთ, შეცდომების შესახებ გვაცნობეთ აქ; %s.\n" 237 + 238 + #: utils/cpupower.c:114 239 + #, c-format 240 + msgid "Error parsing cpu list\n" 241 + msgstr "CPU-ების სიის დამუშავების შეცდომა\n" 242 + 243 + #: utils/cpupower.c:172 244 + #, c-format 245 + msgid "Subcommand %s needs root privileges\n" 246 + msgstr "ქვებრძანებას %s root-ის პრივილეგიები სჭირდება\n" 247 + 248 + #: utils/cpufreq-info.c:31 249 + #, c-format 250 + msgid "Couldn't count the number of CPUs (%s: %s), assuming 1\n" 251 + msgstr "" 252 + "CPU-ების (%s: %s) რაოდენობის მიღების შეცდომა. ჩაითვლება, რომ უდრის 1-ს\n" 253 + 254 + #: utils/cpufreq-info.c:63 255 + #, c-format 256 + msgid "" 257 + " minimum CPU frequency - maximum CPU frequency - governor\n" 258 + msgstr "" 259 + " CPU-ის მინიმალური სიხშირე - CPU-ის მაქსიმალური სიხშირე - " 260 + "მმართველი\n" 261 + 262 + #: utils/cpufreq-info.c:151 263 + #, c-format 264 + msgid "Error while evaluating Boost Capabilities on CPU %d -- are you root?\n" 265 + msgstr "" 266 + "შეცდომა %d-ე CPU-ის პიკური დატვირთვის მართვის შესაძლებლობების შეფასებისას -- " 267 + "გაქვთ თუ არა root პრივილეგიები?\n" 268 + 269 + #. P state changes via MSR are identified via cpuid 80000007 270 + #. on Intel and AMD, but we assume boost capable machines can do that 271 + #. if (cpuid_eax(0x80000000) >= 0x80000007 272 + #. && (cpuid_edx(0x80000007) & (1 << 7))) 273 + #. 274 + #: utils/cpufreq-info.c:161 275 + #, c-format 276 + msgid " boost state support: \n" 277 + msgstr " პიკის მდგომარეობის მხარდაჭერა: \n" 278 + 279 + #: utils/cpufreq-info.c:163 280 + #, c-format 281 + msgid " Supported: %s\n" 282 + msgstr " მხარდაჭერილია: %s\n" 283 + 284 + #: utils/cpufreq-info.c:163 utils/cpufreq-info.c:164 285 + msgid "yes" 286 + msgstr "დიახ" 287 + 288 + #: utils/cpufreq-info.c:163 utils/cpufreq-info.c:164 289 + msgid "no" 290 + msgstr "არა" 291 + 292 + #: utils/cpufreq-info.c:164 293 + #, c-format 294 + msgid " Active: %s\n" 295 + msgstr " აქტიური: %s\n" 296 + 297 + #: utils/cpufreq-info.c:177 298 + #, c-format 299 + msgid " Boost States: %d\n" 300 + msgstr " პიკის მდგომარეობები: %d\n" 301 + 302 + #: utils/cpufreq-info.c:178 303 + #, c-format 304 + msgid " Total States: %d\n" 305 + msgstr " სულ მდგომარეობები: %d\n" 306 + 307 + #: utils/cpufreq-info.c:181 308 + #, c-format 309 + msgid " Pstate-Pb%d: %luMHz (boost state)\n" 310 + msgstr " Pstate-Pb%d: %luმჰც (პიკში)\n" 311 + 312 + #: utils/cpufreq-info.c:184 313 + #, c-format 314 + msgid " Pstate-P%d: %luMHz\n" 315 + msgstr " Pstate-P%d: %luმჰც\n" 316 + 317 + #: utils/cpufreq-info.c:211 318 + #, c-format 319 + msgid " no or unknown cpufreq driver is active on this CPU\n" 320 + msgstr " ამ CPU-ზე cpufreq-ის დრაივერი უცნობია, ან არ არსებობს\n" 321 + 322 + #: utils/cpufreq-info.c:213 323 + #, c-format 324 + msgid " driver: %s\n" 325 + msgstr " დრაივერი: %s\n" 326 + 327 + #: utils/cpufreq-info.c:219 328 + #, c-format 329 + msgid " CPUs which run at the same hardware frequency: " 330 + msgstr " CPU-ები, რომლებიც ერთი და იგივე აპარატურულ სიხშირეზე მუშაობენ: " 331 + 332 + #: utils/cpufreq-info.c:230 333 + #, c-format 334 + msgid " CPUs which need to have their frequency coordinated by software: " 335 + msgstr " CPU-ები, რომლებსაც მათი სიხშირის პროგრამული კოორდინაცია სჭირდებათ: " 336 + 337 + #: utils/cpufreq-info.c:241 338 + #, c-format 339 + msgid " maximum transition latency: " 340 + msgstr " მაქსიმალური გარდამავალი დაყოვნება: " 341 + 342 + #: utils/cpufreq-info.c:247 343 + #, c-format 344 + msgid " hardware limits: " 345 + msgstr " აპარატურული ლიმიტები: " 346 + 347 + #: utils/cpufreq-info.c:256 348 + #, c-format 349 + msgid " available frequency steps: " 350 + msgstr " ხელმისაწვდომი სიხშირის ბიჯები: " 351 + 352 + #: utils/cpufreq-info.c:269 353 + #, c-format 354 + msgid " available cpufreq governors: " 355 + msgstr " cpufreq -ის ხელმისაწვდომი მმართველები: " 356 + 357 + #: utils/cpufreq-info.c:280 358 + #, c-format 359 + msgid " current policy: frequency should be within " 360 + msgstr " მიმდინარე პოლიტიკა: სიხშირის დიაპაზონია " 361 + 362 + #: utils/cpufreq-info.c:282 363 + #, c-format 364 + msgid " and " 365 + msgstr " და " 366 + 367 + #: utils/cpufreq-info.c:286 368 + #, c-format 369 + msgid "" 370 + "The governor \"%s\" may decide which speed to use\n" 371 + " within this range.\n" 372 + msgstr "" 373 + "მმართველს \"%s\" შეუძლია გადაწყვიტოს, რომელი სიჩქარე გამოიყენოს\n" 374 + " ამ დიაპაზონიდან.\n" 375 + 376 + #: utils/cpufreq-info.c:293 377 + #, c-format 378 + msgid " current CPU frequency is " 379 + msgstr " CPU-ის მიმდინარე სიხშირეა " 380 + 381 + #: utils/cpufreq-info.c:296 382 + #, c-format 383 + msgid " (asserted by call to hardware)" 384 + msgstr " (დამტკიცებულია აპარატურული გადამოწმებით)" 385 + 386 + #: utils/cpufreq-info.c:304 387 + #, c-format 388 + msgid " cpufreq stats: " 389 + msgstr " cpufreq -ის სტატისტიკა: " 390 + 391 + #: utils/cpufreq-info.c:472 392 + #, c-format 393 + msgid "Usage: cpupower freqinfo [options]\n" 394 + msgstr "გამოყენება: cpupower freqinfo [პარამეტრები]\n" 395 + 396 + #: utils/cpufreq-info.c:473 utils/cpufreq-set.c:26 utils/cpupower-set.c:23 397 + #: utils/cpupower-info.c:22 utils/cpuidle-info.c:148 398 + #, c-format 399 + msgid "Options:\n" 400 + msgstr "პარამეტრები:\n" 401 + 402 + #: utils/cpufreq-info.c:474 403 + #, c-format 404 + msgid " -e, --debug Prints out debug information [default]\n" 405 + msgstr " -e, --debug გამართვის ინფორმაციის ჩვენება [ნაგულისხმები]\n" 406 + 407 + #: utils/cpufreq-info.c:475 408 + #, c-format 409 + msgid "" 410 + " -f, --freq Get frequency the CPU currently runs at, according\n" 411 + " to the cpufreq core *\n" 412 + msgstr "" 413 + " -f, --freq სიხშირის მიღება, რომლითაც CPU ამჟამად მუშაობს, \n" 414 + " cpufreq ბირთვის შესაბამისად *\n" 415 + 416 + #: utils/cpufreq-info.c:477 417 + #, c-format 418 + msgid "" 419 + " -w, --hwfreq Get frequency the CPU currently runs at, by reading\n" 420 + " it from hardware (only available to root) *\n" 421 + msgstr "" 422 + " -w, --hwfreq სიხშირის მიღება, რომლითაც CPU ახლა მუშაობს, " 423 + "მნიშვნელობის\n" 424 + " პირდაპირ აპარატურიდან წაკითხვით (საჭიროა root-ის " 425 + "პრივილეგიები) *\n" 426 + 427 + #: utils/cpufreq-info.c:479 428 + #, c-format 429 + msgid "" 430 + " -l, --hwlimits Determine the minimum and maximum CPU frequency " 431 + "allowed *\n" 432 + msgstr "" 433 + " -l, --hwlimits CPU-ის მინიმალური და მაქსიმალური დასაშვები სიხშირის " 434 + "განსაზღვრა *\n" 435 + 436 + #: utils/cpufreq-info.c:480 437 + #, c-format 438 + msgid " -d, --driver Determines the used cpufreq kernel driver *\n" 439 + msgstr "" 440 + " -d, --driver ბირთვის მიერ გამოყენებული cpufreq -ის დრაივერი *\n" 441 + 442 + #: utils/cpufreq-info.c:481 443 + #, c-format 444 + msgid " -p, --policy Gets the currently used cpufreq policy *\n" 445 + msgstr "" 446 + " -p, --policy cpufreq -ის ამჟამად გამოყენებული პოლიტიკის მიღება*\n" 447 + 448 + #: utils/cpufreq-info.c:482 449 + #, c-format 450 + msgid " -g, --governors Determines available cpufreq governors *\n" 451 + msgstr "" 452 + " -g, --governors cpufreq-ის ხელმისაწვდომი მმართველების დადგენა *\n" 453 + 454 + #: utils/cpufreq-info.c:483 455 + #, c-format 456 + msgid "" 457 + " -r, --related-cpus Determines which CPUs run at the same hardware " 458 + "frequency *\n" 459 + msgstr "" 460 + " -r, --related-cpus განსაზღვრავს, რომელი CPU-ები მუშაობს ერთი და იგივე " 461 + "აპარატურულ სიხშირეზე *\n" 462 + 463 + #: utils/cpufreq-info.c:484 464 + #, c-format 465 + msgid "" 466 + " -a, --affected-cpus Determines which CPUs need to have their frequency\n" 467 + " coordinated by software *\n" 468 + msgstr "" 469 + " -a, --affected-cpus განსაზღვრავს, რომელი CPU-ებს სჭირდებათ მათი სიხშირის\n" 470 + " პროგრამული კოორდინაცია *\n" 471 + 472 + #: utils/cpufreq-info.c:486 473 + #, c-format 474 + msgid " -s, --stats Shows cpufreq statistics if available\n" 475 + msgstr "" 476 + " -s, --stats cpufreq -ის სტატისტიკის ჩვენება, თუ ის " 477 + "ხელმისაწვდომია\n" 478 + 479 + #: utils/cpufreq-info.c:487 480 + #, c-format 481 + msgid "" 482 + " -y, --latency Determines the maximum latency on CPU frequency " 483 + "changes *\n" 484 + msgstr "" 485 + " -y, --latency CPU -ის სიხშირის ცვლილების მაქსიმალური დაყოვნების " 486 + "დადგენა *\n" 487 + 488 + #: utils/cpufreq-info.c:488 489 + #, c-format 490 + msgid " -b, --boost Checks for turbo or boost modes *\n" 491 + msgstr " -b, --boost ტურბო და პიკური რეჟიმების შემოწმება *\n" 492 + 493 + #: utils/cpufreq-info.c:489 494 + #, c-format 495 + msgid "" 496 + " -o, --proc Prints out information like provided by the /proc/" 497 + "cpufreq\n" 498 + " interface in 2.4. and early 2.6. kernels\n" 499 + msgstr "" 500 + " -o, --proc გამოიტანს ინფორმაციას, რომელიც /proc/cpufreq-ის " 501 + "მიერაა მოწოდებული.\n" 502 + " ეს ინტერფეისი 2.4. და ადრეულ 2.6. ბირთვებში იყო " 503 + "ხელმისაწვდომი\n" 504 + 505 + #: utils/cpufreq-info.c:491 506 + #, c-format 507 + msgid "" 508 + " -m, --human human-readable output for the -f, -w, -s and -y " 509 + "parameters\n" 510 + msgstr "" 511 + " -m, --human -f, -w, -s და -y პარამეტრების გამოტანის " 512 + "ადამიანისთვის გასაგებ ფორმატში ჩვენება\n" 513 + 514 + #: utils/cpufreq-info.c:492 utils/cpuidle-info.c:152 515 + #, c-format 516 + msgid " -h, --help Prints out this screen\n" 517 + msgstr " -h, --help ამ ეკრანის გამოტანა\n" 518 + 519 + #: utils/cpufreq-info.c:495 520 + #, c-format 521 + msgid "" 522 + "If no argument or only the -c, --cpu parameter is given, debug output about\n" 523 + "cpufreq is printed which is useful e.g. for reporting bugs.\n" 524 + msgstr "" 525 + "თუ არგუმენტები საერთოდ არ გადაცემულა ან გადაცემულია -c ან --cpu, მოხდება " 526 + "cpufreq-ის\n" 527 + "დრაივერის დამატებითი შეტყობინებების გამოტანა, რომელიც გამართვისთვისაა " 528 + "საჭირო.\n" 529 + 530 + #: utils/cpufreq-info.c:497 531 + #, c-format 532 + msgid "" 533 + "For the arguments marked with *, omitting the -c or --cpu argument is\n" 534 + "equivalent to setting it to zero\n" 535 + msgstr "" 536 + "არგუმენტებისთვის, რომლებიც *-ით არიან მონიშნულები, -c/--cpu \n" 537 + "არგუმენტის გამოტოვება მის ნულოვან მნიშვნელობაზე დაყენებას უდრის\n" 538 + 539 + #: utils/cpufreq-info.c:580 540 + #, c-format 541 + msgid "" 542 + "The argument passed to this tool can't be combined with passing a --cpu " 543 + "argument\n" 544 + msgstr "" 545 + "ამ პროგრამისთვის გადაცემული არგუმენტის --cpu არგუმენტთან გადაცემა ერთად არ " 546 + "შეიძლება\n" 547 + 548 + #: utils/cpufreq-info.c:596 549 + #, c-format 550 + msgid "" 551 + "You can't specify more than one --cpu parameter and/or\n" 552 + "more than one output-specific argument\n" 553 + msgstr "" 554 + "ერთ --cpu პარამეტრზე ან/და ერთ გამოტანის-შესატყვისი \n" 555 + "არგუმენტზე მეტის მითითება აკრძალულია\n" 556 + 557 + #: utils/cpufreq-info.c:600 utils/cpufreq-set.c:82 utils/cpupower-set.c:42 558 + #: utils/cpupower-info.c:42 utils/cpuidle-info.c:213 559 + #, c-format 560 + msgid "invalid or unknown argument\n" 561 + msgstr "არასწორი ან უცნობი არგუმენტი\n" 562 + 563 + #: utils/cpufreq-info.c:617 564 + #, c-format 565 + msgid "couldn't analyze CPU %d as it doesn't seem to be present\n" 566 + msgstr "%d-ე CPU-ის ანალიზი შეუძლებელია. ის არ არსებობს\n" 567 + 568 + #: utils/cpufreq-info.c:620 utils/cpupower-info.c:142 569 + #, c-format 570 + msgid "analyzing CPU %d:\n" 571 + msgstr "%d-ე CPU -ის ანალიზი:\n" 572 + 573 + #: utils/cpufreq-set.c:25 574 + #, c-format 575 + msgid "Usage: cpupower frequency-set [options]\n" 576 + msgstr "გამოყენება: cpupower frequency-set [პარამეტრები]\n" 577 + 578 + #: utils/cpufreq-set.c:27 579 + #, c-format 580 + msgid "" 581 + " -d FREQ, --min FREQ new minimum CPU frequency the governor may " 582 + "select\n" 583 + msgstr "" 584 + " -d FREQ, --min FREQ CPU-ის ახალი მინიმალური სიხშირე, რომელიც " 585 + "მმართველს შეუძლია, აირჩიოს\n" 586 + 587 + #: utils/cpufreq-set.c:28 588 + #, c-format 589 + msgid "" 590 + " -u FREQ, --max FREQ new maximum CPU frequency the governor may " 591 + "select\n" 592 + msgstr "" 593 + " -u FREQ, --max FREQ CPU-ის ახალი მაქსიმალური სიხშირე, რომელიც " 594 + "მმართველს შეუძლია, აირჩიოს\n" 595 + 596 + #: utils/cpufreq-set.c:29 597 + #, c-format 598 + msgid " -g GOV, --governor GOV new cpufreq governor\n" 599 + msgstr " -g GOV, --governor GOV cpufreq-ის ახალი მმართველი\n" 600 + 601 + #: utils/cpufreq-set.c:30 602 + #, c-format 603 + msgid "" 604 + " -f FREQ, --freq FREQ specific frequency to be set. Requires userspace\n" 605 + " governor to be available and loaded\n" 606 + msgstr "" 607 + " -f FREQ, --freq FREQ მითითებული სიხშირის დაყენება. საჭიროა, " 608 + "მომხმარებლის სივრცეში გაშვებული\n" 609 + " მმართველი ხელმისაწვდომი და ჩატვირთული იყოს\n" 610 + 611 + #: utils/cpufreq-set.c:32 612 + #, c-format 613 + msgid " -r, --related Switches all hardware-related CPUs\n" 614 + msgstr "" 615 + " -r, --related ყველა აპარატურულად-დაავშირებული CPU-ის გადართვა\n" 616 + 617 + #: utils/cpufreq-set.c:33 utils/cpupower-set.c:28 utils/cpupower-info.c:27 618 + #, c-format 619 + msgid " -h, --help Prints out this screen\n" 620 + msgstr " -h, --help ამ ეკრანის გამოტანა\n" 621 + 622 + #: utils/cpufreq-set.c:35 623 + #, c-format 624 + msgid "" 625 + "Notes:\n" 626 + "1. Omitting the -c or --cpu argument is equivalent to setting it to \"all\"\n" 627 + msgstr "" 628 + "შენიშვნა:\n" 629 + "1. -c/--cpu პარამეტრის გამოტოვება იგივეა, რაც \"all\" (ყველას) მითითება\n" 630 + 631 + #: utils/cpufreq-set.c:37 632 + #, c-format 633 + msgid "" 634 + "2. The -f FREQ, --freq FREQ parameter cannot be combined with any other " 635 + "parameter\n" 636 + " except the -c CPU, --cpu CPU parameter\n" 637 + "3. FREQuencies can be passed in Hz, kHz (default), MHz, GHz, or THz\n" 638 + " by postfixing the value with the wanted unit name, without any space\n" 639 + " (FREQuency in kHz =^ Hz * 0.001 =^ MHz * 1000 =^ GHz * 1000000).\n" 640 + msgstr "" 641 + "2. The -f FREQ, --freq FREQ პარამეტრის შეთავსება შეუძლებელია სხვა " 642 + "პარამეტრებთან,\n" 643 + " -c CPU, --cpu CPU -ის გარდა\n" 644 + "3. სიხშირეების გადაცემა შეიძლება ჰერცებში (hz), კილოჰერცებში, (KHz) " 645 + "(ნაგულისხმები), მეგაჰერცებში (MHz), GHz და THz.\n" 646 + " რიცხვის შემდეგ შესაბამისი ერთეულის, გამოტოვების გარეშე, მიწერით\n" 647 + " (სიხშირე in kHz(კილოჰერცი) =^ Hz(ჰერცი) * 0.001 =^ MHz(მეგაჰერცი) * 1000 " 648 + "=^ GHz(გიგაჰერცი) * 1000000).\n" 649 + 650 + #: utils/cpufreq-set.c:57 651 + #, c-format 652 + msgid "" 653 + "Error setting new values. Common errors:\n" 654 + "- Do you have proper administration rights? (super-user?)\n" 655 + "- Is the governor you requested available and modprobed?\n" 656 + "- Trying to set an invalid policy?\n" 657 + "- Trying to set a specific frequency, but userspace governor is not " 658 + "available,\n" 659 + " for example because of hardware which cannot be set to a specific " 660 + "frequency\n" 661 + " or because the userspace governor isn't loaded?\n" 662 + msgstr "" 663 + "ახალი მნიშვნელოების დაყენება შეუძლებელია. ხშირად დაშვებული შეცდომებია:\n" 664 + "- გაქვთ თუ არა ადმინისტრატორის უფლებები? (მომხმარებელი root)\n" 665 + "- არის თუ არა მოთხოვნილი მმართველი ხელმისაწვდომი და შესაბამისი მოდული " 666 + "modprobe-ით ჩატვირთული?\n" 667 + "- ცდილობთ დააყენოთ არასწორი პოლიტიკა?\n" 668 + "- ცდილობთ დააყენოთ განსაზღვრული სიხშირე მაშინ, როცა მომხმარებლის სივრცის " 669 + "მმართველი ხელმიუწვდომელია.\n" 670 + " მაგალითად აპარატურის გამო, რომელსაც მითითებული სიხშირის დაყენება არ " 671 + "შეუძლია,\n" 672 + " ან იქნებ მომხმარებლის სივრცის მმართველი ჩატვირთული არაა?\n" 673 + 674 + #: utils/cpufreq-set.c:170 675 + #, c-format 676 + msgid "wrong, unknown or unhandled CPU?\n" 677 + msgstr "არასწორი, უცნობი ან არასასურველი CPU?\n" 678 + 679 + #: utils/cpufreq-set.c:302 680 + #, c-format 681 + msgid "" 682 + "the -f/--freq parameter cannot be combined with -d/--min, -u/--max or\n" 683 + "-g/--governor parameters\n" 684 + msgstr "" 685 + "პარამეტრი -f/--freq არ შეიძლება-d/--min, -u/--max და\n" 686 + "-g/--governor პარამეტრებთან ერთად იყოს მითითებული\n" 687 + 688 + #: utils/cpufreq-set.c:308 689 + #, c-format 690 + msgid "" 691 + "At least one parameter out of -f/--freq, -d/--min, -u/--max, and\n" 692 + "-g/--governor must be passed\n" 693 + msgstr "" 694 + "საჭიროა -f/--freq, -d/--min, -u/--max, and\n" 695 + "-g/--governor პარამეტრებიდან ერთის გადაცემა მაინც\n" 696 + 697 + #: utils/cpufreq-set.c:347 698 + #, c-format 699 + msgid "Setting cpu: %d\n" 700 + msgstr "CPU-ის დაყენება: %d\n" 701 + 702 + #: utils/cpupower-set.c:22 703 + #, c-format 704 + msgid "Usage: cpupower set [ -b val ] [ -m val ] [ -s val ]\n" 705 + msgstr "გამოყენება: cpupower set [ -b მნიშვნ ] [ -m მნიშვნ ] [ -s მნიშვნ ]\n" 706 + 707 + #: utils/cpupower-set.c:24 708 + #, c-format 709 + msgid "" 710 + " -b, --perf-bias [VAL] Sets CPU's power vs performance policy on some\n" 711 + " Intel models [0-15], see manpage for details\n" 712 + msgstr "" 713 + " -b, --perf-bias [VAL] Intel-ის ზოგიერთ მოდელზე [0-15] CPU-ის კვებასა და " 714 + "წარმადობას შორის დამოკიდებულების დაყენება\n" 715 + " მეტი დეტალისთვის იხილეთ სახელმძღვანელო (manpage)\n" 716 + 717 + #: utils/cpupower-set.c:26 718 + #, c-format 719 + msgid "" 720 + " -m, --sched-mc [VAL] Sets the kernel's multi core scheduler policy.\n" 721 + msgstr "" 722 + " -m, --sched-mc [VAL] ბირთვის მრავალბირთვიანობის მგეგმავის პოლიტიკის " 723 + "დაყენება.\n" 724 + 725 + #: utils/cpupower-set.c:27 726 + #, c-format 727 + msgid "" 728 + " -s, --sched-smt [VAL] Sets the kernel's thread sibling scheduler " 729 + "policy.\n" 730 + msgstr "" 731 + " -s, --sched-smt [VAL] ბირთვის ნაკადის დის მგეგმავის პოლიტიკის " 732 + "დაყენება.\n" 733 + 734 + #: utils/cpupower-set.c:80 735 + #, c-format 736 + msgid "--perf-bias param out of range [0-%d]\n" 737 + msgstr "--perf-bias პარამეტრი დიაპაზონიდან [0-%d]\n" 738 + 739 + #: utils/cpupower-set.c:91 740 + #, c-format 741 + msgid "--sched-mc param out of range [0-%d]\n" 742 + msgstr "--sched-mc პარამეტრი დიაპაზონიდან [0-%d]\n" 743 + 744 + #: utils/cpupower-set.c:102 745 + #, c-format 746 + msgid "--sched-smt param out of range [0-%d]\n" 747 + msgstr "--sched-smt პარამეტრი დიაპაზონიდან [0-%d]\n" 748 + 749 + #: utils/cpupower-set.c:121 750 + #, c-format 751 + msgid "Error setting sched-mc %s\n" 752 + msgstr "შეცდომა sched-mc -ის დაყენებისას: %s\n" 753 + 754 + #: utils/cpupower-set.c:127 755 + #, c-format 756 + msgid "Error setting sched-smt %s\n" 757 + msgstr "შეცდომა sched-smt-ის დაყენებისას: %s\n" 758 + 759 + #: utils/cpupower-set.c:146 760 + #, c-format 761 + msgid "Error setting perf-bias value on CPU %d\n" 762 + msgstr "%d-ე CPU-ზე perf-bias -ის მნიშვნელობის დაყენების შეცდომა\n" 763 + 764 + #: utils/cpupower-info.c:21 765 + #, c-format 766 + msgid "Usage: cpupower info [ -b ] [ -m ] [ -s ]\n" 767 + msgstr "გამოყენება: cpupower info [ -b ] [ -m ] [ -s ]\n" 768 + 769 + #: utils/cpupower-info.c:23 770 + #, c-format 771 + msgid "" 772 + " -b, --perf-bias Gets CPU's power vs performance policy on some\n" 773 + " Intel models [0-15], see manpage for details\n" 774 + msgstr "" 775 + " -b, --perf-bias [VAL] Intel-ის ზოგიერთ მოდელზე [0-15] CPU-ის კვებასა და " 776 + "წარმადობას შორის დამოკიდებულების მიღება\n" 777 + " მეტი დეტალისთვის იხილეთ სახელმძღვანელო (manpage)\n" 778 + 779 + #: utils/cpupower-info.c:25 780 + #, c-format 781 + msgid " -m, --sched-mc Gets the kernel's multi core scheduler policy.\n" 782 + msgstr "" 783 + " -m, --sched-mc ბირთვის მრავალბირთვიანობის მგეგმავის პოლიტიკის მიღება.\n" 784 + 785 + #: utils/cpupower-info.c:26 786 + #, c-format 787 + msgid "" 788 + " -s, --sched-smt Gets the kernel's thread sibling scheduler policy.\n" 789 + msgstr " -s, --sched-smt ბირთვის ნაკადის დის მგეგმავის პოლიტიკის მიღება.\n" 790 + 791 + #: utils/cpupower-info.c:28 792 + #, c-format 793 + msgid "" 794 + "\n" 795 + "Passing no option will show all info, by default only on core 0\n" 796 + msgstr "" 797 + "\n" 798 + "მნიშვნელობის არ-გადაცემის შემთხვევაში ნაჩვენები იქნება სრული ინფორმაცია. " 799 + "ნაგულისხმევად მხოლოდ ნულოვან ბირთვზე\n" 800 + 801 + #: utils/cpupower-info.c:102 802 + #, c-format 803 + msgid "System's multi core scheduler setting: " 804 + msgstr "სისტემის მრავალბირთვიანობის მმართველის პარამეტრი: " 805 + 806 + #. if sysfs file is missing it's: errno == ENOENT 807 + #: utils/cpupower-info.c:105 utils/cpupower-info.c:114 808 + #, c-format 809 + msgid "not supported\n" 810 + msgstr "მხარდაუჭერელია\n" 811 + 812 + #: utils/cpupower-info.c:111 813 + #, c-format 814 + msgid "System's thread sibling scheduler setting: " 815 + msgstr "სისტემის ნაკადის დის მართვის პარამეტრი: " 816 + 817 + #: utils/cpupower-info.c:126 818 + #, c-format 819 + msgid "Intel's performance bias setting needs root privileges\n" 820 + msgstr "Intel-ის წარმადობის bias-ის დაყენებას root-ის პრივილეგიები სჭირდება\n" 821 + 822 + #: utils/cpupower-info.c:128 823 + #, c-format 824 + msgid "System does not support Intel's performance bias setting\n" 825 + msgstr "" 826 + "სისტემას intel-ის performance bias-ის დაყენების მხარდაჭერა არ გააჩნია\n" 827 + 828 + #: utils/cpupower-info.c:147 829 + #, c-format 830 + msgid "Could not read perf-bias value\n" 831 + msgstr "შეცდომა perf-bias -ის მნიშვნელობის წაკითხვისას\n" 832 + 833 + #: utils/cpupower-info.c:150 834 + #, c-format 835 + msgid "perf-bias: %d\n" 836 + msgstr "perf-bias: %d\n" 837 + 838 + #: utils/cpuidle-info.c:28 839 + #, c-format 840 + msgid "Analyzing CPU %d:\n" 841 + msgstr "%d-ე CPU -ის ანალიზი:\n" 842 + 843 + #: utils/cpuidle-info.c:32 844 + #, c-format 845 + msgid "CPU %u: No idle states\n" 846 + msgstr "CPU %u: უქმი მდგომარეობების გარეშე\n" 847 + 848 + #: utils/cpuidle-info.c:36 849 + #, c-format 850 + msgid "CPU %u: Can't read idle state info\n" 851 + msgstr "CPU %u: უქმი მდგომარეობის ინფორმაციის წაკითხვა შეუძლებელია\n" 852 + 853 + #: utils/cpuidle-info.c:41 854 + #, c-format 855 + msgid "Could not determine max idle state %u\n" 856 + msgstr "მაქსიმალური უქმე მდგომარეობის %u დადგენის შეცდომა\n" 857 + 858 + #: utils/cpuidle-info.c:46 859 + #, c-format 860 + msgid "Number of idle states: %d\n" 861 + msgstr "უქმე მდგომარეობების რაოდენობა: %d\n" 862 + 863 + #: utils/cpuidle-info.c:48 864 + #, c-format 865 + msgid "Available idle states:" 866 + msgstr "ხელმისაწვდომი უქმე მდგომარეობები:" 867 + 868 + #: utils/cpuidle-info.c:71 869 + #, c-format 870 + msgid "Flags/Description: %s\n" 871 + msgstr "ალმები/აღწერა: %s\n" 872 + 873 + #: utils/cpuidle-info.c:74 874 + #, c-format 875 + msgid "Latency: %lu\n" 876 + msgstr "დაყოვება: %lu\n" 877 + 878 + #: utils/cpuidle-info.c:76 879 + #, c-format 880 + msgid "Usage: %lu\n" 881 + msgstr "გამოყენება: %lu\n" 882 + 883 + #: utils/cpuidle-info.c:78 884 + #, c-format 885 + msgid "Duration: %llu\n" 886 + msgstr "ხანგრძლივობა: %llu\n" 887 + 888 + #: utils/cpuidle-info.c:90 889 + #, c-format 890 + msgid "Could not determine cpuidle driver\n" 891 + msgstr "CPUidle-ის დრაივერის დადგენის შეცდომა\n" 892 + 893 + #: utils/cpuidle-info.c:94 894 + #, c-format 895 + msgid "CPUidle driver: %s\n" 896 + msgstr "CPUidle -ის დრაივერი: %s\n" 897 + 898 + #: utils/cpuidle-info.c:99 899 + #, c-format 900 + msgid "Could not determine cpuidle governor\n" 901 + msgstr "CPUidle-ის მმართველის დადგენის შეცდომა\n" 902 + 903 + #: utils/cpuidle-info.c:103 904 + #, c-format 905 + msgid "CPUidle governor: %s\n" 906 + msgstr "CPUidle მმართველი: %s\n" 907 + 908 + #: utils/cpuidle-info.c:122 909 + #, c-format 910 + msgid "CPU %u: Can't read C-state info\n" 911 + msgstr "CPU %u: C-state -ის ინფორმაციის წაკითხვის შეცდომა\n" 912 + 913 + #. printf("Cstates: %d\n", cstates); 914 + #: utils/cpuidle-info.c:127 915 + #, c-format 916 + msgid "active state: C0\n" 917 + msgstr "აქტიური მდგომარეობა: C0\n" 918 + 919 + #: utils/cpuidle-info.c:128 920 + #, c-format 921 + msgid "max_cstate: C%u\n" 922 + msgstr "max_cstate: C%u\n" 923 + 924 + #: utils/cpuidle-info.c:129 925 + #, c-format 926 + msgid "maximum allowed latency: %lu usec\n" 927 + msgstr "მაქსიმალური დასაშვები დაყოვნება: %lu usec\n" 928 + 929 + #: utils/cpuidle-info.c:130 930 + #, c-format 931 + msgid "states:\t\n" 932 + msgstr "მდგომარეობები:\t\n" 933 + 934 + #: utils/cpuidle-info.c:132 935 + #, c-format 936 + msgid " C%d: type[C%d] " 937 + msgstr " C%d: ტიპი[C%d] " 938 + 939 + #: utils/cpuidle-info.c:134 940 + #, c-format 941 + msgid "promotion[--] demotion[--] " 942 + msgstr "promotion[--] demotion[--] " 943 + 944 + #: utils/cpuidle-info.c:135 945 + #, c-format 946 + msgid "latency[%03lu] " 947 + msgstr "დაყოვნება[%03lu] " 948 + 949 + #: utils/cpuidle-info.c:137 950 + #, c-format 951 + msgid "usage[%08lu] " 952 + msgstr "გამოყენება[%08lu] " 953 + 954 + #: utils/cpuidle-info.c:139 955 + #, c-format 956 + msgid "duration[%020Lu] \n" 957 + msgstr "ხანგრძლივობა[%020Lu] \n" 958 + 959 + #: utils/cpuidle-info.c:147 960 + #, c-format 961 + msgid "Usage: cpupower idleinfo [options]\n" 962 + msgstr "გამოყენება: cpupower idleinfo [პარამეტრები]\n" 963 + 964 + #: utils/cpuidle-info.c:149 965 + #, c-format 966 + msgid " -s, --silent Only show general C-state information\n" 967 + msgstr " -s, --silent მხოლოდ ზოგადი C-state -ის ინფორმაციის ჩვენება\n" 968 + 969 + #: utils/cpuidle-info.c:150 970 + #, c-format 971 + msgid "" 972 + " -o, --proc Prints out information like provided by the /proc/" 973 + "acpi/processor/*/power\n" 974 + " interface in older kernels\n" 975 + msgstr "" 976 + " -o, --proc გამოაქვს ინფორმაცია, როგორც ის /proc/acpi/processor/*/" 977 + "power ფაილშია აღწერილი.\n" 978 + " ინტერფეისი ძველ ბირთვებში იყო ხელმისაწვდომი\n" 979 + 980 + #: utils/cpuidle-info.c:209 981 + #, c-format 982 + msgid "You can't specify more than one output-specific argument\n" 983 + msgstr "ერთზე მეტი გამოტანის-შესატყვისი არგუმენტის მითითება აკრძალულია\n"
+2
tools/power/cpupower/utils/builtin.h
··· 8 8 extern int cmd_freq_info(int argc, const char **argv); 9 9 extern int cmd_idle_set(int argc, const char **argv); 10 10 extern int cmd_idle_info(int argc, const char **argv); 11 + extern int cmd_cap_info(int argc, const char **argv); 12 + extern int cmd_cap_set(int argc, const char **argv); 11 13 extern int cmd_monitor(int argc, const char **argv); 12 14 13 15 #endif
+2 -2
tools/power/cpupower/utils/cpufreq-info.c
··· 572 572 573 573 ret = 0; 574 574 575 - /* Default is: show output of CPU 0 only */ 575 + /* Default is: show output of base_cpu only */ 576 576 if (bitmask_isallclear(cpus_chosen)) 577 - bitmask_setbit(cpus_chosen, 0); 577 + bitmask_setbit(cpus_chosen, base_cpu); 578 578 579 579 switch (output_param) { 580 580 case -1:
+2 -2
tools/power/cpupower/utils/cpuidle-info.c
··· 176 176 cpuidle_exit(EXIT_FAILURE); 177 177 } 178 178 179 - /* Default is: show output of CPU 0 only */ 179 + /* Default is: show output of base_cpu only */ 180 180 if (bitmask_isallclear(cpus_chosen)) 181 - bitmask_setbit(cpus_chosen, 0); 181 + bitmask_setbit(cpus_chosen, base_cpu); 182 182 183 183 if (output_param == 0) 184 184 cpuidle_general_output();
+2 -2
tools/power/cpupower/utils/cpupower-info.c
··· 67 67 if (!params.params) 68 68 params.params = 0x7; 69 69 70 - /* Default is: show output of CPU 0 only */ 70 + /* Default is: show output of base_cpu only */ 71 71 if (bitmask_isallclear(cpus_chosen)) 72 - bitmask_setbit(cpus_chosen, 0); 72 + bitmask_setbit(cpus_chosen, base_cpu); 73 73 74 74 /* Add more per cpu options here */ 75 75 if (!params.perf_bias)
+1
tools/power/cpupower/utils/cpupower.c
··· 54 54 { "frequency-set", cmd_freq_set, 1 }, 55 55 { "idle-info", cmd_idle_info, 0 }, 56 56 { "idle-set", cmd_idle_set, 1 }, 57 + { "powercap-info", cmd_cap_info, 0 }, 57 58 { "set", cmd_set, 1 }, 58 59 { "info", cmd_info, 0 }, 59 60 { "monitor", cmd_monitor, 0 },
+4 -3
tools/power/cpupower/utils/idle_monitor/cpupower-monitor.c
··· 459 459 print_results(1, cpu); 460 460 } 461 461 462 - for (num = 0; num < avail_monitors; num++) 463 - monitors[num]->unregister(); 464 - 462 + for (num = 0; num < avail_monitors; num++) { 463 + if (monitors[num]->unregister) 464 + monitors[num]->unregister(); 465 + } 465 466 cpu_topology_release(cpu_top); 466 467 return 0; 467 468 }
+1
tools/power/cpupower/utils/idle_monitor/idle_monitors.def
··· 4 4 DEF(intel_snb) 5 5 DEF(intel_hsw_ext) 6 6 DEF(mperf) 7 + DEF(rapl) 7 8 #endif 8 9 DEF(cpuidle_sysfs)
+148
tools/power/cpupower/utils/idle_monitor/rapl_monitor.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* 3 + * (C) 2016 SUSE Software Solutions GmbH 4 + * Thomas Renninger <trenn@suse.de> 5 + */ 6 + 7 + #if defined(__i386__) || defined(__x86_64__) 8 + 9 + #include <stdio.h> 10 + #include <stdlib.h> 11 + #include <stdint.h> 12 + #include <time.h> 13 + #include <string.h> 14 + 15 + #include <pci/pci.h> 16 + 17 + #include "idle_monitor/cpupower-monitor.h" 18 + #include "helpers/helpers.h" 19 + #include "powercap.h" 20 + 21 + #define MAX_RAPL_ZONES 10 22 + 23 + int rapl_zone_count; 24 + cstate_t rapl_zones[MAX_RAPL_ZONES]; 25 + struct powercap_zone *rapl_zones_pt[MAX_RAPL_ZONES] = { 0 }; 26 + 27 + unsigned long long rapl_zone_previous_count[MAX_RAPL_ZONES]; 28 + unsigned long long rapl_zone_current_count[MAX_RAPL_ZONES]; 29 + unsigned long long rapl_max_count; 30 + 31 + static int rapl_get_count_uj(unsigned int id, unsigned long long *count, 32 + unsigned int cpu) 33 + { 34 + if (rapl_zones_pt[id] == NULL) 35 + /* error */ 36 + return -1; 37 + 38 + *count = rapl_zone_current_count[id] - rapl_zone_previous_count[id]; 39 + 40 + return 0; 41 + } 42 + 43 + static int powercap_count_zones(struct powercap_zone *zone) 44 + { 45 + uint64_t val; 46 + int uj; 47 + 48 + if (rapl_zone_count >= MAX_RAPL_ZONES) 49 + return -1; 50 + 51 + if (!zone->has_energy_uj) 52 + return 0; 53 + 54 + printf("%s\n", zone->sys_name); 55 + uj = powercap_get_energy_uj(zone, &val); 56 + printf("%d\n", uj); 57 + 58 + strncpy(rapl_zones[rapl_zone_count].name, zone->name, CSTATE_NAME_LEN - 1); 59 + strcpy(rapl_zones[rapl_zone_count].desc, ""); 60 + rapl_zones[rapl_zone_count].id = rapl_zone_count; 61 + rapl_zones[rapl_zone_count].range = RANGE_MACHINE; 62 + rapl_zones[rapl_zone_count].get_count = rapl_get_count_uj; 63 + rapl_zones_pt[rapl_zone_count] = zone; 64 + rapl_zone_count++; 65 + 66 + return 0; 67 + } 68 + 69 + static int rapl_start(void) 70 + { 71 + int i, ret; 72 + uint64_t uj_val; 73 + 74 + for (i = 0; i < rapl_zone_count; i++) { 75 + ret = powercap_get_energy_uj(rapl_zones_pt[i], &uj_val); 76 + if (ret) 77 + return ret; 78 + rapl_zone_previous_count[i] = uj_val; 79 + } 80 + 81 + return 0; 82 + } 83 + 84 + static int rapl_stop(void) 85 + { 86 + int i; 87 + uint64_t uj_val; 88 + 89 + for (i = 0; i < rapl_zone_count; i++) { 90 + int ret; 91 + 92 + ret = powercap_get_energy_uj(rapl_zones_pt[i], &uj_val); 93 + if (ret) 94 + return ret; 95 + rapl_zone_current_count[i] = uj_val; 96 + if (rapl_max_count < uj_val) 97 + rapl_max_count = uj_val - rapl_zone_previous_count[i]; 98 + } 99 + return 0; 100 + } 101 + 102 + struct cpuidle_monitor *rapl_register(void) 103 + { 104 + struct powercap_zone *root_zone; 105 + char line[MAX_LINE_LEN] = ""; 106 + int ret, val; 107 + 108 + ret = powercap_get_driver(line, MAX_LINE_LEN); 109 + if (ret < 0) { 110 + dprint("No powercapping driver loaded\n"); 111 + return NULL; 112 + } 113 + 114 + dprint("Driver: %s\n", line); 115 + ret = powercap_get_enabled(&val); 116 + if (ret < 0) 117 + return NULL; 118 + if (!val) { 119 + dprint("Powercapping is disabled\n"); 120 + return NULL; 121 + } 122 + 123 + dprint("Powercap domain hierarchy:\n\n"); 124 + root_zone = powercap_init_zones(); 125 + 126 + if (root_zone == NULL) { 127 + dprint("No powercap info found\n"); 128 + return NULL; 129 + } 130 + 131 + powercap_walk_zones(root_zone, powercap_count_zones); 132 + rapl_monitor.hw_states_num = rapl_zone_count; 133 + 134 + return &rapl_monitor; 135 + } 136 + 137 + struct cpuidle_monitor rapl_monitor = { 138 + .name = "RAPL", 139 + .hw_states = rapl_zones, 140 + .hw_states_num = 0, 141 + .start = rapl_start, 142 + .stop = rapl_stop, 143 + .do_register = rapl_register, 144 + .flags.needs_root = 0, 145 + .overflow_s = 60 * 60 * 24 * 100, /* To be implemented */ 146 + }; 147 + 148 + #endif
+117
tools/power/cpupower/utils/powercap-info.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* 3 + * (C) 2016 SUSE Software Solutions GmbH 4 + * Thomas Renninger <trenn@suse.de> 5 + */ 6 + 7 + #include <unistd.h> 8 + #include <stdio.h> 9 + #include <errno.h> 10 + #include <stdlib.h> 11 + #include <stdint.h> 12 + #include <string.h> 13 + 14 + #include <getopt.h> 15 + 16 + #include "powercap.h" 17 + #include "helpers/helpers.h" 18 + 19 + int powercap_show_all; 20 + 21 + static struct option info_opts[] = { 22 + { "all", no_argument, NULL, 'a'}, 23 + { }, 24 + }; 25 + 26 + static int powercap_print_one_zone(struct powercap_zone *zone) 27 + { 28 + int mode, i, ret = 0; 29 + char pr_prefix[1024] = ""; 30 + 31 + for (i = 0; i < zone->tree_depth && i < POWERCAP_MAX_TREE_DEPTH; i++) 32 + strcat(pr_prefix, "\t"); 33 + 34 + printf("%sZone: %s", pr_prefix, zone->name); 35 + ret = powercap_zone_get_enabled(zone, &mode); 36 + if (ret < 0) 37 + return ret; 38 + printf(" (%s)\n", mode ? "enabled" : "disabled"); 39 + 40 + if (zone->has_power_uw) 41 + printf(_("%sPower can be monitored in micro Jules\n"), 42 + pr_prefix); 43 + 44 + if (zone->has_energy_uj) 45 + printf(_("%sPower can be monitored in micro Watts\n"), 46 + pr_prefix); 47 + 48 + printf("\n"); 49 + 50 + if (ret != 0) 51 + return ret; 52 + return ret; 53 + } 54 + 55 + static int powercap_show(void) 56 + { 57 + struct powercap_zone *root_zone; 58 + char line[MAX_LINE_LEN] = ""; 59 + int ret, val; 60 + 61 + ret = powercap_get_driver(line, MAX_LINE_LEN); 62 + if (ret < 0) { 63 + printf(_("No powercapping driver loaded\n")); 64 + return ret; 65 + } 66 + 67 + printf("Driver: %s\n", line); 68 + ret = powercap_get_enabled(&val); 69 + if (ret < 0) 70 + return ret; 71 + if (!val) { 72 + printf(_("Powercapping is disabled\n")); 73 + return -1; 74 + } 75 + 76 + printf(_("Powercap domain hierarchy:\n\n")); 77 + root_zone = powercap_init_zones(); 78 + 79 + if (root_zone == NULL) { 80 + printf(_("No powercap info found\n")); 81 + return 1; 82 + } 83 + 84 + powercap_walk_zones(root_zone, powercap_print_one_zone); 85 + 86 + return 0; 87 + } 88 + 89 + int cmd_cap_set(int argc, char **argv) 90 + { 91 + return 0; 92 + }; 93 + int cmd_cap_info(int argc, char **argv) 94 + { 95 + int ret = 0, cont = 1; 96 + 97 + do { 98 + ret = getopt_long(argc, argv, "a", info_opts, NULL); 99 + switch (ret) { 100 + case '?': 101 + cont = 0; 102 + break; 103 + case -1: 104 + cont = 0; 105 + break; 106 + case 'a': 107 + powercap_show_all = 1; 108 + break; 109 + default: 110 + fprintf(stderr, _("invalid or unknown argument\n")); 111 + return EXIT_FAILURE; 112 + } 113 + } while (cont); 114 + 115 + powercap_show(); 116 + return 0; 117 + }