ブログトップ 記事一覧 ログイン 無料ブログ開設

組み込みの人。


2011-12-24

MIPSのAndroid 4.0のemulatorをビルドしてみた

MIPSAndroid 4.0のソースコードが公開されたので、emulatorをビルドして動かしてみました。

準備

http://developer.mips.com/android/getting-started-with-android/

に書いてありますが、すでにAndroid 4.0をビルドしたことがあれば飛ばしても大丈夫です。

ソースコードの取得

http://developer.mips.com/android/android-source-code/

 $ mkdir android-mips
 $ cd android-mips/
 $ repo init --repo-url=git://github.com/MIPS/repo.git --repo-branch=stable -u git://github.com/MIPS/manifests.git -b mips-ics-mr1 -m mips-ics-4.0.3_r1m2.xml
 $ time repo sync -j4

一時間くらいかかりました。

real	54m38.700s
user	7m57.080s
sys	1m34.040s

ビルドの環境設定

http://developer.mips.com/android/android-porting-guide/

を見ながら

$ cat env.sh 
export ANDROID_JAVA_HOME=/usr/lib/jvm/java-6-sun
#kexport ANDROID_JAVA_HOME=/usr/lib/jvm/jdk1.6.0_25
export JAVA_HOME=$ANDROID_JAVA_HOME
export PATH=$JAVA_HOME/bin:$PATH

export TARGET_ARCH=mips
export TARGET_PRODUCT=generic
export TARGET_ARCH_VARIANT=mips32r2-fp
source build/envsetup.sh
setpaths
settitle

ビルド

 $ . env.sh 
 $ time make -j8 2>&1 |tee make.log

dalvik/vm/Android.mk:53: *** MIPS JIT is untested, please recompile with WITH_JIT=false.  Stop.

おや? WITH_JIT=falseをつけろということなので

 $ time make -j8 WITH_JIT=false 2>&1 |tee make.log
real	33m36.706s
user	253m25.990s
sys	13m7.410s

起動

環境設定してあるので簡単に起動できます。

$ emulator

これでもいいですが、以下のようにすると便利です。

$ emulator -shell -show-kernel

とにかくcpuinfoを見てみると

# cat /proc/cpuinfo
system type		: MIPS-Goldfish
Hardware		: goldfish
Revison		: 1
processor		: 0
cpu model		: MIPS 24Kc V0.0  FPU V0.0
BogoMIPS		: 1042.02
wait instruction	: yes
microsecond timers	: yes
tlb_entries		: 16
extra interrupt vector	: yes
hardware watchpoint	: yes, count: 1, address/irw mask: [0x0ff8]
ASEs implemented	:
shadow register sets	: 1
core			: 0
VCED exceptions		: not available
VCEI exceptions		: not available

# 

確かにMIPSで動いています。

その他のログは以下にまとめました。

http://kobablog.wordpress.com/2011/05/26/boot-logs-of-various-android-devices/

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にするのも特に効果はないと思います。

git fetchしている時のvmstat

Androidソースコードをrepo syncしている間、暇なのでvmstatで見てみました。

psコマンドでみると、git fetchが動作中です。

画面はこんな表示。

Receiving objects:  83% (19179/22951), 1.34 GiB | 3.11 MiB/s  

