28 pipe=popen(
"prtconf -pv",
"r");
35 if (fgets(line,BUFSIZ,pipe)==NULL)
break;
37 if (strstr(line,
"icache-size:")) {
38 sscanf(line,
"%*s %#x",&mem[0].cache[0].size);
40 if (strstr(line,
"icache-line-size:")) {
41 sscanf(line,
"%*s %#x",&mem[0].cache[0].line_size);
43 if (strstr(line,
"icache-associativity:")) {
44 sscanf(line,
"%*s %#x",&mem[0].cache[0].associativity);
47 if (strstr(line,
"dcache-size:")) {
48 sscanf(line,
"%*s %#x",&mem[0].cache[1].size);
50 if (strstr(line,
"dcache-line-size:")) {
51 sscanf(line,
"%*s %#x",&mem[0].cache[1].line_size);
53 if (strstr(line,
"dcache-associativity:")) {
54 sscanf(line,
"%*s %#x",&mem[0].cache[1].associativity);
57 if (strstr(line,
"ecache-size:")) {
58 sscanf(line,
"%*s %#x",&mem[1].cache[0].size);
60 if (strstr(line,
"ecache-line-size:")) {
61 sscanf(line,
"%*s %#x",&mem[1].cache[0].line_size);
63 if (strstr(line,
"ecache-associativity:")) {
64 sscanf(line,
"%*s %#x",&mem[1].cache[0].associativity);
67 if (strstr(line,
"#itlb-entries:")) {
68 sscanf(line,
"%*s %#x",&mem[0].tlb[0].num_entries);
70 if (strstr(line,
"#dtlb-entries:")) {
71 sscanf(line,
"%*s %#x",&mem[0].tlb[1].num_entries);
123 if ( ( fd = fopen(
"/proc/self/psinfo",
"r" ) ) == NULL ) {
128 fread( (
void * ) &psi,
sizeof (
struct psinfo ), 1, fd );
131 d->
pagesize = sysconf( _SC_PAGESIZE );
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
Return codes and api definitions.
#define PAPI_MH_TYPE_DATA
#define PAPI_MH_TYPE_PSEUDO_LRU
#define PAPI_MH_TYPE_INST
#define PAPI_MH_TYPE_UNIFIED
#define SUBDBG(format, args...)
int fclose(FILE *__stream)
int _solaris_get_memory_info(PAPI_hw_info_t *hw, int id)
int _solaris_get_dmem_info(PAPI_dmem_info_t *d)
int _niagara2_get_memory_info(PAPI_hw_info_t *hw, int id)
A pointer to the following is passed to PAPI_get_dmem_info()
long long high_water_mark
PAPI_mh_info_t mem_hierarchy
PAPI_mh_level_t level[PAPI_MAX_MEM_HIERARCHY_LEVELS]
PAPI_mh_tlb_info_t tlb[PAPI_MH_MAX_LEVELS]
PAPI_mh_cache_info_t cache[PAPI_MH_MAX_LEVELS]