kernel - support dummy reallocblks in devfs
[dragonfly.git] / tools / tools / mwait_mon / mwait_mon.c
blobbdbbe8015a82271ec5cc2a81770c69b73b48e3ed
1 #include <sys/types.h>
2 #include <sys/sysctl.h>
4 #include <stdio.h>
5 #include <stdint.h>
6 #include <unistd.h>
8 #define MWAIT_CX_MAX 8
10 struct cx_stat {
11 char sysctl_name[52];
12 char state_name[4];
15 static void getstats(uint64_t[]);
17 static struct cx_stat cx_stats[MWAIT_CX_MAX];
18 static int cx_stats_cnt;
20 int
21 main(void)
23 uint64_t count[MWAIT_CX_MAX], prev_count[MWAIT_CX_MAX];
24 int i;
26 for (i = 0; i < MWAIT_CX_MAX; ++i) {
27 char name[64];
28 size_t len;
29 int subcnt;
31 snprintf(name, sizeof(name), "machdep.mwait.C%d.subcnt", i);
33 len = sizeof(subcnt);
34 sysctlbyname(name, &subcnt, &len, NULL, 0);
35 if (subcnt == 0)
36 continue;
38 snprintf(cx_stats[cx_stats_cnt].state_name,
39 sizeof(cx_stats[cx_stats_cnt].state_name), "C%d", i);
40 snprintf(cx_stats[cx_stats_cnt].sysctl_name,
41 sizeof(cx_stats[cx_stats_cnt].sysctl_name),
42 "machdep.mwait.C%d.entered", i);
43 ++cx_stats_cnt;
46 getstats(prev_count);
48 for (;;) {
49 getstats(count);
51 for (i = 0; i < cx_stats_cnt; ++i) {
52 printf("%s %-5ju ", cx_stats[i].state_name,
53 (uintmax_t)(count[i] - prev_count[i]));
54 prev_count[i] = count[i];
56 printf("\n");
57 fflush(stdout);
59 sleep(1);
63 static void
64 getstats(uint64_t count[])
66 int i;
68 for (i = 0; i < cx_stats_cnt; ++i) {
69 size_t len;
71 len = sizeof(uint64_t);
72 sysctlbyname(cx_stats[i].sysctl_name, &count[i], &len, NULL, 0);