pf開発に使えるaospのツール達

Post on 02-Jul-2015

1.139 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

~生命、宇宙、すべての答えがそこに~

横浜Androidプラットフォーム部第10回勉強会

2011/06/25@l_b__

今日紹介するのは

● DDMSとかTraceViewとかhttp://developer.android.com/guide/developing/tools/index.html で紹介があるツールは対象外。

● AOSP内のプラットフォーム開発に役立ちそうなツールをピックアップしてみました。

どんなツール?

●プロファイラなどの性能解析●ユニットテストなどテスト実行●その他色々

 ※分類は適当です。

性能解析系ツール

● blktrace● netperf● oprofile● strace● valgrind● procstatlog● RpcPerformance● bugreport/dumpsys● latencytop● librank/procmem/procrank● showmap● showslab

テスト実行

● axl● embunit● emma● gtest● StrictModeTest● cpueater● /system/extra/testsの下のテストツール

その他色々

● svc● BugReportSender● netcfg● logwrapper● run-as● sdcard● sound

● apkcheck● jdwpspy● yuv420sp2rgb● bsdiff● jdiff● netcat● tcpdump● input● rawbu● screencap

blktrace

● BlockデバイスのI/Oをトレースするツール● /externals/blktrace●デバイスの/system/bin/blktrace●ビルドされるにはAndroid.mkで最初のフラグをtrueに、各

LOCAL_MODULE_TAGSをoptionalにする必要があります。● # blktrace -d [ブロックデバイスファイル]  -o -| blkparse -i で実行し、Traceを出力。 

netperf

●ネットワークベンチマークテスト● http://www.netperf.org/netperf/● /externals/netperf●デバイスの/system/xbin/netperf ,netserver(engビルド時)●サーバのnetserverを起動し、クライアントのnetperfを実行するとこの二つの間のネットワークパフォーマンスを計測

● netserverの中でログファイルが/tmp/netperf.debugと定義されているので書き換える必要がありそう

oprofile

● Linux向けシステムプロファイラ● http://oprofile.sourceforge.net● /externals/oprofile●デバイスの/system/xbin/oprofiled,opcontrol● opcontrolでプロファイラの開始/終了をコントロール。 プロファイリング中にアプリを実行すると、その際のシステム全体のプロファイリング結果を取得できる。

strace

●カーネルシステムコールのトレース●  http://sourceforge.net/projects/strace/● /externals/strace●デバイスの/xbin/strace●カーネルのptraceを使ってシステムコール、シグナルをトレースするので、カーネルのトレース情報しか取得できないが、動作は軽い。

valgrind

●メモリリークや不正アクセス検出など様々な機能を持ったメモリデバッガ

●  http://valgrind.org/● /externals/valgrind (Masterブランチのみ)● /system/bin/valgrind● # valgrind [実行バイナリ] で実行。仮想マシン上でバイナリを動作させ、その動作結果を出力する。

●仮想マシン上で実バイナリを動作させるので、実際の動作シーケンスに沿ってメモリアクセスをチェックできるが、動作は重い。

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 の内容を出力。

RpcPerformance

● AndroidフレームワークRPCの呼び出しベンチマーク● /packages/experimental/RpcPerformance●デバイスの/data/app/RpcPerformance.apk●右画面のように様々なIOの   R/W時間を計測

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を見ると何が取得できるか記述されています。

laytencytop

●システムのレイテンシになるプロセスをチェックする。● http://www.latencytop.org/● /system/extras/latencytop●デバイスの/system/xbin/latencytop●  /proc/sys/kernel/latencytopを見てどのプロセスがボトルネックになっているかをチェック

●カーネルがlaytencytopに対応ビルドされている必要あり。

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の解析結果をどのように表示するかでコマンドを使い分けているようです。

showmap

