36 #define MSR_AMD_RAPL_POWER_UNIT 0xc0010299 38 #define MSR_AMD_PKG_ENERGY_STATUS 0xc001029B 39 #define MSR_AMD_PP0_ENERGY_STATUS 0xc001029A 53 #define MSR_INTEL_RAPL_POWER_UNIT 0x606 56 #define MSR_PKG_RAPL_POWER_LIMIT 0x610 57 #define MSR_INTEL_PKG_ENERGY_STATUS 0x611 58 #define MSR_PKG_PERF_STATUS 0x613 59 #define MSR_PKG_POWER_INFO 0x614 62 #define MSR_PP0_POWER_LIMIT 0x638 63 #define MSR_INTEL_PP0_ENERGY_STATUS 0x639 64 #define MSR_PP0_POLICY 0x63A 65 #define MSR_PP0_PERF_STATUS 0x63B 68 #define MSR_PP1_POWER_LIMIT 0x640 69 #define MSR_PP1_ENERGY_STATUS 0x641 70 #define MSR_PP1_POLICY 0x642 73 #define MSR_DRAM_POWER_LIMIT 0x618 74 #define MSR_DRAM_ENERGY_STATUS 0x619 75 #define MSR_DRAM_PERF_STATUS 0x61B 76 #define MSR_DRAM_POWER_INFO 0x61C 79 #define MSR_PLATFORM_ENERGY_STATUS 0x64d 82 #define POWER_UNIT_OFFSET 0 83 #define POWER_UNIT_MASK 0x0f 85 #define ENERGY_UNIT_OFFSET 0x08 86 #define ENERGY_UNIT_MASK 0x1f 88 #define TIME_UNIT_OFFSET 0x10 89 #define TIME_UNIT_MASK 0x0f 92 #define POWER_INFO_UNIT_MASK 0x7fff 93 #define THERMAL_SHIFT 0 94 #define MINIMUM_POWER_SHIFT 16 95 #define MAXIMUM_POWER_SHIFT 32 96 #define MAXIMUM_TIME_WINDOW_SHIFT 48 99 typedef struct _rapl_register
104 typedef struct _rapl_native_event_entry
116 typedef struct _rapl_reg_alloc
122 #define RAPL_MAX_COUNTERS 64 124 typedef struct _rapl_control_state
133 typedef struct _rapl_context
156 #define PACKAGE_ENERGY 0 157 #define PACKAGE_THERMAL 1 158 #define PACKAGE_MINIMUM 2 159 #define PACKAGE_MAXIMUM 3 160 #define PACKAGE_TIME_WINDOW 4 161 #define PACKAGE_ENERGY_CNT 5 162 #define PACKAGE_THERMAL_CNT 6 163 #define PACKAGE_MINIMUM_CNT 7 164 #define PACKAGE_MAXIMUM_CNT 8 165 #define PACKAGE_TIME_WINDOW_CNT 9 166 #define DRAM_ENERGY 10 167 #define PLATFORM_ENERGY 11 178 if (
fd<0 || pread(
fd, &data,
sizeof data, which) !=
sizeof data ) {
179 perror(
"rdmsr:pread");
180 fprintf(stderr,
"rdmsr error, msr %x\n",which);
184 return (
long long)data;
227 return_val.ll = value;
242 return_val.fp = (double)
248 return_val.fp = (double)
254 return_val.fp = (double)
260 return_val.fp = (double)
281 return return_val.ll;
288 int num_read, nr_cpus = 1;
289 fff=fopen(
"/sys/devices/system/cpu/kernel_max",
"r");
290 if (
fff==NULL)
return nr_cpus;
291 num_read=fscanf(
fff,
"%d",&nr_cpus);
327 int package_avail, dram_avail, pp0_avail, pp1_avail, psys_avail;
336 int packages[nr_cpus];
337 int cpu_to_use[nr_cpus];
339 unsigned int msr_pkg_energy_status,msr_pp0_energy_status;
343 for (
i=0;
i<nr_cpus; ++
i) {
469 "CPU model not supported",
503 "/sys/devices/system/cpu/cpu%d/topology/physical_package_id",j);
505 if (
fff==NULL)
break;
506 num_read=fscanf(
fff,
"%d",&package);
516 if ((package >= 0) && (package < nr_cpus)) {
517 if (packages[package] == -1) {
519 packages[package]=package;
520 cpu_to_use[package]=j;
524 SUBDBG(
"Package outside of allowed range\n");
535 SUBDBG(
"Can't access /dev/cpu/*/<msr_safe | msr>\n");
551 "Can't open fd for cpu0: %s",strerror(
errno));
576 if ( different_units ) {
613 "THERMAL_SPEC_CNT:PACKAGE%d",j);
615 "Thermal specification in counts; package %d",j);
623 "THERMAL_SPEC:PACKAGE%d",j);
626 "Thermal specification for package %d",j);
640 "MINIMUM_POWER_CNT:PACKAGE%d",j);
642 "Minimum power in counts; package %d",j);
650 "MINIMUM_POWER:PACKAGE%d",j);
653 "Minimum power for package %d",j);
667 "MAXIMUM_POWER_CNT:PACKAGE%d",j);
669 "Maximum power in counts; package %d",j);
677 "MAXIMUM_POWER:PACKAGE%d",j);
680 "Maximum power for package %d",j);
694 "MAXIMUM_TIME_WINDOW_CNT:PACKAGE%d",j);
696 "Maximum time window in counts; package %d",j);
704 "MAXIMUM_TIME_WINDOW:PACKAGE%d",j);
707 "Maximum time window for package %d",j);
723 "PACKAGE_ENERGY_CNT:PACKAGE%d",j);
725 "Energy used in counts by chip package %d",j);
733 "PACKAGE_ENERGY:PACKAGE%d",j);
736 "Energy used by chip package %d",j);
751 "PP1_ENERGY_CNT:PACKAGE%d",j);
753 "Energy used in counts by Power Plane 1 (Often GPU) on package %d",j);
761 "PP1_ENERGY:PACKAGE%d",j);
764 "Energy used by Power Plane 1 (Often GPU) on package %d",j);
779 "DRAM_ENERGY_CNT:PACKAGE%d",j);
781 "Energy used in counts by DRAM on package %d",j);
789 "DRAM_ENERGY:PACKAGE%d",j);
792 "Energy used by DRAM on package %d",j);
808 "PSYS_ENERGY_CNT:PACKAGE%d",j);
810 "Energy used in counts by SoC on package %d",j);
818 "PSYS_ENERGY:PACKAGE%d",j);
821 "Energy used by SoC on package %d",j);
836 "PP0_ENERGY_CNT:PACKAGE%d",j);
838 "Energy used in counts by all cores in package %d",j);
846 "PP0_ENERGY:PACKAGE%d",j);
849 "Energy used by all cores in package %d",j);
929 if (temp < context->start_value[
i] ) {
930 SUBDBG(
"Wraparound!\nstart:\t%#016x\ttemp:\t%#016x",
933 SUBDBG(
"\tresult:\t%#016x\n", (
unsigned)temp);
955 long long **
events,
int flags)
1080 switch ( modifier ) {
1097 *EventCode = *EventCode + 1;
1134 int index = EventCode;
1147 int index = EventCode;
1170 .short_name =
"rapl",
1171 .description =
"Linux RAPL energy measurements",
unsigned int msr_rapl_power_unit
char disabled_reason[PAPI_MAX_STR_LEN]
static long long convert_rapl_energy(int index, long long value)
_rapl_control_state_t state
#define POWER_INFO_UNIT_MASK
char name[PAPI_MAX_STR_LEN]
#define MSR_INTEL_RAPL_POWER_UNIT
char units[PAPI_MIN_STR_LEN]
#define PACKAGE_MAXIMUM_CNT
static int _rapl_set_domain(hwd_control_state_t *ctl, int domain)
int _rapl_read(hwd_context_t *ctx, hwd_control_state_t *ctl, long long **events, int flags)
char units[PAPI_MIN_STR_LEN]
static int get_kernel_nr_cpus(void)
static long long read_msr(int fd, unsigned int which)
#define ENERGY_UNIT_OFFSET
char long_descr[PAPI_HUGE_STR_LEN]
char filename[MAXNAMESIZE]
#define PACKAGE_ENERGY_CNT
char units[MAX_EVENTS][BUFSIZ]
#define PACKAGE_TIME_WINDOW_CNT
PAPI_component_info_t cmp_info
#define MSR_PP1_ENERGY_STATUS
#define RAPL_MAX_COUNTERS
#define MSR_INTEL_PP0_ENERGY_STATUS
Return codes and api definitions.
static int _rapl_update_control_state(hwd_control_state_t *ctl, NativeInfo_t *native, int count, hwd_context_t *ctx)
char events[MAX_EVENTS][BUFSIZ]
struct fd_array_t * fd_array
static int _rapl_shutdown_thread(hwd_context_t *ctx)
papi_vector_t _rapl_vector
static int _rapl_shutdown_component(void)
int open(const char *pathname, int flags, mode_t mode)
#define PACKAGE_MINIMUM_CNT
static long long read_rapl_value(int index)
static int _rapl_init_component(int cidx)
static _rapl_native_event_entry_t * rapl_native_events
static int open_fd(int offset)
char description[PAPI_MAX_STR_LEN]
char symbol[PAPI_HUGE_STR_LEN]
#define SUBDBG(format, args...)
#define PACKAGE_THERMAL_CNT
static int _rapl_reset(hwd_context_t *ctx, hwd_control_state_t *ctl)
char name[PAPI_MAX_STR_LEN]
#define MSR_AMD_RAPL_POWER_UNIT
static int _rapl_init_thread(hwd_context_t *ctx)
static int _rapl_ctl(hwd_context_t *ctx, int code, _papi_int_option_t *option)
#define MSR_AMD_PP0_ENERGY_STATUS
papi_mdi_t _papi_hwi_system_info
#define MSR_PLATFORM_ENERGY_STATUS
static int _rapl_ntv_code_to_info(unsigned int EventCode, PAPI_event_info_t *info)
#define MAXIMUM_TIME_WINDOW_SHIFT
#define PAPI_VENDOR_INTEL
static int _rapl_stop(hwd_context_t *ctx, hwd_control_state_t *ctl)
long long PAPI_get_real_usec(void)
_rapl_register_t resources
long long count[RAPL_MAX_COUNTERS]
int being_measured[RAPL_MAX_COUNTERS]
#define PAPI_NATIVE_AND_MASK
static int _rapl_ntv_code_to_descr(unsigned int EventCode, char *name, int len)
#define MAXIMUM_POWER_SHIFT
#define MINIMUM_POWER_SHIFT
static int _rapl_init_control_state(hwd_control_state_t *ctl)
static int _rapl_ntv_code_to_name(unsigned int EventCode, char *name, int len)
#define MSR_DRAM_ENERGY_STATUS
int need_difference[RAPL_MAX_COUNTERS]
#define PACKAGE_TIME_WINDOW
#define MSR_INTEL_PKG_ENERGY_STATUS
static const PAPI_hw_info_t * hw_info
static int _rapl_start(hwd_context_t *ctx, hwd_control_state_t *ctl)
#define POWER_UNIT_OFFSET
#define MSR_PKG_POWER_INFO
#define papi_calloc(a, b)
#define MSR_AMD_PKG_ENERGY_STATUS
long long start_value[RAPL_MAX_COUNTERS]
static int _rapl_ntv_enum_events(unsigned int *EventCode, int modifier)