Androidをビルドしているときのvmstat
Androidをビルドしているときのvmstatを見てみました。
$ make -j8
topで見ると、idleは0.2%ですからCPUはフル稼働状態です。
$ top top - 15:01:42 up 3 days, 21:16, 11 users, load average: 7.81, 5.58, 2.74 Tasks: 256 total, 8 running, 247 sleeping, 0 stopped, 1 zombie Cpu(s): 94.7%us, 5.1%sy, 0.0%ni, 0.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 24735252k total, 24051252k used, 684000k free, 910396k buffers Swap: 36104184k total, 164k used, 36104020k free, 19716008k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 15127 koba 20 0 60764 53m 6156 R 47 0.2 0:01.42 cc1plus 15155 koba 20 0 65132 56m 4040 R 32 0.2 0:00.96 cc1plus 15180 koba 20 0 50680 43m 6056 R 25 0.2 0:00.76 cc1plus 15198 koba 20 0 44036 34m 3368 R 17 0.1 0:00.50 cc1plus 15208 koba 20 0 21872 14m 3312 R 6 0.1 0:00.17 cc1plus 15216 koba 20 0 20948 11m 2336 R 3 0.0 0:00.09 cc1plus 9812 koba 20 0 343m 334m 988 S 2 1.4 0:26.25 make 14514 koba 20 0 19356 1536 1064 R 0 0.0 0:00.04 top 15125 koba 20 0 2232 800 688 S 0 0.0 0:00.01 mips-linux-gnu- 15154 koba 20 0 2232 800 688 S 0 0.0 0:00.01 mips-linux-gnu- 15179 koba 20 0 2232 796 688 S 0 0.0 0:00.01 mips-linux-gnu- 15197 koba 20 0 2232 800 688 S 0 0.0 0:00.01 mips-linux-gnu- 15207 koba 20 0 2232 796 688 S 0 0.0 0:00.01 mips-linux-gnu- 15215 koba 20 0 2232 796 688 S 0 0.0 0:00.01 mips-linux-gnu- 15225 koba 20 0 2232 800 688 S 0 0.0 0:00.01 mips-linux-gnu- 1 root 20 0 23844 2000 1296 S 0 0.0 0:01.77 init 2 root 20 0 0 0 0 S 0 0.0 0:00.01 kthreadd 3 root RT 0 0 0 0 S 0 0.0 0:00.04 migration/0 4 root 20 0 0 0 0 S 0 0.0 0:01.24 ksoftirqd/0 5 root RT 0 0 0 0 S 0 0.0 0:00.00 watchdog/0 6 root RT 0 0 0 0 S 0 0.0 0:00.04 migration/1 7 root 20 0 0 0 0 S 0 0.0 0:00.68 ksoftirqd/1 8 root RT 0 0 0 0 S 0 0.0 0:00.00 watchdog/1 9 root RT 0 0 0 0 S 0 0.0 0:00.04 migration/2 10 root 20 0 0 0 0 S 0 0.0 0:00.72 ksoftirqd/2
この状態で5秒間隔でvmstat
$ vmstat 5 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 9 0 164 471372 907440 19988556 0 0 3 16 3 15 1 0 99 0 8 0 164 415256 907504 19992704 0 0 0 34 931 2114 97 3 0 0 8 0 164 410576 907548 19996256 0 0 0 40 884 1952 98 2 0 0 8 0 164 477548 907592 19999340 0 0 1 3834 939 2125 96 4 0 0 8 0 164 341800 907728 20006160 0 0 17 34 990 2337 94 5 1 0 8 0 164 149500 907476 19915612 0 0 0 59 996 2563 93 6 1 0 8 0 164 209964 907516 19917688 0 0 0 2434 928 1990 96 3 0 0 8 0 164 452184 907560 19921892 0 0 0 37 911 2034 97 3 0 0 8 0 164 301884 907760 19931832 0 0 70 38 1015 2519 94 5 1 0 8 0 164 146520 908096 19814632 0 0 156 2224 980 2191 94 5 1 0 8 0 164 130120 908160 19674076 0 0 0 125 987 2303 94 4 2 0 8 0 164 166300 908204 19642196 0 0 0 43 935 2104 94 5 1 0 8 0 164 722584 908220 19590068 0 0 2 3089 924 2042 96 4 0 0 8 0 164 787076 908376 19589936 0 0 2 50 1136 3178 92 6 2 0 8 0 164 955912 908576 19595072 0 0 3 99 1221 3704 90 8 2 0 8 0 164 957420 908692 19605228 0 0 1 3505 1052 2554 93 6 1 0 8 0 164 893804 908816 19615480 0 0 1 48 1063 2673 92 7 1 0 8 0 164 756320 908876 19622952 0 0 0 57 932 2094 96 3 1 0 8 0 164 680928 908932 19631892 0 0 0 3993 882 1846 97 3 0 0 8 0 164 780432 909084 19637056 0 0 1 49 1153 3157 91 7 2 0 8 0 164 701572 909192 19643588 0 0 34 54 1083 2803 94 5 1 0 8 0 164 730336 909328 19650244 0 0 2 5230 1103 3050 85 6 8 1 ^C
注目すべきはcacheの大きさとbiの少なさです。こんなに激しくコンパイラを動かしているのにbi(ブロックデバイスのinput)がゼロのときがあります。
ディスクキャッシュが有効に働いているのですね。
このマシンはメモリを24GB搭載していますが、19GB以上がディスクキャッシュとして使用されているようです。
ディスクは普通のSATAのハードディクを使っていますが、ディスクの速度はボトルネックではないので、これをSSDに換えてもビルドの時間はほとんど変わらないでしょう。また、メモリの一部を使ってramdiskにするのも特に効果はないと思います。