2011-12-25
Xvfbを使ってAndroidのemulatorを画面無しで立ち上げる
VPN経由でのsshなど遅い回線からリモートログインしているときにXのクライアントソフトを起動すると、その描画がボトルネックになって非常に遅くなることがあります。
そんなとき、もし画面を捨ててしまってもよいならば、Xvfbという仮想フレームバッファのXサーバを立ち上げて画面をそこにつなぐという方法があります。
$ sudo apt-get install xvfb $ Xvfb :3 -screen 0 640x480x16 & $ export DISPLAY=:3.0 $ emulator -show-kernel -shell
クリック: 13回
購入: 3人 クリック: 11回
2011-12-24
MIPSのAndroid 4.0のemulatorをビルドしてみた
MIPSのAndroid 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で見てみました。
画面はこんな表示。
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でした。
2011-12-08
Android4.0のビルドには冷却能力にも注意を
Android 4.0を full-eng でフルビルドすると
make -j8
real 35m52.527s user 263m34.080s sys 14m40.810s
dmesgでカーネルのログを見るとこんなメッセージが。
[1482147.551197] CPU5: Temperature above threshold, cpu clock throttled (total events = 470039) [1482147.551200] CPU1: Temperature above threshold, cpu clock throttled (total events = 470039) [1482147.552197] CPU1: Temperature/speed normal [1482147.552199] CPU5: Temperature/speed normal [1482447.871374] CPU1: Temperature above threshold, cpu clock throttled (total events = 498371) [1482447.871377] CPU5: Temperature above threshold, cpu clock throttled (total events = 498371) [1482447.872375] CPU5: Temperature/speed normal [1482447.872377] CPU1: Temperature/speed normal [1482751.656890] CPU5: Temperature above threshold, cpu clock throttled (total events = 509239) [1482751.656893] CPU1: Temperature above threshold, cpu clock throttled (total events = 509239) [1482751.657890] CPU5: Temperature/speed normal [1482751.657891] CPU1: Temperature/speed normal [1483051.832731] CPU1: Temperature above threshold, cpu clock throttled (total events = 525120) [1483051.832734] CPU5: Temperature above threshold, cpu clock throttled (total events = 525120) [1483051.833730] CPU1: Temperature/speed normal [1483051.833732] CPU5: Temperature/speed normal [1483413.789544] CPU1: Temperature above threshold, cpu clock throttled (total events = 535518) [1483413.789547] CPU5: Temperature above threshold, cpu clock throttled (total events = 535518) [1483413.790545] CPU5: Temperature/speed normal [1483413.790547] CPU1: Temperature/speed normal [1483715.174854] CPU5: Temperature above threshold, cpu clock throttled (total events = 535567) [1483715.174857] CPU1: Temperature above threshold, cpu clock throttled (total events = 535567) [1483715.175855] CPU5: Temperature/speed normal [1483715.175857] CPU1: Temperature/speed normal
私のビルド環境は Ubuntu 10.04 (x86_64), CPU: Intel Core i7 950 @3.07GHz, メモリ 24GB です。
ケースは上がメッシュになっているタワー型のもの。ディスプレイはつながないでssh経由で使用します。グラフィックボードはファンレスのものをつけてます。(何かつけないと起動時のチェックでひっかかるから。)
CPUのファンはケチってリテール販売のCPUに付属していたものを使っているけど、どうやらそれでは冷却能力が足りないようです。
Android4.0をフルビルドしてるとカーネルログに、「温度が上がりすぎたからクロック落としたよ。」と「温度正常。」が交互にたくさん出てる。CPUに付属のファンだと冷却能力が足りない?!
2011-12-08 15:41:54 via web
いただいたアドバイス
@tetsu_koba Intelの4コアの場合はCPUの使用率100%常用ではデフォルトのCPUクーラーでは足りない事が多いです。ケースの空気の循環を今以上に良くする等の対処と共にサイズ社が出している巨大なCPUクーラーへ交換する等の対策が必要になります。
2011-12-08 15:45:07 via web to @tetsu_koba
@tetsu_koba 今の季節で冷却不足な現象が出るのなら,ファンは強化すべきでしょうなぁ.
2011-12-08 15:49:41 via Choqok to @tetsu_koba
@tetsu_koba あと、グラフィックボードは熱くなりやすく、タワー型ケースの場合その熱がちょうどCPU周辺にこもる為、ファンによる強制排気といった方法が一番だと私は思っております。ご清聴ありがとうございました。
2011-12-08 15:53:11 via web to @tetsu_koba
2011-11-13
携帯電話で国際電話するときの'+'の入力のしかた
忘れないように書いておく。
国際電話をかけるときの最初の国番号の頭に '+' がついています。例えばイギリスなら +44
携帯電話でこの '+' はどうやって入力するのでしょうか?
答えは'0'を長押しする。
また、'+'の代わりに '010' を頭につけてもいけます。この海外に行くときにはこのどちらかを覚えておきましょう。
(それでもダメなときはローミングするキャリアを変えてみましょう。)
http://mb.softbank.jp/mb/international/roaming/use/tel/
このページを見るとどうも'010'は日本からかける時の国際電話アクセス番号らしい。この番号は国によって違うらしい。
PS
この前、チェコのプラハに行ったときに、帰国の前日にJALから留守番電話が入っていて、「明日の帰国便がストライキでキャンセルになりました。至急こちらにお電話ください。電話番号は 国番号44, xxx..... ロンドンの予約センターです。営業時間はロンドン時間で xx時から yy時 ...」
そのときはプラハ城をひとり散策していた。これは大変!と思って言われた番号にかけようとするが、国際電話のかけかたがわからない。
がんばってWebブラウザでソフトバンクのページを探した。
http://mb.softbank.jp/mb/iphone/service/international/outgoing_tel/
しかし日本から海外へかける場合の説明はあるが、海外にいて、そこから別の国にかける方法は書いてない。(今はチェコからロンドンにかけたい)
とにかく国番号の前に '+'か '010' をつければいいらしい。
iPhoneの電話のキーパッドの画面で'+'のキーを押しても反応がない。しかたがないので '010'を頭につけて試す。
しかしつながらない。すぐに切れる。なんどやっても同じ。
プラハ城のベンチで悪戦苦闘する。
電話帳に登録してある日本の番号には、何の苦もなくかけることができた。家族に電話してJALに確認してもらうようにたのんだ。
しばらくして再度ためすが、やっぱりロンドンにかけられない。
それまでは海外ぱけ放題が効く Vodafone につないでいたが、それをO2 につなぎ直したら、010.... の方法でロンドンの予約センターにつながった。うーむ、キャリアの問題?
(後からわかったことは010は日本からかけるときの国際電話アクセス番号なので、Vodafoneではエラーにされていたらしい。O2ではなぜか受け付けてくれたようだ。)
とりあえず代替便は確保してあるということなので、無事にそれで帰ってきました。
iPhoneの電話のキーパッドでは'0'のところに小さく'+'と書いてあるが、'0'を長押ししたら'+'が入力できると知ったのは帰国してから。
PS2
後知恵ではあるが、もうひとつの解決方法。
一度アドレス帳にその番号を登録してから発信する。
2011-07-27
Ubuntuを新たにセットアップしたときのメモ
NFSマウント
$ sudo apt-get install nfs-common
Sambaサーバ
$ sudo apt-get install samba
/etc/samba/smb.confを編集。
[global] dos charset = CP932 unix charset = UTF-8 display charset = UTF-8 wide links = yes follow symlinks = yes
[share] path = /var/samba writable = yes force create mode = 0666 force directory mode = 0777
マウントポイントの作成。
$ sudo mkdir /var/samba $ sudo chown nobody:nogroup /var/samba $ sudo chmod go+w /var/samba $ cd /var/samba $ ln -s /home . $ ln -s /tmp . $ ln -s /opt .
smbdを再起動。
$ sudo service smbd restart
Samba用のユーザ登録
$ sudo smbpasswd -a <username>
Windowsのネームサーバ
$ sudo apt-get install winbind
/etc/nsswitch.confを編集。
hosts:の行にwinsを追加。
$ sudo service winbind restart



