9#include <sys/utsname.h>
29#if defined(USE_PTHREAD_MUTEXES)
41#if defined(USE_PTHREAD_MUTEXES)
57#if defined(__i386__)||defined(__x86_64__)
60 (void) virtual_vendor_name;
67#define _PATH_SYS_SYSTEM "/sys/devices/system"
68#define _PATH_SYS_CPU0 _PATH_SYS_SYSTEM "/cpu/cpu0"
80 while ( fgets( line, 256,
f ) != NULL ) {
81 if ( strstr( line, search_str ) != NULL ) {
83 for (
s = line; *
s && ( *
s !=
':' ); ++
s );
108 sysctlnametomib(
"machdep.cpu.vendor", mib, &len);
111 if (sysctl(mib, 3, &buffer, &len, NULL, 0) == -1) {
123 sysctlnametomib(
"machdep.cpu.brand_string", mib, &len);
126 if (sysctl(mib, 3, &buffer, &len, NULL, 0) == -1) {
135 sysctlnametomib(
"machdep.cpu.stepping", mib, &len);
138 if (sysctl(mib, 3, &buffer, &len, NULL, 0) == -1) {
149 sysctlnametomib(
"machdep.cpu.family", mib, &len);
152 if (sysctl(mib, 3, &buffer, &len, NULL, 0) == -1) {
162 sysctlnametomib(
"machdep.cpu.model", mib, &len);
165 if (sysctl(mib, 3, &buffer, &len, NULL, 0) == -1) {
176 sysctlnametomib(
"hw.cpufrequency_max", mib, &len);
179 if (sysctl(mib, 2, &ll, &len, NULL, 0) == -1) {
186 sysctlnametomib(
"hw.cpufrequency_min", mib, &len);
189 if (sysctl(mib, 2, &ll, &len, NULL, 0) == -1) {
199 sysctlnametomib(
"hw.ncpu", mib, &len);
202 if (sysctl(mib, 2, &buffer, &len, NULL, 0) == -1) {
221 int cpuinfo_mhz,sys_min_khz,sys_max_khz;
235 sprintf( maxargs,
"/proc/%d/exe", (
int )
pid );
237 PAPIERROR(
"readlink(%s) returned < 0", maxargs );
252 SUBDBG(
"Text: Start %p, End %p, length %d\n",
257 SUBDBG(
"Data: Start %p, End %p, length %d\n",
262 SUBDBG(
"Bss: Start %p, End %p, length %d\n",
288 SUBDBG(
"Found %d %s(%d) %s(%d) CPUs at %d Mhz.\n",
305 int major=0,minor=0,sub=0;
307 struct utsname uname_buffer;
313 uname(&uname_buffer);
315 SUBDBG(
"Native kernel version %s\n",uname_buffer.release);
322 if (ptr!=NULL) major=atoi(ptr);
324 ptr=strtok(NULL,
".");
325 if (ptr!=NULL) minor=atoi(ptr);
327 ptr=strtok(NULL,
".");
328 if (ptr!=NULL) sub=atoi(ptr);
345static inline long long
352 asm volatile (
"rdtsc":
"=a" (
a ),
"=d"( d ) );
353 ( ret ) = ( (
long long )
a ) | ( ( (
long long ) d ) << 32 );
357 __asm__ __volatile__(
"rdtsc":
"=A"( ret ): );
380 gettimeofday( &buffer, NULL );
398 SUBDBG(
"user %d system %d\n", (
int ) buffer.tms_utime,
399 (
int ) buffer.tms_stime );
400 retval = (
long long ) ( ( buffer.tms_utime + buffer.tms_stime ) *
401 1000000 / sysconf( _SC_CLK_TCK ));
static char * search_cpu_info(FILE *f, char *search_str, char *line)
int _darwin_detect_hypervisor(char *virtual_vendor_name)
volatile unsigned int _papi_hwd_lock_data[PAPI_MAX_LOCK]
long long _darwin_get_real_cycles(void)
int _darwin_get_cpu_info(PAPI_hw_info_t *hwinfo, int *cpuinfo_mhz)
static int _darwin_init_locks(void)
static char pathbuf[PATH_MAX]
long long _darwin_get_virt_usec_times(void)
static long long get_cycles(void)
int _papi_hwi_init_os(void)
int _darwin_get_system_info(papi_mdi_t *mdi)
PAPI_os_info_t _papi_os_info
long long _darwin_get_real_usec_gettimeofday(void)
papi_os_vector_t _papi_os_vector
int _darwin_update_shlib_info(papi_mdi_t *mdi)
int _darwin_get_dmem_info(PAPI_dmem_info_t *d)
int _darwin_get_memory_info(PAPI_hw_info_t *hwinfo, int cpu_type)
#define PAPI_VENDOR_INTEL
#define PAPI_HUGE_STR_LEN
static double a[MATRIX_SIZE][MATRIX_SIZE]
Return codes and api definitions.
#define SUBDBG(format, args...)
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)