14#include <sys/utsname.h>
31#if defined(USE_PTHREAD_MUTEXES)
33#elif defined(USE_LIBAO_ATOMICS)
45#if defined(USE_PTHREAD_MUTEXES)
47#elif defined(USE_LIBAO_ATOMICS)
63#if defined(__i386__)||defined(__x86_64__)
66 (void) virtual_vendor_name;
73#define _PATH_SYS_SYSTEM "/sys/devices/system"
74#define _PATH_SYS_CPU0 _PATH_SYS_SYSTEM "/cpu/cpu0"
87 s=strstr(line,search_str);
110 if ( strcasecmp(
s,
"GenuineIntel" ) == 0 )
112 else if ( ( strcasecmp(
s,
"AMD" ) == 0 ) ||
113 ( strcasecmp(
s,
"AuthenticAMD" ) == 0 ) )
115 else if ( strcasecmp(
s,
"IBM" ) == 0 )
117 else if ( strcasecmp(
s,
"Cray" ) == 0 )
119 else if ( strcasecmp(
s,
"ARM_ARM" ) == 0 )
121 else if ( strcasecmp(
s,
"ARM_BROADCOM" ) == 0 )
123 else if ( strcasecmp(
s,
"ARM_CAVIUM" ) == 0 )
125 else if ( strcasecmp(
s,
"ARM_FUJITSU" ) == 0 )
127 else if ( strcasecmp(
s,
"ARM_HISILICON") == 0 )
129 else if ( strcasecmp(
s,
"ARM_APM" ) == 0 )
131 else if ( strcasecmp(
s,
"ARM_QUALCOMM" ) == 0 )
133 else if ( strcasecmp(
s,
"MIPS" ) == 0 )
135 else if ( strcasecmp(
s,
"SiCortex" ) == 0 )
142xfopen(
const char *path,
const char *mode )
144 FILE *fd = fopen( path, mode );
146 err( EXIT_FAILURE,
"error: %s", path );
171 while ( (
c = fgetc(
fp ) ) != EOF ) {
172 if ( isxdigit(
c ) ) {
175 for ( n = strtol(
s, NULL, 16 ); n > 0; n /= 2 ) {
193 return access(
pathbuf, F_OK ) == 0;
200 unsigned int strSize;
206 if (sscanf(
s,
"%d", &
tmp ) ==1 ) {
222 sscanf(
s,
"%d", &
tmp );
230 sscanf(
s ,
"%d", &
tmp );
243 unsigned int strSize;
249 sscanf(
s,
"%d", &
tmp );
271 unsigned int strSize;
277 sscanf(
s,
"%d", &
tmp );
311 if (strstr(
s,
"AArch64")) {
343 sscanf(
s,
"%x", &
tmp );
350 sscanf(
s,
"%x", &
tmp );
366 char cpuinfo_filename[]=
"/proc/cpuinfo";
368 if ( (
f = fopen( cpuinfo_filename,
"r" ) ) == NULL ) {
383 sscanf(
s,
"%f", &mhz );
420 if ( ( strcasecmp(
s,
"pSeries" ) == 0 ) ||
421 ( strcasecmp(
s,
"PowerNV" ) == 0 ) ||
422 ( strcasecmp(
s,
"PowerMac" ) == 0 ) ) {
434 sscanf(
s,
"%x", &
tmp );
532 nodecpu = malloc( (
unsigned int) hwinfo->
nnodes *
sizeof(
int) );
540 PAPIERROR(
"malloc failed for variable not currently used" );
547 if (*cpuinfo_mhz < 1.0) {
549 if ((!
s) || (sscanf(
s,
"%f", &mhz ) != 1)) {
550 INTDBG(
"MHz detection failed. "
551 "Please edit file %s at line %d.\n",
557 *cpuinfo_mhz = 2*(((
int)mhz)+1);
561 s = strstr(
s,
" V")+2;
568 if (mhz!=0) *cpuinfo_mhz = mhz / hwinfo->
totalcpus;
586 fff=fopen(
"/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq",
"r");
592 fff=fopen(
"/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq",
"r");
608 int cpuinfo_mhz,sys_min_khz,sys_max_khz;
621 sprintf( maxargs,
"/proc/%d/exe", (
int )
pid );
625 PAPIERROR(
"readlink(%s) returned < 0", maxargs );
647 SUBDBG(
"Text: Start %p, End %p, length %d\n",
652 SUBDBG(
"Data: Start %p, End %p, length %d\n",
657 SUBDBG(
"Bss: Start %p, End %p, length %d\n",
705 SUBDBG(
"Found %d %s(%d) %s(%d) CPUs at %d Mhz.\n",
722 int major=0,minor=0,sub=0;
724 struct utsname uname_buffer;
730 uname(&uname_buffer);
732 SUBDBG(
"Native kernel version %s\n",uname_buffer.release);
744 if (ptr!=NULL) major=atoi(ptr);
746 ptr=strtok(NULL,
".");
747 if (ptr!=NULL) minor=atoi(ptr);
749 ptr=strtok(NULL,
".");
750 if (ptr!=NULL) sub=atoi(ptr);
770 int watchdog_detected=0,watchdog_value=0;
773 fff=fopen(
"/proc/sys/kernel/nmi_watchdog",
"r");
775 if (fscanf(
fff,
"%d",&watchdog_value)==1) {
776 if (watchdog_value>0) watchdog_detected=1;
781 return watchdog_detected;
792#if defined(HAVE_CLOCK_GETTIME)
794#elif defined(HAVE_GETTIMEOFDAY)
801#if defined(USE_PROC_PTTIMER)
803#elif defined(HAVE_CLOCK_GETTIME_THREAD)
805#elif defined(HAVE_PER_THREAD_TIMES)
807#elif defined(HAVE_PER_THREAD_GETRUSAGE)
812#if defined(HAVE_CLOCK_GETTIME)
816#if defined(HAVE_CLOCK_GETTIME_THREAD)
#define AO_TS_INITIALIZER
#define PAPI_VENDOR_ARM_CAVIUM
#define PAPI_VENDOR_ARM_BROADCOM
#define PAPI_VENDOR_UNKNOWN
#define PAPI_VENDOR_ARM_HISILICON
#define PAPI_VENDOR_ARM_QUALCOMM
#define PAPI_VENDOR_ARM_ARM
#define PAPI_VENDOR_ARM_FUJITSU
#define PAPI_VENDOR_INTEL
#define PAPI_VENDOR_ARM_APM
#define PAPI_HUGE_STR_LEN
static struct timeval start
static double c[MATRIX_SIZE][MATRIX_SIZE]
static char * search_cpu_info(FILE *f, char *search_str)
static void decode_vendor_string(char *s, int *vendor)
volatile unsigned int _papi_hwd_lock_data[PAPI_MAX_LOCK]
static int decode_cpuinfo_arm(FILE *f, PAPI_hw_info_t *hwinfo)
static int _linux_init_locks(void)
static int decode_cpuinfo_power(FILE *f, PAPI_hw_info_t *hwinfo)
int _linux_get_mhz(int *sys_min_mhz, int *sys_max_mhz)
static char pathbuf[PATH_MAX]
int _linux_detect_nmi_watchdog()
static int decode_cpuinfo_x86(FILE *f, PAPI_hw_info_t *hwinfo)
int _papi_hwi_init_os(void)
int _linux_get_cpu_info(PAPI_hw_info_t *hwinfo, int *cpuinfo_mhz)
PAPI_os_info_t _papi_os_info
int _linux_detect_hypervisor(char *virtual_vendor_name)
static FILE * path_vfopen(const char *mode, const char *path, va_list ap)
static FILE * xfopen(const char *path, const char *mode)
static int path_exist(const char *path,...)
static int path_sibling(const char *path,...)
papi_os_vector_t _papi_os_vector
int _linux_get_system_info(papi_mdi_t *mdi)
#define LINUX_VERSION(a, b, c)
int _linux_get_memory_info(PAPI_hw_info_t *hwinfo, int cpu_type)
int _linux_update_shlib_info(papi_mdi_t *mdi)
int _linux_get_dmem_info(PAPI_dmem_info_t *d)
long long _linux_get_real_usec_gettime(void)
long long _linux_get_virt_usec_times(void)
long long _linux_get_real_usec_cycles(void)
long long _linux_get_real_cycles(void)
long long _linux_get_virt_usec_rusage(void)
long long _linux_get_virt_usec_gettime(void)
long long _linux_get_real_nsec_gettime(void)
long long _linux_get_real_usec_gettimeofday(void)
long long _linux_get_virt_nsec_gettime(void)
long long _linux_get_virt_usec_pttimer(void)
Return codes and api definitions.
#define INTDBG(format, args...)
#define SUBDBG(format, args...)
int fclose(FILE *__stream)
void PAPIERROR(char *format,...)
#define PAPI_INT_MPX_SIGNAL
#define PAPI_INT_MPX_DEF_US
papi_mdi_t _papi_hwi_system_info
char name[PAPI_HUGE_STR_LEN]
char fullname[PAPI_HUGE_STR_LEN]
PAPI_address_map_t address_info
char vendor_string[PAPI_MAX_STR_LEN]
char virtual_vendor_string[PAPI_MAX_STR_LEN]
char model_string[PAPI_MAX_STR_LEN]
char version[PAPI_MAX_STR_LEN]
char name[PAPI_MAX_STR_LEN]
char lib_dir_env[PAPI_MAX_STR_LEN]
char lib_preload_env[PAPI_MAX_STR_LEN]
PAPI_preload_info_t preload_info
int(* get_memory_info)(PAPI_hw_info_t *, int)
int _x86_detect_hypervisor(char *vendor_name)