turbostat.c (6b398625ae6da31783e28b74458c14d2b921ec0f) | turbostat.c (0fc521bc3339b029b2ac172a5b00bd7c9867e83d) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * turbostat -- show CPU frequency and C-state residency 4 * on modern Intel and AMD processors. 5 * 6 * Copyright (c) 2021 Intel Corporation. 7 * Len Brown <len.brown@intel.com> 8 */ --- 672 unchanged lines hidden (view full) --- 681#define DO_BIC(COUNTER_NAME) (bic_enabled & bic_present & COUNTER_NAME) 682#define DO_BIC_READ(COUNTER_NAME) (bic_present & COUNTER_NAME) 683#define ENABLE_BIC(COUNTER_NAME) (bic_enabled |= COUNTER_NAME) 684#define BIC_PRESENT(COUNTER_BIT) (bic_present |= COUNTER_BIT) 685#define BIC_NOT_PRESENT(COUNTER_BIT) (bic_present &= ~COUNTER_BIT) 686#define BIC_IS_ENABLED(COUNTER_BIT) (bic_enabled & COUNTER_BIT) 687 688#define MAX_DEFERRED 16 | 1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * turbostat -- show CPU frequency and C-state residency 4 * on modern Intel and AMD processors. 5 * 6 * Copyright (c) 2021 Intel Corporation. 7 * Len Brown <len.brown@intel.com> 8 */ --- 672 unchanged lines hidden (view full) --- 681#define DO_BIC(COUNTER_NAME) (bic_enabled & bic_present & COUNTER_NAME) 682#define DO_BIC_READ(COUNTER_NAME) (bic_present & COUNTER_NAME) 683#define ENABLE_BIC(COUNTER_NAME) (bic_enabled |= COUNTER_NAME) 684#define BIC_PRESENT(COUNTER_BIT) (bic_present |= COUNTER_BIT) 685#define BIC_NOT_PRESENT(COUNTER_BIT) (bic_present &= ~COUNTER_BIT) 686#define BIC_IS_ENABLED(COUNTER_BIT) (bic_enabled & COUNTER_BIT) 687 688#define MAX_DEFERRED 16 |
689char *deferred_add_names[MAX_DEFERRED]; |
|
689char *deferred_skip_names[MAX_DEFERRED]; | 690char *deferred_skip_names[MAX_DEFERRED]; |
691int deferred_add_index; |
|
690int deferred_skip_index; 691 692/* 693 * HIDE_LIST - hide this list of counters, show the rest [default] 694 * SHOW_LIST - show this list of counters, hide the rest 695 */ 696enum show_hide_mode { SHOW_LIST, HIDE_LIST } global_show_hide_mode = HIDE_LIST; 697 --- 77 unchanged lines hidden (view full) --- 775 } else if (!strcmp(name_list, "other")) { 776 retval |= BIC_OTHER; 777 break; 778 } 779 780 } 781 if (i == MAX_BIC) { 782 if (mode == SHOW_LIST) { | 692int deferred_skip_index; 693 694/* 695 * HIDE_LIST - hide this list of counters, show the rest [default] 696 * SHOW_LIST - show this list of counters, hide the rest 697 */ 698enum show_hide_mode { SHOW_LIST, HIDE_LIST } global_show_hide_mode = HIDE_LIST; 699 --- 77 unchanged lines hidden (view full) --- 777 } else if (!strcmp(name_list, "other")) { 778 retval |= BIC_OTHER; 779 break; 780 } 781 782 } 783 if (i == MAX_BIC) { 784 if (mode == SHOW_LIST) { |
783 fprintf(stderr, "Invalid counter name: %s\n", name_list); 784 exit(-1); | 785 deferred_add_names[deferred_add_index++] = name_list; 786 if (deferred_add_index >= MAX_DEFERRED) { 787 fprintf(stderr, "More than max %d un-recognized --add options '%s'\n", 788 MAX_DEFERRED, name_list); 789 help(); 790 exit(1); 791 } 792 } else { 793 deferred_skip_names[deferred_skip_index++] = name_list; 794 if (debug) 795 fprintf(stderr, "deferred \"%s\"\n", name_list); 796 if (deferred_skip_index >= MAX_DEFERRED) { 797 fprintf(stderr, "More than max %d un-recognized --skip options '%s'\n", 798 MAX_DEFERRED, name_list); 799 help(); 800 exit(1); 801 } |
785 } | 802 } |
786 deferred_skip_names[deferred_skip_index++] = name_list; 787 if (debug) 788 fprintf(stderr, "deferred \"%s\"\n", name_list); 789 if (deferred_skip_index >= MAX_DEFERRED) { 790 fprintf(stderr, "More than max %d un-recognized --skip options '%s'\n", 791 MAX_DEFERRED, name_list); 792 help(); 793 exit(1); 794 } | |
795 } 796 797 name_list = comma; 798 if (name_list) 799 name_list++; 800 801 } 802 return retval; --- 5344 unchanged lines hidden (view full) --- 6147 fail++; 6148 6149 if (fail) { 6150 help(); 6151 exit(1); 6152 } 6153} 6154 | 803 } 804 805 name_list = comma; 806 if (name_list) 807 name_list++; 808 809 } 810 return retval; --- 5344 unchanged lines hidden (view full) --- 6155 fail++; 6156 6157 if (fail) { 6158 help(); 6159 exit(1); 6160 } 6161} 6162 |
6163int is_deferred_add(char *name) 6164{ 6165 int i; 6166 6167 for (i = 0; i < deferred_add_index; ++i) 6168 if (!strcmp(name, deferred_add_names[i])) 6169 return 1; 6170 return 0; 6171} 6172 |
|
6155int is_deferred_skip(char *name) 6156{ 6157 int i; 6158 6159 for (i = 0; i < deferred_skip_index; ++i) 6160 if (!strcmp(name, deferred_skip_names[i])) 6161 return 1; 6162 return 0; 6163} 6164 6165void probe_sysfs(void) 6166{ 6167 char path[64]; 6168 char name_buf[16]; 6169 FILE *input; 6170 int state; 6171 char *sp; 6172 | 6173int is_deferred_skip(char *name) 6174{ 6175 int i; 6176 6177 for (i = 0; i < deferred_skip_index; ++i) 6178 if (!strcmp(name, deferred_skip_names[i])) 6179 return 1; 6180 return 0; 6181} 6182 6183void probe_sysfs(void) 6184{ 6185 char path[64]; 6186 char name_buf[16]; 6187 FILE *input; 6188 int state; 6189 char *sp; 6190 |
6173 if (!DO_BIC(BIC_sysfs)) 6174 return; 6175 | |
6176 for (state = 10; state >= 0; --state) { 6177 6178 sprintf(path, "/sys/devices/system/cpu/cpu%d/cpuidle/state%d/name", base_cpu, state); 6179 input = fopen(path, "r"); 6180 if (input == NULL) 6181 continue; 6182 if (!fgets(name_buf, sizeof(name_buf), input)) 6183 err(1, "%s: failed to read file", path); --- 6 unchanged lines hidden (view full) --- 6190 *(sp + 1) = '\0'; 6191 6192 remove_underbar(name_buf); 6193 6194 fclose(input); 6195 6196 sprintf(path, "cpuidle/state%d/time", state); 6197 | 6191 for (state = 10; state >= 0; --state) { 6192 6193 sprintf(path, "/sys/devices/system/cpu/cpu%d/cpuidle/state%d/name", base_cpu, state); 6194 input = fopen(path, "r"); 6195 if (input == NULL) 6196 continue; 6197 if (!fgets(name_buf, sizeof(name_buf), input)) 6198 err(1, "%s: failed to read file", path); --- 6 unchanged lines hidden (view full) --- 6205 *(sp + 1) = '\0'; 6206 6207 remove_underbar(name_buf); 6208 6209 fclose(input); 6210 6211 sprintf(path, "cpuidle/state%d/time", state); 6212 |
6213 if (!DO_BIC(BIC_sysfs) && !is_deferred_add(name_buf)) 6214 continue; 6215 |
|
6198 if (is_deferred_skip(name_buf)) 6199 continue; 6200 6201 add_counter(0, path, name_buf, 64, SCOPE_CPU, COUNTER_USEC, FORMAT_PERCENT, SYSFS_PERCPU); 6202 } 6203 6204 for (state = 10; state >= 0; --state) { 6205 --- 9 unchanged lines hidden (view full) --- 6215 sp = strchrnul(name_buf, '\n'); 6216 *sp = '\0'; 6217 fclose(input); 6218 6219 remove_underbar(name_buf); 6220 6221 sprintf(path, "cpuidle/state%d/usage", state); 6222 | 6216 if (is_deferred_skip(name_buf)) 6217 continue; 6218 6219 add_counter(0, path, name_buf, 64, SCOPE_CPU, COUNTER_USEC, FORMAT_PERCENT, SYSFS_PERCPU); 6220 } 6221 6222 for (state = 10; state >= 0; --state) { 6223 --- 9 unchanged lines hidden (view full) --- 6233 sp = strchrnul(name_buf, '\n'); 6234 *sp = '\0'; 6235 fclose(input); 6236 6237 remove_underbar(name_buf); 6238 6239 sprintf(path, "cpuidle/state%d/usage", state); 6240 |
6241 if (!DO_BIC(BIC_sysfs) && !is_deferred_add(name_buf)) 6242 continue; 6243 |
|
6223 if (is_deferred_skip(name_buf)) 6224 continue; 6225 6226 add_counter(0, path, name_buf, 64, SCOPE_CPU, COUNTER_ITEMS, FORMAT_DELTA, SYSFS_PERCPU); 6227 } 6228 6229} 6230 --- 241 unchanged lines hidden --- | 6244 if (is_deferred_skip(name_buf)) 6245 continue; 6246 6247 add_counter(0, path, name_buf, 64, SCOPE_CPU, COUNTER_ITEMS, FORMAT_DELTA, SYSFS_PERCPU); 6248 } 6249 6250} 6251 --- 241 unchanged lines hidden --- |