CPU毎のシステムコール回数、割り込み回数、etcの取得

vmstatから取れそうだけど、読みにくいし意味がよく分からなかったから、ソースコードを分解してたらこんなん出来た。
vmtest.c · GitHub

man kvm_getpcpuを読む限り、カーネル内のper-cpu storageの中身をユーザランドへコピーしてきているように読める。
それってカーネル内に閉じてる情報だとばかり思っていたが、そうじゃないのか、知らなかった。
libkvm周りって他にもそういうカーネル内情報をとれるインタフェースが有るんだろうか。

$ clang -o vmtest vmtest.c -l kvm
$ sudo ./vmtest
cpu0:
v_swtch:349117
v_trap:161000
v_syscall:505638
v_intr:12
v_soft:127505
v_vm_faults:193629
v_cow_faults:56058
v_cow_optim:241
v_zfod:59604
v_ozfod:0
v_swapin:0
v_swapout:0
v_swappgsin:0
v_swappgsout:0
v_vnodein:2249
v_vnodeout:0
v_vnodepgsin:2249
v_vnodepgsout:0
v_intrans:5
v_tfree:195137
v_forks:1703
v_vforks:8
v_rforks:0
v_kthreads:19
v_forkpages:872430
v_vforkpages:4191
v_rforkpages:0
v_kthreadpages:0


cpu1:
v_swtch:15615
v_trap:1350
v_syscall:14501
v_intr:10117
v_soft:205
v_vm_faults:1270
v_cow_faults:342
v_cow_optim:0
v_zfod:408
v_ozfod:0
v_swapin:0
v_swapout:0
v_swappgsin:0
v_swappgsout:0
v_vnodein:11
v_vnodeout:0
v_vnodepgsin:11
v_vnodepgsout:0
v_intrans:1
v_tfree:5694
v_forks:16
v_vforks:0
v_rforks:0
v_kthreads:0
v_forkpages:9110
v_vforkpages:0
v_rforkpages:0
v_kthreadpages:0


cpu2:
v_swtch:155861
v_trap:156716
v_syscall:181835
v_intr:404
v_soft:25979
v_vm_faults:152154
v_cow_faults:52354
v_cow_optim:140
v_zfod:56385
v_ozfod:0
v_swapin:0
v_swapout:0
v_swappgsin:0
v_swappgsout:0
v_vnodein:3168
v_vnodeout:0
v_vnodepgsin:3168
v_vnodepgsout:0
v_intrans:5
v_tfree:166539
v_forks:1748
v_vforks:8
v_rforks:0
v_kthreads:1
v_forkpages:890765
v_vforkpages:4191
v_rforkpages:0
v_kthreadpages:0


cpu3:
v_swtch:16742
v_trap:8825
v_syscall:4292
v_intr:0
v_soft:256
v_vm_faults:8539
v_cow_faults:2793
v_cow_optim:6
v_zfod:3199
v_ozfod:0
v_swapin:0
v_swapout:0
v_swappgsin:0
v_swappgsout:0
v_vnodein:679
v_vnodeout:0
v_vnodepgsin:679
v_vnodepgsout:0
v_intrans:2
v_tfree:14698
v_forks:101
v_vforks:0
v_rforks:0
v_kthreads:0
v_forkpages:51988
v_vforkpages:0
v_rforkpages:0
v_kthreadpages:0


cpu4:
v_swtch:61937
v_trap:26580
v_syscall:114498
v_intr:0
v_soft:3720
v_vm_faults:25928
v_cow_faults:3896
v_cow_optim:6
v_zfod:18943
v_ozfod:0
v_swapin:0
v_swapout:0
v_swappgsin:0
v_swappgsout:0
v_vnodein:194
v_vnodeout:0
v_vnodepgsin:194
v_vnodepgsout:0
v_intrans:5
v_tfree:46728
v_forks:45
v_vforks:3
v_rforks:0
v_kthreads:0
v_forkpages:22864
v_vforkpages:1516
v_rforkpages:0
v_kthreadpages:0