● /proc/*/smapsを出力● /system/extras/showmap●デバイスの/system/xbin/showmap●各プロセスの仮想メモリ空間内の領域を表示します。

showslab

● /proc/slabinfoを出力● /system/extras/showslab●デバイスの/system/xbin/showslab●スラブレベルのをメモリ使用率を表示します。

axl

● HTTPクライアントに拷問的なテストをするためのWebサーバ● /development/tools/axl●ホスト側のPythonスクリプトがWebサーバとして起動

embunit

●組み込みC向けユニットテスト●  http://embunit.sourceforge.net/●  /externals/embunit●デバイスでは/system/lib/libembunit.so●テストする関数のテストケースを自分で書いていくという点は通常のユニットテストと同じ。

emma

● Javaのコードカバレッジツール。●  http://emma.sourceforge.net/● /externals/emma●デバイスの/system/framework/emma.jar●ホスト向けのemmalib.jarも生成●あまり日本語の資料が無いようなので今が調べ時かも。

gtest

● Google C++ Testing Framework● http://code.google.com/p/googletest/● /externals/gtest●デバイスの/data/app/の下に複数のテスト用実行バイナリを生成●同じようにユニットテストを書きたいときに参考になりそうです。

StrictModeTest

● StrictModeに違反する処理を行うテストアプリ● /packages/experimental/StrictModeTest●デバイスの/data/app/StrictModeTest.apk● StrictModeについては第6回勉強会の恐竜先生の資料を参照。https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0B6_eMB-CvatAN2I1YWY0YTQtYTA4Ni00YzQ2LWFjOTMtNDBkOGY3ZTk5MGM5&hl=en&pli=1

cpueater

● CPU使用率を100%にするデーモン● /system/extras/tests/cpueater●デバイスの/system/xbin/cpueater●高負荷状態でのアプリ動作チェックに使えます。●中ではひたすらlife_universe_and_everything = 42*2を計算しています。

/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カードパフォーマンステスト、クロックテスト

apkcheck

● Android APK Checker● /development/tools/apkcheck●ホストのapkcheck,apkcheck.jar● /framework/base/apiの下のAPI xml同士を比較するようです。

jdwpspy

● DalvikVMのjdwp通信内容をダンプする● /development/tools/jdwpspy●ホスト側のjdwpspy● DDMS等がVMと接続するときのJavaDebugWireProtocol通信データを横取りしてダンプします。

yuv420sp2rgb

● YUV4:2:0画像をRGB24bitに変換● /development/tools/yuv420sp2rgb●ホスト側のyuv420sp2rgb●画像ファイルから画像ファイルに変換。

bsdiff

●バイナリ同士の差分チェック、差分ファイルの生成●  http://www.daemonology.net/bsdiff/● /externals/bsdiff●ホストのbsdiff,bspatch● OTAに使われていると思われます。

jdiff

● Javadocの差分を見てJava APIの変更点を抽出するDoclet●  http://javadiff.sourceforge.net/● /externals/jdiff●ホスト側のjdiff.jar●バージョン間のAPI差分ドキュメントはこれで作られています。

netcat

● TCP/UDPデータ送受信ツール●  http://nc110.sourceforge.net/● /externals/netcat●デバイスの/system/xbin/nc●  クライアント/サーバの双方になるパケット読み書きツールです。

tcpdump

●ネットワークパケットモニタ●  http://www.tcpdump.org/● /externals/tcpdump●デバイスの/system/xbin/tcpdump●言わずとしれたネットワークツール。

input

●キーイベントをWindowManagerに送信するコマンド。● /frameworks/base/cmds/input●デバイスの/system/bin/input●  http://blog.kmckk.com/archives/3808986.html を見ておきましょう。

●タッチイベントには未対応です。

rawbu

● /dataのバックアップ/リストアコマンド● /frameworks/base/cmds/rawbu●デバイスの/system/xbin/rawbu● /data内の一時ファイルはバックアップしないので、何が一時ファイルとして扱われるか見てみるとよいかも。

screencap

● SurfaceFlingerから直接スクリーンショットを取得● /frameworks/base/cmds/screencap●デバイスの/system/bin/screencap●以前はスクリーンショットを取得するにはFramebufferを直接

openしていましたが、Gingerbreadからこのコマンドになっています。

svc

● WiFi、データ通信ON/OFF、PowerManagement制御コマンド● /frameworks/base/cmds/svc●デバイスの/system/bin/svc● ConnectivityManager、BatteryManager,PowerManagerに接続して制御。

●他にコマンドを追加しやすい作りになっています。

BugReportSender

● SDカードにあるBugreportファイルをACTION_SENDで送信● /packages/experimental/BugReportSender●エラーが出てビルドできず。メンテナンスされていないようです。

netcfg

●ネットワークインターフェースのup/down/dhcp設定コマンド● /system/core/netcfg●デバイスの/system/bin/netcfg● init.rcで使われています。

logwrapper

●コマンドの標準出力/エラー出力をAndroidのログに出力する● /system/core/logwrapper●デバイスの/system/bin/logwrapper● # logwrapper [コマンド] [コマンド引数] を実行することでコマンドの出力をAndroidのログに保存できます。

run-as

●コマンドを指定したアプリパッケージのuidで実行する● /system/core/run-as●デバイスの/system/bin/run-as● # run-as [パッケージ名] [コマンド] [コマンド引数] でコマンドを実行する。

●パーミッションチェックに使用できます。

sdcard

● FUSEを使用してFAT形式SDカードをエミュレートする● /system/core/sdcard●デバイスの/system/bin/sdcard● # sdcard [path] [uid] [gid] でpathを/mnt/sdcardにマウントします。

sound

● wav/mp3を再生・録音する● /system/extras/sound●デバイスの/system/bin/sound● /dev/msm_pcm_in,/dev/msm_pcm_out,/dev/msm_mp3へ直接書き込んでいます。

次回予告

libbinderを調べて発表できればなと思っています。

   ありがとうございました。

top related