powertop: code shrink
function old new delta read_cstate_counts 355 360 +5 print_intel_cstates 494 499 +5 process_timer_stats 554 480 -74 process_irq_counts 765 530 -235 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/2 up/down: 10/-309) Total: -299 bytes Signed-off-by: Maksym Kryzhanovskyy <xmaks@email.cz> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
854738d39d
commit
6052c2b0be
@ -169,7 +169,7 @@ static void read_cstate_counts(ullong *usage, ullong *duration)
|
||||
if (len < 3 || len > BIG_SYSNAME_LEN)
|
||||
continue;
|
||||
|
||||
sprintf(buf, "/proc/acpi/processor/%s/power", d->d_name);
|
||||
sprintf(buf, "%s/%s/power", "/proc/acpi/processor", d->d_name);
|
||||
fp = fopen_for_read(buf);
|
||||
if (!fp)
|
||||
continue;
|
||||
@ -321,28 +321,17 @@ static void process_irq_counts(void)
|
||||
/* 0: 143646045 153901007 IO-APIC-edge timer
|
||||
* ^
|
||||
*/
|
||||
*p = '\0';
|
||||
/* Deal with non-maskable interrupts -- make up fake numbers */
|
||||
nr = -1;
|
||||
if (buf[0] != ' ' && !isdigit(buf[0])) {
|
||||
//TODO: optimize
|
||||
if (strncmp(buf, "NMI:", 4) == 0)
|
||||
nr = 20000;
|
||||
if (strncmp(buf, "RES:", 4) == 0)
|
||||
nr = 20001;
|
||||
if (strncmp(buf, "CAL:", 4) == 0)
|
||||
nr = 20002;
|
||||
if (strncmp(buf, "TLB:", 4) == 0)
|
||||
nr = 20003;
|
||||
if (strncmp(buf, "TRM:", 4) == 0)
|
||||
nr = 20004;
|
||||
if (strncmp(buf, "THR:", 4) == 0)
|
||||
nr = 20005;
|
||||
if (strncmp(buf, "SPU:", 4) == 0)
|
||||
nr = 20006;
|
||||
nr = index_in_strings("NMI\0RES\nCAL\0TLB\0TRM\0THR\0SPU\0", buf);
|
||||
if (nr != -1) {
|
||||
nr += 20000;
|
||||
} else {
|
||||
/* bb_strtou doesn't eat leading spaces, using strtoul */
|
||||
nr = strtoul(buf, NULL, 10);
|
||||
}
|
||||
*p = ':';
|
||||
|
||||
if (nr == -1)
|
||||
continue;
|
||||
|
||||
@ -430,33 +419,31 @@ static NOINLINE int process_timer_stats(void)
|
||||
while (fgets(buf, sizeof(buf), fp)) {
|
||||
const char *count, *process, *func;
|
||||
char *p;
|
||||
int cnt;
|
||||
int idx;
|
||||
|
||||
count = skip_whitespace(buf);
|
||||
if (strcmp(strchrnul(count, ' '), " total events") == 0)
|
||||
break;
|
||||
p = strchr(count, ',');
|
||||
if (!p)
|
||||
continue;
|
||||
*p++ = '\0';
|
||||
if (strcmp(strchrnul(count, ' '), " total events") == 0)
|
||||
break;
|
||||
p = skip_whitespace(p); /* points to pid */
|
||||
|
||||
/* Find char ' ', then eat remaining spaces */
|
||||
#define ADVANCE(p) do { \
|
||||
(p) = strchr((p), ' '); \
|
||||
if (!(p)) \
|
||||
continue; \
|
||||
*(p) = '\0'; \
|
||||
(p)++; \
|
||||
(p) = skip_whitespace(p); \
|
||||
} while (0)
|
||||
/* Get process name */
|
||||
ADVANCE(p);
|
||||
if (strchr(count, 'D'))
|
||||
continue; /* deferred */
|
||||
p = skip_whitespace(p); /* points to pid now */
|
||||
process = NULL;
|
||||
get_func_name:
|
||||
p = strchr(p, ' ');
|
||||
if (!p)
|
||||
continue;
|
||||
*p++ = '\0';
|
||||
p = skip_whitespace(p);
|
||||
if (process == NULL) {
|
||||
process = p;
|
||||
/* Get function */
|
||||
ADVANCE(p);
|
||||
goto get_func_name;
|
||||
}
|
||||
func = p;
|
||||
#undef ADVANCE
|
||||
|
||||
//if (strcmp(process, "swapper") == 0
|
||||
// && strcmp(func, "hrtimer_start_range_ns (tick_sched_timer)\n") == 0
|
||||
//) {
|
||||
@ -471,38 +458,29 @@ static NOINLINE int process_timer_stats(void)
|
||||
//if (strcmp(process, "powertop") == 0)
|
||||
// continue;
|
||||
|
||||
if (strcmp(process, "insmod") == 0)
|
||||
process = "[kernel module]";
|
||||
if (strcmp(process, "modprobe") == 0)
|
||||
process = "[kernel module]";
|
||||
if (strcmp(process, "swapper") == 0)
|
||||
process = "<kernel core>";
|
||||
idx = index_in_strings("insmod\0modprobe\0swapper\0", process);
|
||||
if (idx != -1) {
|
||||
process = idx < 2 ? "[kernel module]" : "<kernel core>";
|
||||
}
|
||||
|
||||
strchrnul(p, '\n')[0] = '\0';
|
||||
|
||||
{
|
||||
char *tmp;
|
||||
cnt = bb_strtoull(count, &tmp, 10);
|
||||
p = tmp;
|
||||
}
|
||||
while (*p != '\0') {
|
||||
if (*p++ == 'D') /* deferred */
|
||||
goto skip;
|
||||
}
|
||||
// 46D\01136\0kondemand/1\0do_dbs_timer (delayed_work_timer_fn)
|
||||
// ^ ^ ^
|
||||
// count process func
|
||||
|
||||
//if (strchr(process, '['))
|
||||
sprintf(line, "%15.15s : %s", process, func);
|
||||
//else
|
||||
// sprintf(line, "%s", process);
|
||||
save_line(line, cnt);
|
||||
skip: ;
|
||||
save_line(line, bb_strtoull(count, NULL, 10));
|
||||
}
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
n = 0;
|
||||
#if ENABLE_FEATURE_POWERTOP_PROCIRQ
|
||||
if (strstr(buf, "total events")) {
|
||||
if (strstr(buf, " total events")) {
|
||||
n = bb_strtoull(buf, NULL, 10) / G.total_cpus;
|
||||
if (n > 0 && n < G.interrupt_0) {
|
||||
sprintf(line, " <interrupt> : %s", "extra timer interrupt");
|
||||
@ -566,7 +544,7 @@ static NOINLINE void print_intel_cstates(void)
|
||||
if (!isdigit(d->d_name[3]))
|
||||
continue;
|
||||
|
||||
len = sprintf(fname, "/sys/devices/system/cpu/%s/cpuidle", d->d_name);
|
||||
len = sprintf(fname, "%s/%s/cpuidle", "/sys/devices/system/cpu", d->d_name);
|
||||
dir = opendir(fname);
|
||||
if (!dir)
|
||||
continue;
|
||||
|
Loading…
Reference in New Issue
Block a user