cpu5:
v_swtch:15557
v_trap:565
v_syscall:885
v_intr:0
v_soft:45
v_vm_faults:529
v_cow_faults:86
v_cow_optim:0
v_zfod:112
v_ozfod:0
v_swapin:0
v_swapout:0
v_swappgsin:0
v_swappgsout:0
v_vnodein:0
v_vnodeout:0
v_vnodepgsin:0
v_vnodepgsout:0
v_intrans:0
v_tfree:3900
v_forks:10
v_vforks:0
v_rforks:0
v_kthreads:0
v_forkpages:5410
v_vforkpages:0
v_rforkpages:0
v_kthreadpages:0


cpu6:
v_swtch:41121
v_trap:3907
v_syscall:8124
v_intr:13936
v_soft:629
v_vm_faults:3752
v_cow_faults:445
v_cow_optim:19
v_zfod:2005
v_ozfod:0
v_swapin:0
v_swapout:0
v_swappgsin:0
v_swappgsout:0
v_vnodein:238
v_vnodeout:0
v_vnodepgsin:238
v_vnodepgsout:0
v_intrans:11
v_tfree:10692
v_forks:17
v_vforks:2
v_rforks:0
v_kthreads:0
v_forkpages:9626
v_vforkpages:1070
v_rforkpages:0
v_kthreadpages:0


cpu7:
v_swtch:20713
v_trap:77
v_syscall:470
v_intr:0
v_soft:13
v_vm_faults:73
v_cow_faults:0
v_cow_optim:0
v_zfod:73
v_ozfod:0
v_swapin:0
v_swapout:0
v_swappgsin:0
v_swappgsout:0
v_vnodein:0
v_vnodeout:0
v_vnodepgsin:0
v_vnodepgsout:0
v_intrans:0
v_tfree:2045
v_forks:0
v_vforks:0
v_rforks:0
v_kthreads:0
v_forkpages:0
v_vforkpages:0
v_rforkpages:0
v_kthreadpages:0


cpu8:
v_swtch:24065
v_trap:1048
v_syscall:1435
v_intr:0
v_soft:125
v_vm_faults:986
v_cow_faults:290
v_cow_optim:33
v_zfod:277
v_ozfod:0
v_swapin:0
v_swapout:0
v_swappgsin:0
v_swappgsout:0
v_vnodein:7
v_vnodeout:0
v_vnodepgsin:7
v_vnodepgsout:0
v_intrans:0
v_tfree:4268
v_forks:26
v_vforks:0
v_rforks:0
v_kthreads:0
v_forkpages:13286
v_vforkpages:0
v_rforkpages:0
v_kthreadpages:0


cpu9:
v_swtch:10151
v_trap:65
v_syscall:11
v_intr:0
v_soft:2
v_vm_faults:65
v_cow_faults:0
v_cow_optim:0
v_zfod:65
v_ozfod:0
v_swapin:0
v_swapout:0
v_swappgsin:0
v_swappgsout:0
v_vnodein:0
v_vnodeout:0
v_vnodepgsin:0
v_vnodepgsout:0
v_intrans:0
v_tfree:1721
v_forks:0
v_vforks:0
v_rforks:0
v_kthreads:0
v_forkpages:0
v_vforkpages:0
v_rforkpages:0
v_kthreadpages:0


cpu10:
v_swtch:7455
v_trap:783
v_syscall:663
v_intr:0
v_soft:44
v_vm_faults:759
v_cow_faults:180
v_cow_optim:0
v_zfod:314
v_ozfod:0
v_swapin:0
v_swapout:0
v_swappgsin:0
v_swappgsout:0
v_vnodein:0
v_vnodeout:0
v_vnodepgsin:0
v_vnodepgsout:0
v_intrans:1
v_tfree:1098
v_forks:10
v_vforks:0
v_rforks:0
v_kthreads:0
v_forkpages:5110
v_vforkpages:0
v_rforkpages:0
v_kthreadpages:0


cpu11:
v_swtch:54250
v_trap:175
v_syscall:976
v_intr:0
v_soft:24894
v_vm_faults:113
v_cow_faults:16
v_cow_optim:0
v_zfod:62
v_ozfod:0
v_swapin:0
v_swapout:0
v_swappgsin:0
v_swappgsout:0
v_vnodein:0
v_vnodeout:0
v_vnodepgsin:0
v_vnodepgsout:0
v_intrans:0
v_tfree:151
v_forks:0
v_vforks:0
v_rforks:0
v_kthreads:0
v_forkpages:0
v_vforkpages:0
v_rforkpages:0
v_kthreadpages:0