この時に、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
 0  0    164 147432 3037248 18456456    0    0     3    13    3   15  1  0 99  0
 0  0    164 133784 3037256 18470024    0    0     0 14493 1425 1187  1  0 98  0
 1  0    164 131980 3033464 18476732    0    0     0     6 2494 2549  3  1 96  0
 0  0    164 136756 3033348 18473156    0    0     0     2 2069 1999  2  1 97  0
 0  0    164 126548 3033352 18483120    0    0     0 11798 1139 1100  1  1 98  0
 1  0    164 129020 3033356 18481716    0    0     0     6  938  917  1  0 98  0
 0  0    164 130828 3033360 18480840    0    0     0     2  996  981  1  0 99  0
 1  0    164 126320 3033364 18485720    0    0     0     2 1090 1060  1  0 99  0
 0  0    164 130204 3033356 18482972    0    0     0     2 1294 1117  2  1 98  0
 0  0    164 128856 3033308 18484564    0    0     0     2 1522 1402  2  1 97  0
 0  0    164 128188 3033308 18486396    0    0     1 14345 1728 1576  2  1 97  0
 0  0    164 131608 3031924 18485044    0    0     0     6 1497 1407  1  1 98  0
 0  0    164 125304 3031932 18491208    0    0     0     2 1212 1140  1  1 98  0
 1  0    164 128248 3031936 18489536    0    0     0  7991 1206 1159  1  0 98  0
 0  0    164 127892 3031936 18490784    0    0     0     7 1175 1162  1  0 99  0
 0  0    164 125928 3031940 18492400    0    0     0     2 1079 1080  1  0 99  0
 0  0    164 127632 3031940 18491408    0    0     0     3 1090 1081  1  0 99  0
 0  0    164 130716 3028944 18492076    0    0     0     2  892  890  1  0 99  0
 0  0    164 129272 3024488 18498204    0    0     0     2  816  801  1  0 99  0
 0  0    164 130132 3018444 18503204    0    0     1 11198  821  786  1  0 99  0
 0  0    164 128836 3013844 18509180    0    0     0     9  799  732  1  0 99  0
 0  0    164 126888 3009244 18516172    0    0     0     2  906  807  1  0 99  0
 0  0    164 128004 2997812 18527892    0    0     0     4 1373 1172  1  1 98  0
 2  0    164 129796 2983220 18541672    0    0     0     2 1897 1808  2  1 97  0
 0  0    164 139308 2963748 18552716    0    0     0     2 1719 1632  2  0 98  0
 1  0    164 129724 2959224 18567140    0    0     0 15171 1539 1465  1  1 98  0
 0  0    164 127868 2950344 18578608    0    0     0     9 1360 1338  0  0 99  0
 0  0    164 125748 2945892 18584632    0    0     0     2  864  862  0  0 99  0
 0  0    164 132608 2934880 18590036    0    0     0    10  853  772  1  0 99  0
 0  0    164 129624 2928032 18600588    0    0     0     2 1236 1091  1  1 98  0
 0  0    164 140760 2910112 18608480    0    0     0     2 1415 1371  2  1 98  0
 0  0    164 127120 2910124 18622000    0    0     1 13694 1356 1306  0  0 99  0
 0  0    164 127276 2899040 18634108    0    0     0     6 1428 1366  1  1 98  0
 0  0    164 126904 2887636 18646344    0    0     0     2 1458 1330  2  1 98  0
 0  0    164 132128 2871572 18657736    0    0     0    11 1497 1392  1  1 98  0
 0  0    164 128364 2864984 18668860    0    0     0     2 1212 1173  1  0 99  0
 0  0    164 134112 2853948 18674440    0    0     0     2  929  918  1  0 99  0
 0  0    164 130292 2849404 18683032    0    0     0 14902  999  898  2  0 98  0
 0  0    164 126992 2844860 18691280    0    0     0     6 1005  944  1  0 99  0
 0  0    164 125360 2840344 18697464    0    0     0     2  833  827  1  0 99  0
 0  0    164 127632 2835816 18700148    0    0     0    14  502  495  0  0 99  0
 0  0    164 132848 2828984 18702336    0    0     0     5  461  452  1  0 99  0
 0  0    164 128508 2828992 18706796    0    0     0     2  561  526  0  0 99  0
 0  0    164 129012 2822088 18713436    0    0     0     2  913  861  1  0 99  0
 0  0    164 129856 2815432 18719964    0    0     0     2  825  755  1  0 99  0
 0  0    164 132416 2808524 18724208    0    0     0     2  738  734  1  0 99  0
 0  0    164 128820 2808532 18727816    0    0     1 11070  497  493  0  0 99  0
^C

CPUとしてはほとんどidle状態。時々bo(ブロックデバイスの書き込み)が大きな値がでます。git fetchがまとめてディスクに書き込んでいるのですね。

ちなみに

remote: Compressing objects: xx% 

と出ているときには、サーバ側が仕事をしていて、こちら側は完全にidleでした。