333{
337 char filename[BUFSIZ];
338 long unsigned int strErr;
339 char *strCpy;
340
341 int package_avail, dram_avail, pp0_avail, pp1_avail, psys_avail;
342 int different_units;
343
345 int package;
346
348
350 int packages[nr_cpus];
351 int cpu_to_use[nr_cpus];
352
353 unsigned int msr_pkg_energy_status,msr_pp0_energy_status;
354
355
356
357 for (
i=0;
i<nr_cpus; ++
i) {
360 }
361
362
363
365
366
367
368
372 break;
373 default:
379 goto fn_fail;
380 }
381
382
383
384
386
390
392
398 goto fn_fail;
399 }
400
401
403
404
405
406 case 42:
407 case 58:
408 package_avail=1;
409 pp0_avail=1;
410 pp1_avail=1;
411 dram_avail=0;
412 psys_avail=0;
413 different_units=0;
414 break;
415
416 case 60:
417 case 69:
418 case 70:
419 case 92:
420 case 122:
421 case 95:
422 package_avail=1;
423 pp0_avail=1;
424 pp1_avail=1;
425 dram_avail=1;
426 psys_avail=0;
427 different_units=0;
428 break;
429
430 case 61:
431 case 71:
432 case 86:
433 package_avail=1;
434 pp0_avail=1;
435 pp1_avail=0;
436 dram_avail=1;
437 psys_avail=0;
438 different_units=0;
439 break;
440
441 case 78:
442 case 94:
443 case 142:
444 case 158:
445 package_avail=1;
446 pp0_avail=1;
447 pp1_avail=0;
448 dram_avail=1;
449 psys_avail=1;
450 different_units=0;
451 break;
452
453
454
455 case 45:
456 case 62:
457 package_avail=1;
458 pp0_avail=1;
459 pp1_avail=0;
460 dram_avail=1;
461 psys_avail=0;
462 different_units=0;
463 break;
464
465 case 63:
466 case 79:
467 case 85:
468 case 106:
469 package_avail=1;
470 pp0_avail=1;
471 pp1_avail=0;
472 dram_avail=1;
473 psys_avail=0;
474 different_units=1;
475 break;
476
477
478 case 87:
479 case 133:
480 package_avail=1;
481 pp0_avail=0;
482 pp1_avail=0;
483 dram_avail=1;
484 psys_avail=0;
485 different_units=1;
486 break;
487
488 default:
490 "CPU model not supported",
495 goto fn_fail;
496 }
497 }
498
500
504
506
512 goto fn_fail;
513 }
514
515 package_avail=1;
516 pp0_avail=1;
517 pp1_avail=0;
518 dram_avail=0;
519 psys_avail=0;
520 different_units=0;
521 }
522
523
524
525
526
527
528
529
530
531 j=0;
532 while(1) {
533 int num_read;
534
535 strErr=snprintf(filename, BUFSIZ,
536 "/sys/devices/system/cpu/cpu%d/topology/physical_package_id",j);
537 filename[BUFSIZ-1]=0;
539 fff=fopen(filename,
"r");
540 if (
fff==NULL)
break;
541 num_read=fscanf(
fff,
"%d",&package);
543 if (num_read!=1) {
550 goto fn_fail;
551 }
552
553
554 if ((package >= 0) && (package < nr_cpus)) {
555 if (packages[package] == -1) {
557 packages[package]=package;
558 cpu_to_use[package]=j;
560 }
561 } else {
562 SUBDBG(
"Package outside of allowed range\n");
568 goto fn_fail;
569 }
570
571 j++;
572 }
574
576 SUBDBG(
"Can't access /dev/cpu/*/<msr_safe | msr>\n");
582 goto fn_fail;
583 }
584
586
587
588
592 goto fn_fail;
593 }
594
596 if (fd<0) {
598 "Can't open fd for cpu0: %s",strerror(
errno));
602 goto fn_fail;
603 }
604
605
612 goto fn_fail;
613 }
614
615
617
618
619
620
624
625
626
627
628
629 if ( different_units ) {
631 }
632 else {
634 }
635
640
641
642
643
649
652 }
653
662 goto fn_fail;
663 }
664
667
668
669
673 "THERMAL_SPEC_CNT:PACKAGE%d",j);
676
678 "Thermal specification in counts; package %d",j);
686
688 "THERMAL_SPEC:PACKAGE%d",j);
691
695
697 "Thermal specification for package %d",j);
705
707 k++;
708 }
709
713 "MINIMUM_POWER_CNT:PACKAGE%d",j);
717 "Minimum power in counts; package %d",j);
725
727 "MINIMUM_POWER:PACKAGE%d",j);
734 "Minimum power for package %d",j);
742
744 k++;
745 }
746
750 "MAXIMUM_POWER_CNT:PACKAGE%d",j);
754 "Maximum power in counts; package %d",j);
762
764 "MAXIMUM_POWER:PACKAGE%d",j);
771 "Maximum power for package %d",j);
779
781 k++;
782 }
783
787 "MAXIMUM_TIME_WINDOW_CNT:PACKAGE%d",j);
791 "Maximum time window in counts; package %d",j);
799
801 "MAXIMUM_TIME_WINDOW:PACKAGE%d",j);
808 "Maximum time window for package %d",j);
816
818 k++;
819 }
820
821
822
823 if (package_avail) {
826 "PACKAGE_ENERGY_CNT:PACKAGE%d",j);
830 "Energy used in counts by chip package %d",j);
838
840 "PACKAGE_ENERGY:PACKAGE%d",j);
847 "Energy used by chip package %d",j);
855
857 k++;
858 }
859 }
860
861 if (pp1_avail) {
864 "PP1_ENERGY_CNT:PACKAGE%d",j);
868 "Energy used in counts by Power Plane 1 (Often GPU) on package %d",j);
876
878 "PP1_ENERGY:PACKAGE%d",j);
885 "Energy used by Power Plane 1 (Often GPU) on package %d",j);
893
895 k++;
896 }
897 }
898
899 if (dram_avail) {
902 "DRAM_ENERGY_CNT:PACKAGE%d",j);
906 "Energy used in counts by DRAM on package %d",j);
914
916 "DRAM_ENERGY:PACKAGE%d",j);
923 "Energy used by DRAM on package %d",j);
931
933 k++;
934 }
935 }
936
937 if (psys_avail) {
939
941 "PSYS_ENERGY_CNT:PACKAGE%d",j);
945 "Energy used in counts by SoC on package %d",j);
953
955 "PSYS_ENERGY:PACKAGE%d",j);
962 "Energy used by SoC on package %d",j);
970
972 k++;
973 }
974 }
975
976 if (pp0_avail) {
979 "PP0_ENERGY_CNT:PACKAGE%d",j);
983 "Energy used in counts by all cores in package %d",j);
991
993 "PP0_ENERGY:PACKAGE%d",j);
1000 "Energy used by all cores in package %d",j);
1008
1010 k++;
1011 }
1012 }
1013
1014
1016
1019
1020
1021
1023
1024 fn_exit:
1027 fn_fail:
1028 goto fn_exit;
1029}
static const PAPI_hw_info_t * hw_info
struct papi_vectors * _papi_hwd[]
#define PAPI_DATATYPE_FP64
#define PAPI_VENDOR_INTEL
#define PAPI_DATATYPE_UINT64
#define MSR_INTEL_PKG_ENERGY_STATUS
#define ENERGY_UNIT_OFFSET
struct fd_array_t * fd_array
#define PACKAGE_TIME_WINDOW
#define MSR_AMD_PP0_ENERGY_STATUS
#define PACKAGE_MINIMUM_CNT
#define MSR_PLATFORM_ENERGY_STATUS
static _rapl_native_event_entry_t * rapl_native_events
#define MSR_DRAM_ENERGY_STATUS
#define MSR_INTEL_PP0_ENERGY_STATUS
#define MSR_PKG_POWER_INFO
#define POWER_UNIT_OFFSET
#define MSR_AMD_PKG_ENERGY_STATUS
#define MSR_PP1_ENERGY_STATUS
#define MSR_INTEL_RAPL_POWER_UNIT
#define MSR_AMD_RAPL_POWER_UNIT
unsigned int msr_rapl_power_unit
#define PACKAGE_MAXIMUM_CNT
papi_vector_t _rapl_vector
#define PACKAGE_THERMAL_CNT
#define PACKAGE_TIME_WINDOW_CNT
static int open_fd(int offset)
static long long read_msr(int fd, unsigned int which)
#define PACKAGE_ENERGY_CNT
static int get_kernel_nr_cpus(void)
#define HANDLE_STRING_ERROR
#define SUBDBG(format, args...)
int fclose(FILE *__stream)
#define papi_calloc(a, b)
papi_mdi_t _papi_hwi_system_info
char units[MAX_EVENTS][BUFSIZ]
char disabled_reason[PAPI_HUGE_STR_LEN]
char name[PAPI_MAX_STR_LEN]
char units[PAPI_MIN_STR_LEN]
char description[PAPI_MAX_STR_LEN]
_rapl_register_t resources
PAPI_component_info_t cmp_info