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