#include #include /* * For trap statistics * Use "-1" to clear the counters */ #define VHPT_idx 0 // VHPT miss counter #define VHPT_HASH_PTC_idx 1 // VHPT miss - hash purged #define VHPT_PTE_PTC_idx 2 // VHPT miss - PTE purged #define ITLB_idx 3 // ITLB miss counter #define ITLB_PTC_idx 4 // ITLB miss - purged #define DTLB_idx 5 // DTLB miss counter #define DTLB_PTC_idx 6 // DTLB miss - purged #define DIRTY_idx 7 // DIRTY trap counter #define DIRTY_PTC_idx 8 // DIRTY - purged #define IACC_idx 9 // I-ACCESS trap counter #define IACC_PTC_idx 10 // I-ACCESS - purged #define DACC_idx 11 // D-ACCESS trap counter #define DACC_PTC_idx 12 // D-ACCESS - purged #define MAX_TRAP_idx 13 #define _ENTRY_SIZE_ 8 #define sys_trap_statistics 1297 char *names[] = { "VHPT miss counter", "VHPT miss - hash purged", "VHPT miss - PTE purged", "ITLB miss counter", "ITLB miss - purged", "DTLB miss counter", "DTLB miss - purged", "DIRTY trap counter", "DIRTY - purged", "I-ACCESS trap counter", "I-ACCESS - purged", "D-ACCESS trap counter", "D-ACCESS - purged", }; main(int cnt, char *args[]) { int index; long count; if (cnt == 2 && strcmp(args[1], "-clear") == 0){ if (syscall(sys_trap_statistics, -1) == -1){ perror("sys_trap_statistics"); exit(1); } exit(0); } for (index = 0; index < MAX_TRAP_idx; index++){ count = syscall(sys_trap_statistics, index); if (count == -1){ perror("sys_trap_statistics"); exit(1); } printf("%30s: %7ld\n", names[index], count); } exit(0); }