Skip to content

Commit c7538f3

Browse files
zhang-ruilenb
authored andcommitted
tools/power turbostat: Cache graphics sysfs file descriptors during probe
Snapshots of the graphics sysfs knobs are taken based on file descriptors. To optimize this process, open the files and cache the file descriptors during the graphics probe phase. As a result, the previously cached pathnames become redundant and are removed. This change aims to streamline the code without altering its functionality. No functional change intended. Signed-off-by: Zhang Rui <rui.zhang@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
1 parent d071004 commit c7538f3

File tree

1 file changed

+32
-50
lines changed

1 file changed

+32
-50
lines changed

tools/power/x86/turbostat/turbostat.c

Lines changed: 32 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,6 @@ enum gfx_sysfs_idx {
376376
};
377377

378378
struct gfx_sysfs_info {
379-
const char *path;
380379
FILE *fp;
381380
unsigned int val;
382381
unsigned long long val_ull;
@@ -5766,10 +5765,7 @@ int snapshot_graphics(int idx)
57665765
{
57675766
int retval;
57685767

5769-
if (gfx_info[idx].fp == NULL)
5770-
gfx_info[idx].fp = fopen_or_die(gfx_info[idx].path, "r");
5771-
else
5772-
rewind(gfx_info[idx].fp);
5768+
rewind(gfx_info[idx].fp);
57735769

57745770
switch (idx) {
57755771
case GFX_rc6:
@@ -6474,14 +6470,19 @@ static void probe_intel_uncore_frequency(void)
64746470
probe_intel_uncore_frequency_legacy();
64756471
}
64766472

6473+
static void set_graphics_fp(char *path, int idx)
6474+
{
6475+
if (!access(path, R_OK))
6476+
gfx_info[idx].fp = fopen_or_die(path, "r");
6477+
}
6478+
64776479
static void probe_graphics(void)
64786480
{
64796481
/* Xe graphics sysfs knobs */
64806482
if (!access("/sys/class/drm/card0/device/tile0/gt0/gtidle/idle_residency_ms", R_OK)) {
64816483
FILE *fp;
64826484
char buf[8];
64836485
bool gt0_is_gt;
6484-
int idx;
64856486

64866487
fp = fopen("/sys/class/drm/card0/device/tile0/gt0/gtidle/name", "r");
64876488
if (!fp)
@@ -6500,81 +6501,62 @@ static void probe_graphics(void)
65006501
else
65016502
goto next;
65026503

6503-
idx = gt0_is_gt ? GFX_rc6 : SAM_mc6;
6504-
gfx_info[idx].path = "/sys/class/drm/card0/device/tile0/gt0/gtidle/idle_residency_ms";
6504+
set_graphics_fp("/sys/class/drm/card0/device/tile0/gt0/gtidle/idle_residency_ms", gt0_is_gt ? GFX_rc6 : SAM_mc6);
65056505

6506-
idx = gt0_is_gt ? GFX_MHz : SAM_MHz;
6507-
if (!access("/sys/class/drm/card0/device/tile0/gt0/freq0/cur_freq", R_OK))
6508-
gfx_info[idx].path = "/sys/class/drm/card0/device/tile0/gt0/freq0/cur_freq";
6506+
set_graphics_fp("/sys/class/drm/card0/device/tile0/gt0/freq0/cur_freq", gt0_is_gt ? GFX_MHz : SAM_MHz);
65096507

6510-
idx = gt0_is_gt ? GFX_ACTMHz : SAM_ACTMHz;
6511-
if (!access("/sys/class/drm/card0/device/tile0/gt0/freq0/act_freq", R_OK))
6512-
gfx_info[idx].path = "/sys/class/drm/card0/device/tile0/gt0/freq0/act_freq";
6508+
set_graphics_fp("/sys/class/drm/card0/device/tile0/gt0/freq0/act_freq", gt0_is_gt ? GFX_ACTMHz : SAM_ACTMHz);
65136509

6514-
idx = gt0_is_gt ? SAM_mc6 : GFX_rc6;
6515-
if (!access("/sys/class/drm/card0/device/tile0/gt1/gtidle/idle_residency_ms", R_OK))
6516-
gfx_info[idx].path = "/sys/class/drm/card0/device/tile0/gt1/gtidle/idle_residency_ms";
6510+
set_graphics_fp("/sys/class/drm/card0/device/tile0/gt1/gtidle/idle_residency_ms", gt0_is_gt ? SAM_mc6 : GFX_rc6);
65176511

6518-
idx = gt0_is_gt ? SAM_MHz : GFX_MHz;
6519-
if (!access("/sys/class/drm/card0/device/tile0/gt1/freq0/cur_freq", R_OK))
6520-
gfx_info[idx].path = "/sys/class/drm/card0/device/tile0/gt1/freq0/cur_freq";
6512+
set_graphics_fp("/sys/class/drm/card0/device/tile0/gt1/freq0/cur_freq", gt0_is_gt ? SAM_MHz : GFX_MHz);
65216513

6522-
idx = gt0_is_gt ? SAM_ACTMHz : GFX_ACTMHz;
6523-
if (!access("/sys/class/drm/card0/device/tile0/gt1/freq0/act_freq", R_OK))
6524-
gfx_info[idx].path = "/sys/class/drm/card0/device/tile0/gt1/freq0/act_freq";
6514+
set_graphics_fp("/sys/class/drm/card0/device/tile0/gt1/freq0/act_freq", gt0_is_gt ? SAM_ACTMHz : GFX_ACTMHz);
65256515

65266516
goto end;
65276517
}
65286518

65296519
next:
65306520
/* New i915 graphics sysfs knobs */
65316521
if (!access("/sys/class/drm/card0/gt/gt0/rc6_residency_ms", R_OK)) {
6532-
gfx_info[GFX_rc6].path = "/sys/class/drm/card0/gt/gt0/rc6_residency_ms";
6522+
set_graphics_fp("/sys/class/drm/card0/gt/gt0/rc6_residency_ms", GFX_rc6);
65336523

6534-
if (!access("/sys/class/drm/card0/gt/gt0/rps_cur_freq_mhz", R_OK))
6535-
gfx_info[GFX_MHz].path = "/sys/class/drm/card0/gt/gt0/rps_cur_freq_mhz";
6524+
set_graphics_fp("/sys/class/drm/card0/gt/gt0/rps_cur_freq_mhz", GFX_MHz);
65366525

6537-
if (!access("/sys/class/drm/card0/gt/gt0/rps_act_freq_mhz", R_OK))
6538-
gfx_info[GFX_ACTMHz].path = "/sys/class/drm/card0/gt/gt0/rps_act_freq_mhz";
6526+
set_graphics_fp("/sys/class/drm/card0/gt/gt0/rps_act_freq_mhz", GFX_ACTMHz);
65396527

6540-
if (!access("/sys/class/drm/card0/gt/gt1/rc6_residency_ms", R_OK))
6541-
gfx_info[SAM_mc6].path = "/sys/class/drm/card0/gt/gt1/rc6_residency_ms";
6528+
set_graphics_fp("/sys/class/drm/card0/gt/gt1/rc6_residency_ms", SAM_mc6);
65426529

6543-
if (!access("/sys/class/drm/card0/gt/gt1/rps_cur_freq_mhz", R_OK))
6544-
gfx_info[SAM_MHz].path = "/sys/class/drm/card0/gt/gt1/rps_cur_freq_mhz";
6530+
set_graphics_fp("/sys/class/drm/card0/gt/gt1/rps_cur_freq_mhz", SAM_MHz);
65456531

6546-
if (!access("/sys/class/drm/card0/gt/gt1/rps_act_freq_mhz", R_OK))
6547-
gfx_info[SAM_ACTMHz].path = "/sys/class/drm/card0/gt/gt1/rps_act_freq_mhz";
6532+
set_graphics_fp("/sys/class/drm/card0/gt/gt1/rps_act_freq_mhz", SAM_ACTMHz);
65486533

65496534
goto end;
65506535
}
65516536

65526537
/* Fall back to traditional i915 graphics sysfs knobs */
6553-
if (!access("/sys/class/drm/card0/power/rc6_residency_ms", R_OK))
6554-
gfx_info[GFX_rc6].path = "/sys/class/drm/card0/power/rc6_residency_ms";
6538+
set_graphics_fp("/sys/class/drm/card0/power/rc6_residency_ms", GFX_rc6);
65556539

6556-
if (!access("/sys/class/drm/card0/gt_cur_freq_mhz", R_OK))
6557-
gfx_info[GFX_MHz].path = "/sys/class/drm/card0/gt_cur_freq_mhz";
6558-
else if (!access("/sys/class/graphics/fb0/device/drm/card0/gt_cur_freq_mhz", R_OK))
6559-
gfx_info[GFX_MHz].path = "/sys/class/graphics/fb0/device/drm/card0/gt_cur_freq_mhz";
6540+
set_graphics_fp("/sys/class/drm/card0/gt_cur_freq_mhz", GFX_MHz);
6541+
if (!gfx_info[GFX_MHz].fp)
6542+
set_graphics_fp("/sys/class/graphics/fb0/device/drm/card0/gt_cur_freq_mhz", GFX_MHz);
65606543

6561-
if (!access("/sys/class/drm/card0/gt_act_freq_mhz", R_OK))
6562-
gfx_info[GFX_ACTMHz].path = "/sys/class/drm/card0/gt_act_freq_mhz";
6563-
else if (!access("/sys/class/graphics/fb0/device/drm/card0/gt_act_freq_mhz", R_OK))
6564-
gfx_info[GFX_ACTMHz].path = "/sys/class/graphics/fb0/device/drm/card0/gt_act_freq_mhz";
6544+
set_graphics_fp("/sys/class/drm/card0/gt_act_freq_mhz", GFX_ACTMHz);
6545+
if (!gfx_info[GFX_ACTMHz].fp)
6546+
set_graphics_fp("/sys/class/graphics/fb0/device/drm/card0/gt_act_freq_mhz", GFX_ACTMHz);
65656547

65666548
end:
6567-
if (gfx_info[GFX_rc6].path)
6549+
if (gfx_info[GFX_rc6].fp)
65686550
BIC_PRESENT(BIC_GFX_rc6);
6569-
if (gfx_info[GFX_MHz].path)
6551+
if (gfx_info[GFX_MHz].fp)
65706552
BIC_PRESENT(BIC_GFXMHz);
6571-
if (gfx_info[GFX_ACTMHz].path)
6553+
if (gfx_info[GFX_ACTMHz].fp)
65726554
BIC_PRESENT(BIC_GFXACTMHz);
6573-
if (gfx_info[SAM_mc6].path)
6555+
if (gfx_info[SAM_mc6].fp)
65746556
BIC_PRESENT(BIC_SAM_mc6);
6575-
if (gfx_info[SAM_MHz].path)
6557+
if (gfx_info[SAM_MHz].fp)
65766558
BIC_PRESENT(BIC_SAMMHz);
6577-
if (gfx_info[SAM_ACTMHz].path)
6559+
if (gfx_info[SAM_ACTMHz].fp)
65786560
BIC_PRESENT(BIC_SAMACTMHz);
65796561
}
65806562

0 commit comments

Comments
 (0)