We can use our existing rapl interface that monitors gpu power, to also
sample the other rapl domains such as package, cores and ram.
Signed-off-by: Chris Wilson
Cc: Andi Shyti
---
lib/Makefile.sources| 4 +-
lib/igt_gpu_power.c | 87 -
lib/igt_rapl.c | 69 +++
lib/{igt_gpu_power.h => igt_rapl.h} | 69 ---
lib/meson.build | 2 +-
tests/i915/gem_exec_schedule.c | 39 -
tests/i915/gem_exec_whisper.c | 15 ++---
7 files changed, 155 insertions(+), 130 deletions(-)
delete mode 100644 lib/igt_gpu_power.c
create mode 100644 lib/igt_rapl.c
rename lib/{igt_gpu_power.h => igt_rapl.h} (52%)
diff --git a/lib/Makefile.sources b/lib/Makefile.sources
index cf094ab89..34e0c012d 100644
--- a/lib/Makefile.sources
+++ b/lib/Makefile.sources
@@ -33,8 +33,6 @@ lib_source_list = \
igt_edid.h \
igt_eld.c \
igt_eld.h \
- igt_gpu_power.c \
- igt_gpu_power.h \
igt_gt.c\
igt_gt.h\
igt_gvt.c \
@@ -49,6 +47,8 @@ lib_source_list = \
igt_primes.h\
igt_rand.c \
igt_rand.h \
+ igt_rapl.c \
+ igt_rapl.h \
igt_rc.h\
igt_stats.c \
igt_stats.h \
diff --git a/lib/igt_gpu_power.c b/lib/igt_gpu_power.c
deleted file mode 100644
index 7092b75b3..0
--- a/lib/igt_gpu_power.c
+++ /dev/null
@@ -1,87 +0,0 @@
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include "igt_gpu_power.h"
-#include "igt_perf.h"
-#include "igt_sysfs.h"
-
-struct rapl {
- uint64_t power, type;
- double scale;
-};
-
-static int rapl_parse(struct rapl *r)
-{
- locale_t locale, oldlocale;
- bool result;
- int dir;
-
- memset(r, 0, sizeof(*r));
-
- dir = open("/sys/devices/power", O_RDONLY);
- if (dir < 0)
- return -errno;
-
- /* Replace user environment with plain C to match kernel format */
- locale = newlocale(LC_ALL, "C", 0);
- oldlocale = uselocale(locale);
-
- result = true;
- result &= igt_sysfs_scanf(dir, "type",
- "%"PRIu64, >type) == 1;
- result &= igt_sysfs_scanf(dir, "events/energy-gpu",
- "event=%"PRIx64, >power) == 1;
- result &= igt_sysfs_scanf(dir, "events/energy-gpu.scale",
- "%lf", >scale) == 1;
-
- uselocale(oldlocale);
- freelocale(locale);
-
- close(dir);
-
- if (!result)
- return -EINVAL;
-
- if (isnan(r->scale) || !r->scale)
- return -ERANGE;
-
- return 0;
-}
-
-int gpu_power_open(struct gpu_power *power)
-{
- struct rapl r;
-
- power->fd = rapl_parse();
- if (power->fd < 0)
- goto err;
-
- power->fd = igt_perf_open(r.type, r.power);
- if (power->fd < 0) {
- power->fd = -errno;
- goto err;
- }
-
- power->scale = r.scale;
-
- return 0;
-
-err:
- errno = 0;
- return power->fd;
-}
-
-bool gpu_power_read(struct gpu_power *power, struct gpu_power_sample *s)
-{
- return read(power->fd, s, sizeof(*s)) == sizeof(*s);
-}
-
-void gpu_power_close(struct gpu_power *power)
-{
- close(power->fd);
-}
diff --git a/lib/igt_rapl.c b/lib/igt_rapl.c
new file mode 100644
index 0..03e492260
--- /dev/null
+++ b/lib/igt_rapl.c
@@ -0,0 +1,69 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "igt_perf.h"
+#include "igt_rapl.h"
+#include "igt_sysfs.h"
+
+static int rapl_parse(struct rapl *r, const char *str)
+{
+ locale_t locale, oldlocale;
+ bool result = true;
+ char buf[128];
+ int dir;
+
+ memset(r, 0, sizeof(*r));
+
+ dir = open("/sys/devices/power", O_RDONLY);
+ if (dir < 0)
+ return -errno;
+
+ /* Replace user environment with plain C to match kernel format */
+ locale = newlocale(LC_ALL, "C", 0);
+ oldlocale = uselocale(locale);
+
+ result &= igt_sysfs_scanf(dir, "type", "%"PRIu64, >type) == 1;
+
+ snprintf(buf, sizeof(buf), "events/energy-%s", str);
+ result &= igt_sysfs_scanf(dir, buf, "event=%"PRIx64, >power) == 1;
+
+ snprintf(buf, sizeof(buf), "events/energy-%s.scale", str);
+ result &= igt_sysfs_scanf(dir, buf, "%lf", >scale) == 1;
+
+ uselocale(oldlocale);
+ freelocale(locale);
+
+ close(dir);
+
+ if (!result)
+ return -EINVAL;
+
+ if (isnan(r->scale) || !r->scale)
+ return -ERANGE;
+
+ return 0;
+}
+
+int rapl_open(struct rapl