Re: [Intel-gfx] [PATCH i-g-t 1/2] lib: Generalise rapl interface

2019-10-15 Thread Andi Shyti
Hi Chris,

On Sun, Oct 13, 2019 at 02:50:20PM +0100, Chris Wilson wrote:
> 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 

looks good,

Reviewed-by: Andi Shyti 

Thanks,
Andi

PS Don't think I missed a few hidden style changes :)
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

[Intel-gfx] [PATCH i-g-t 1/2] lib: Generalise rapl interface

2019-10-13 Thread Chris Wilson
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