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 ---