PF開発に使えるAOSPのツール達

1,957 views

Published on

第10回横浜PF部勉強会資料

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,957
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
10
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

PF開発に使えるAOSPのツール達

  1. 1. 横浜Androidプラットフォーム部 第10回勉強会 PF開発に使えるAOSPの ツール達 ~生命、宇宙、すべての答えがそこに~ 2011/06/25 @l_b__
  2. 2. 今日紹介するのは ● DDMSとかTraceViewとか http://developer.android.com/guide/developing/tools/index. html  で紹介があるツールは対象外。 ● AOSP内のプラットフォーム開発に役立ちそうなツールをピック アップしてみました。
  3. 3. どんなツール? ● プロファイラなどの性能解析 ● ユニットテストなどテスト実行 ● その他色々  ※分類は適当です。
  4. 4. 性能解析系ツール ● blktrace ● netperf ● oprofile ● strace ● valgrind ● procstatlog ● RpcPerformance ● bugreport/dumpsys ● latencytop ● librank/procmem/procrank ● showmap ● showslab
  5. 5. テスト実行 ● axl ● embunit ● emma ● gtest ● StrictModeTest ● cpueater ● /system/extra/testsの下のテストツール
  6. 6. その他色々 ● apkcheck ● jdwpspy ● yuv420sp2rgb ● bsdiff ● jdiff ● netcat ● tcpdump ● input ● rawbu ● screencap ● svc ● BugReportSender ● netcfg ● logwrapper ● run-as ● sdcard ● sound
  7. 7. blktrace ● BlockデバイスのI/Oをトレースするツール ● /externals/blktrace ● デバイスの/system/bin/blktrace ● ビルドされるにはAndroid.mkで最初のフラグをtrueに、各 LOCAL_MODULE_TAGSをoptionalにする必要があります。 ● # blktrace -d [ブロックデバイスファイル]  -o -| blkparse -i  で実行し、Traceを出力。 
  8. 8. netperf ● ネットワークベンチマークテスト ● http://www.netperf.org/netperf/ ● /externals/netperf ● デバイスの/system/xbin/netperf ,netserver(engビルド時) ● サーバのnetserverを起動し、クライアントのnetperfを実行する とこの二つの間のネットワークパフォーマンスを計測 ● netserverの中でログファイルが/tmp/netperf.debugと定義さ れているので書き換える必要がありそう
  9. 9. oprofile ● Linux向けシステムプロファイラ ● http://oprofile.sourceforge.net ● /externals/oprofile ● デバイスの/system/xbin/oprofiled,opcontrol ● opcontrolでプロファイラの開始/終了をコントロール。  プロファイリング中にアプリを実行すると、その際のシステム全体の プロファイリング結果を取得できる。
  10. 10. strace ● カーネルシステムコールのトレース ●  http://sourceforge.net/projects/strace/ ● /externals/strace ● デバイスの/xbin/strace ● カーネルのptraceを使ってシステムコール、シグナルをトレース するので、カーネルのトレース情報しか取得できないが、動作は 軽い。
  11. 11. valgrind ● メモリリークや不正アクセス検出など様々な機能を持ったメモリデ バッガ ●  http://valgrind.org/ ● /externals/valgrind (Masterブランチのみ) ● /system/bin/valgrind ● # valgrind [実行バイナリ] で実行。仮想マシン上でバイナリを 動作させ、その動作結果を出力する。 ● 仮想マシン上で実バイナリを動作させるので、実際の動作シーケ ンスに沿ってメモリアクセスをチェックできるが、動作は重い。
  12. 12. procstatlog ● /procの下のstatファイルを一定間隔で読み取ってログ出力す る。 ● /packages/experimental/procstatlog ● デバイスの/xbin/procstatlog ● ビルドするにはLOCAL_MODULE_TAGSの追加が必要 ● /proc/*/stat , /proc/*/wchan , /proc/binder/stats , /proc/diskstats , /proc/net/dev , /proc/stat , /proc/yaffs , /sys/device/system/cpu/cpu0/cpufreq/stats/   time_in_space の内容を出力。
  13. 13. RpcPerformance ● AndroidフレームワークRPCの呼び出しベンチマーク ● /packages/experimental/RpcPerformance ● デバイスの/data/app/RpcPerformance.apk ● 右画面のように様々なIOの    R/W時間を計測
  14. 14. bugreport/dumpsys ● bugreportはdumpstateデーモンに接続して様々なログを取得 して標準出力に出力する。 ● dumpsysはdumpstateデーモンから呼ばれ、ServiceManager に登録されたサービスを取得してdump出力する。 ● /frameworks/base/cmds/bugreport,dumpsys ● デバイスの/system/bin/bugreport,dumpsys ● logcatの情報、/proc以下の情報、dmesgやdalvikのトレース出 力など、ほとんどのデバッグ情報が網羅されています。 ● /framework/base/cmds/dumpstate/dumpstate.cを見ると 何が取得できるか記述されています。
  15. 15. laytencytop ● システムのレイテンシになるプロセスをチェックする。 ● http://www.latencytop.org/ ● /system/extras/latencytop ● デバイスの/system/xbin/latencytop ●  /proc/sys/kernel/latencytopを見てどのプロセスがボトルネッ クになっているかをチェック ● カーネルがlaytencytopに対応ビルドされている必要あり。
  16. 16. librank/procmem/procrank ● /proc/*/pagemapや/proc/*/maps,/proc/kpagecount, /proc/kpageflagsを解析して出力 ● /system/extras/librank,procmem/procrank ● デバイスの/system/xbin/librank,procmem,prokrank ● 本体は/system/extras/libpagemap ● libpagemapの解析結果をどのように表示するかでコマンドを使い 分けているようです。
  17. 17. showmap ● /proc/*/smapsを出力 ● /system/extras/showmap ● デバイスの/system/xbin/showmap ● 各プロセスの仮想メモリ空間内の領域を表示します。
  18. 18. showslab ● /proc/slabinfoを出力 ● /system/extras/showslab ● デバイスの/system/xbin/showslab ● スラブレベルのをメモリ使用率を表示します。
  19. 19. axl ● HTTPクライアントに拷問的なテストをするためのWebサーバ ● /development/tools/axl ● ホスト側のPythonスクリプトがWebサーバとして起動
  20. 20. embunit ● 組み込みC向けユニットテスト ●  http://embunit.sourceforge.net/ ●  /externals/embunit ● デバイスでは/system/lib/libembunit.so ● テストする関数のテストケースを自分で書いていくという点は通常 のユニットテストと同じ。
  21. 21. emma ● Javaのコードカバレッジツール。 ●  http://emma.sourceforge.net/ ● /externals/emma ● デバイスの/system/framework/emma.jar ● ホスト向けのemmalib.jarも生成 ● あまり日本語の資料が無いようなので今が調べ時かも。
  22. 22. gtest ● Google C++ Testing Framework ● http://code.google.com/p/googletest/ ● /externals/gtest ● デバイスの/data/app/の下に複数のテスト用実行バイナリを生成 ● 同じようにユニットテストを書きたいときに参考になりそうです。
  23. 23. StrictModeTest ● StrictModeに違反する処理を行うテストアプリ ● /packages/experimental/StrictModeTest ● デバイスの/data/app/StrictModeTest.apk ● StrictModeについては第6回勉強会の恐竜先生の資料を参 照。https://docs.google.com/viewer? a=v&pid=explorer&chrome=true&srcid=0B6_eMBCvatAN2I1YWY0YTQtYTA4Ni00YzQ2LWFjOTMtNDBkOGY3ZTk5MGM5&hl=en& pli=1
  24. 24. cpueater ● CPU使用率を100%にするデーモン ● /system/extras/tests/cpueater ● デバイスの/system/xbin/cpueater ● 高負荷状態でのアプリ動作チェックに使えます。 ● 中ではひたすらlife_universe_and_everything = 42*2を計算 しています。
  25. 25. /system/extras/tests ● システム関連(HW寄り)のテストアプリ ● /system/extras/tests/bionic,directiotest,framebuffer,   fstest,icachetest,memtest,pftest,   schedtest,sdcard,timetest ● デバイスの/system/xbin 配下 ● Bionicのテスト、ブロックデバイスI/Oテスト、Framebuffer描画 テスト、ファイルシステムパーミッションチェック、CPUキャッシュテ スト、メモリI/Oテスト、メモリアラインメントテスト、スケジューリング テスト、SDカードパフォーマンステスト、クロックテスト
  26. 26. apkcheck ● Android APK Checker ● /development/tools/apkcheck ● ホストのapkcheck,apkcheck.jar ● /framework/base/apiの下のAPI xml同士を比較するようで す。
  27. 27. jdwpspy ● DalvikVMのjdwp通信内容をダンプする ● /development/tools/jdwpspy ● ホスト側のjdwpspy ● DDMS等がVMと接続するときのJavaDebugWireProtocol通信 データを横取りしてダンプします。
  28. 28. yuv420sp2rgb ● YUV4:2:0画像をRGB24bitに変換 ● /development/tools/yuv420sp2rgb ● ホスト側のyuv420sp2rgb ● 画像ファイルから画像ファイルに変換。
  29. 29. bsdiff ● バイナリ同士の差分チェック、差分ファイルの生成 ●  http://www.daemonology.net/bsdiff/ ● /externals/bsdiff ● ホストのbsdiff,bspatch ● OTAに使われていると思われます。
  30. 30. jdiff ● Javadocの差分を見てJava APIの変更点を抽出するDoclet ●  http://javadiff.sourceforge.net/ ● /externals/jdiff ● ホスト側のjdiff.jar ● バージョン間のAPI差分ドキュメントはこれで作られています。
  31. 31. netcat ● TCP/UDPデータ送受信ツール ●  http://nc110.sourceforge.net/ ● /externals/netcat ● デバイスの/system/xbin/nc ●  クライアント/サーバの双方になるパケット読み書きツールです。
  32. 32. tcpdump ● ネットワークパケットモニタ ●  http://www.tcpdump.org/ ● /externals/tcpdump ● デバイスの/system/xbin/tcpdump ● 言わずとしれたネットワークツール。
  33. 33. input ● キーイベントをWindowManagerに送信するコマンド。 ● /frameworks/base/cmds/input ● デバイスの/system/bin/input ●  http://blog.kmckk.com/archives/3808986.html を見てお きましょう。 ● タッチイベントには未対応です。
  34. 34. rawbu ● /dataのバックアップ/リストアコマンド ● /frameworks/base/cmds/rawbu ● デバイスの/system/xbin/rawbu ● /data内の一時ファイルはバックアップしないので、何が一時ファ イルとして扱われるか見てみるとよいかも。
  35. 35. screencap ● SurfaceFlingerから直接スクリーンショットを取得 ● /frameworks/base/cmds/screencap ● デバイスの/system/bin/screencap ● 以前はスクリーンショットを取得するにはFramebufferを直接 openしていましたが、Gingerbreadからこのコマンドになっていま す。
  36. 36. svc ● WiFi、データ通信ON/OFF、PowerManagement制御コマンド ● /frameworks/base/cmds/svc ● デバイスの/system/bin/svc ● ConnectivityManager、BatteryManager,PowerManagerに接 続して制御。 ● 他にコマンドを追加しやすい作りになっています。
  37. 37. BugReportSender ● SDカードにあるBugreportファイルをACTION_SENDで送信 ● /packages/experimental/BugReportSender ● エラーが出てビルドできず。メンテナンスされていないようです。
  38. 38. netcfg ● ネットワークインターフェースのup/down/dhcp設定コマンド ● /system/core/netcfg ● デバイスの/system/bin/netcfg ● init.rcで使われています。
  39. 39. logwrapper ● コマンドの標準出力/エラー出力をAndroidのログに出力する ● /system/core/logwrapper ● デバイスの/system/bin/logwrapper ● # logwrapper [コマンド] [コマンド引数] を実行することでコマ ンドの出力をAndroidのログに保存できます。
  40. 40. run-as ● コマンドを指定したアプリパッケージのuidで実行する ● /system/core/run-as ● デバイスの/system/bin/run-as ● # run-as [パッケージ名] [コマンド] [コマンド引数] でコマンドを 実行する。 ● パーミッションチェックに使用できます。
  41. 41. sdcard ● FUSEを使用してFAT形式SDカードをエミュレートする ● /system/core/sdcard ● デバイスの/system/bin/sdcard ● # sdcard [path] [uid] [gid] でpathを/mnt/sdcardにマウント します。
  42. 42. sound ● wav/mp3を再生・録音する ● /system/extras/sound ● デバイスの/system/bin/sound ● /dev/msm_pcm_in,/dev/msm_pcm_out,/dev/msm_mp3へ 直接書き込んでいます。
  43. 43. 次回予告 libbinderを調べて発表できればなと思っています。    ありがとうございました。

×