drm/i915/selftests: Move gpu energy measurement into its own little lib
Move the handy utility to measure the GPU energy consumption using RAPL msr into a common lib so that it can be reused easily. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Andi Shyti <andi.shyti@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200417152018.13079-1-chris@chris-wilson.co.uk
This commit is contained in:
parent
680e1af713
commit
d4e3d455a1
@ -257,7 +257,8 @@ i915-$(CONFIG_DRM_I915_SELFTEST) += \
|
|||||||
selftests/igt_live_test.o \
|
selftests/igt_live_test.o \
|
||||||
selftests/igt_mmap.o \
|
selftests/igt_mmap.o \
|
||||||
selftests/igt_reset.o \
|
selftests/igt_reset.o \
|
||||||
selftests/igt_spinner.o
|
selftests/igt_spinner.o \
|
||||||
|
selftests/librapl.o
|
||||||
|
|
||||||
# virtual gpu code
|
# virtual gpu code
|
||||||
i915-y += i915_vgpu.o
|
i915-y += i915_vgpu.o
|
||||||
|
@ -11,22 +11,7 @@
|
|||||||
#include "selftest_rc6.h"
|
#include "selftest_rc6.h"
|
||||||
|
|
||||||
#include "selftests/i915_random.h"
|
#include "selftests/i915_random.h"
|
||||||
|
#include "selftests/librapl.h"
|
||||||
static u64 energy_uJ(struct intel_rc6 *rc6)
|
|
||||||
{
|
|
||||||
unsigned long long power;
|
|
||||||
u32 units;
|
|
||||||
|
|
||||||
if (rdmsrl_safe(MSR_RAPL_POWER_UNIT, &power))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
units = (power & 0x1f00) >> 8;
|
|
||||||
|
|
||||||
if (rdmsrl_safe(MSR_PP1_ENERGY_STATUS, &power))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return (1000000 * power) >> units; /* convert to uJ */
|
|
||||||
}
|
|
||||||
|
|
||||||
static u64 rc6_residency(struct intel_rc6 *rc6)
|
static u64 rc6_residency(struct intel_rc6 *rc6)
|
||||||
{
|
{
|
||||||
@ -74,9 +59,9 @@ int live_rc6_manual(void *arg)
|
|||||||
res[0] = rc6_residency(rc6);
|
res[0] = rc6_residency(rc6);
|
||||||
|
|
||||||
dt = ktime_get();
|
dt = ktime_get();
|
||||||
rc0_power = energy_uJ(rc6);
|
rc0_power = librapl_energy_uJ();
|
||||||
msleep(250);
|
msleep(250);
|
||||||
rc0_power = energy_uJ(rc6) - rc0_power;
|
rc0_power = librapl_energy_uJ() - rc0_power;
|
||||||
dt = ktime_sub(ktime_get(), dt);
|
dt = ktime_sub(ktime_get(), dt);
|
||||||
res[1] = rc6_residency(rc6);
|
res[1] = rc6_residency(rc6);
|
||||||
if ((res[1] - res[0]) >> 10) {
|
if ((res[1] - res[0]) >> 10) {
|
||||||
@ -99,9 +84,9 @@ int live_rc6_manual(void *arg)
|
|||||||
res[0] = rc6_residency(rc6);
|
res[0] = rc6_residency(rc6);
|
||||||
intel_uncore_forcewake_flush(rc6_to_uncore(rc6), FORCEWAKE_ALL);
|
intel_uncore_forcewake_flush(rc6_to_uncore(rc6), FORCEWAKE_ALL);
|
||||||
dt = ktime_get();
|
dt = ktime_get();
|
||||||
rc6_power = energy_uJ(rc6);
|
rc6_power = librapl_energy_uJ();
|
||||||
msleep(100);
|
msleep(100);
|
||||||
rc6_power = energy_uJ(rc6) - rc6_power;
|
rc6_power = librapl_energy_uJ() - rc6_power;
|
||||||
dt = ktime_sub(ktime_get(), dt);
|
dt = ktime_sub(ktime_get(), dt);
|
||||||
res[1] = rc6_residency(rc6);
|
res[1] = rc6_residency(rc6);
|
||||||
if (res[1] == res[0]) {
|
if (res[1] == res[0]) {
|
||||||
|
24
drivers/gpu/drm/i915/selftests/librapl.c
Normal file
24
drivers/gpu/drm/i915/selftests/librapl.c
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
/*
|
||||||
|
* Copyright © 2020 Intel Corporation
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <asm/msr.h>
|
||||||
|
|
||||||
|
#include "librapl.h"
|
||||||
|
|
||||||
|
u64 librapl_energy_uJ(void)
|
||||||
|
{
|
||||||
|
unsigned long long power;
|
||||||
|
u32 units;
|
||||||
|
|
||||||
|
if (rdmsrl_safe(MSR_RAPL_POWER_UNIT, &power))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
units = (power & 0x1f00) >> 8;
|
||||||
|
|
||||||
|
if (rdmsrl_safe(MSR_PP1_ENERGY_STATUS, &power))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return (1000000 * power) >> units; /* convert to uJ */
|
||||||
|
}
|
13
drivers/gpu/drm/i915/selftests/librapl.h
Normal file
13
drivers/gpu/drm/i915/selftests/librapl.h
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
/* SPDX-License-Identifier: MIT */
|
||||||
|
/*
|
||||||
|
* Copyright © 2020 Intel Corporation
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SELFTEST_LIBRAPL_H
|
||||||
|
#define SELFTEST_LIBRAPL_H
|
||||||
|
|
||||||
|
#include <linux/types.h>
|
||||||
|
|
||||||
|
u64 librapl_energy_uJ(void);
|
||||||
|
|
||||||
|
#endif /* SELFTEST_LIBRAPL_H */
|
Loading…
Reference in New Issue
Block a user