VTuneアンプのタむムラむンにAndroid Logcatメッセヌゞを配眮する

有名なこずわざには、「1぀の心が良い、2぀の心が良い」ずありたす。 これは、日垞の状況だけでなく、アプリケヌションのデバッグの問題にも有効です。 さたざたな゜フトりェアツヌルの「心」を組み合わせるこずで、定量的だけでなく定性的な利点も埗られたす。 たずえば、 Android LogcatずVTune Amplifierの 結合はたさにそのような堎合です。



Android Logcatは匷力なデバッグツヌルです。 その助けを借りお、タむムスタンプを参照しお、システムたたはアプリケヌションに関する倚くの有甚な情報を取埗できたす。 Androidは、デヌタを蚘録するための暙準APIを開発者に提䟛したす。 これらのAPIは、アプリケヌションを開発およびデバッグするずきに䜿甚するず䟿利です。察応するコマンドの呌び出しをプログラムコヌドの適切な堎所に远加するだけです。 コマンドは、Logcatで衚瀺可胜なメッセヌゞを衚瀺したす。



専甚システム甚のVTuneアンプは、プロファむリング甚の゜フトりェアパッケヌゞです。 これにより、オペレヌティングシステムずアプリケヌションのパフォヌマンスを分析および最適化できたす。 VTuneアンプには、非垞に䟿利なツヌルであるタむムラむンパネルがありたす。 開発者は、時間に関連するパフォヌマンス情報を衚瀺できたす。



LogcatからVTune Amplifierタむムラむンにメッセヌゞをマッピングする方法は これにより、開発者はLogcatからのメッセヌゞずVTune Amplifierタむムラむンからのパフォヌマンス情報を芋るこずができたす。 その結果、特定の時間に䜕が起こったかを正確に把握し、このむベントたたはそのむベントによっおシステムにどのような負荷がかかったか、それがパフォヌマンスにどのように圱響したかをすぐに理解できたす。



Intel VTune Amplifierは、远加のパフォヌマンス情報を凊理し、組み蟌みツヌルを䜿甚しお取埗した独自のデヌタセットに統合できたす。 倖郚デヌタコレクタヌを䜿甚するか、テスト察象のアプリケヌションを䜿甚しお取埗できたす。 VTuneアンプに倖郚デヌタを远加するには、収集された情報がある特定の構造を持぀CSVファむルが必芁です。 このファむルは、さらに䜜業するために、VTuneアンプにロヌドする必芁がありたす。



独自のCSVデヌタファむルの䜜成の詳现に぀いおは、VTune Amplifier User Guideを参照しおください。 特に、VTune Amplifier> User's Guide> External Data Importセクションには、そのようなファむルの䜜成方法に関する情報が含たれおいたす。 内郚構造の䟋もありたす。 LogcatからのメッセヌゞをVTuneタむムラむンに衚瀺するには、マニュアルに埓っおメッセヌゞをCSVファむルに倉換し、結果のファむルをVTune Amplifierにロヌドする必芁がありたす。



䟋



䟋を考えおみたしょう。 アプリケヌション「com.example.Thread1」がありたす。 重い蚈算を実行する機胜がありたす。 䞀般的な甚語では次のようになりたす。



void myfunction () { Log.v("MYTEST", "start block 1"); { ...//  1 } Log.v("MYTEST", "start block 2"); { ...//  2 } Log.v("MYTEST", "my computation finished"); }
      
      





VTune Amplifierを䜿甚しおAndroidアプリケヌションをプロファむリングする前に、アプリケヌションを準備する必芁があるこずに泚意しおください。 ぀たり、AndroidManifest.xmlファむルの<application>セクションで、デバッグ機胜を有効にする必芁がありたす。



  <application android:debuggable="true" ... >
      
      





たずえば、暙準のAndroid Studioツヌルを䜿甚しお、Androidデバむスにアプリケヌションのデバッグバヌゞョンをむンストヌルできたす。 そしお、Android Studioアプリケヌションをむンストヌルした埌、それを閉じる必芁がありたす。そうしないず、VTune Amplifierはデヌタを収集できたせん。 LogcatメッセヌゞのコレクションずVTune Amplifierでのプロファむリングを組み合わせるには、Logcatをコマンドラむンから実行する必芁がありたす。 Windowsで䜜業する人ずLinuxを䜿甚する人の䞡方に適した汎甚ツヌルはbashシェルです。



Linuxシステムでは、デフォルトでbashが存圚したす。 ただし、ホストシステムがWindowsの堎合、远加の゜フトりェアが必芁になりたす。 Cygwinをお勧めしたす 。 このアプリケヌションを䜿甚するず、Windowsでbash環境を䜿甚できたす。 コマンドラむンからのLogcatの操䜜の詳现に぀いおは、 こちらをご芧ください 。



デフォルトでは、たずえば、コマンド「$ adb logcat -v threadtime」でLogcatを起動するず、デヌタが画面に衚瀺されたす。 出力を倖郚ファむルにリダむレクトする方がはるかに䟿利です。 これは、次のコマンドで実行されたす。



 $ adb logcat -v threadtime > log.txt
      
      





Logcatからの出力をlog.txtファむルにリダむレクトしたす。このファむルは珟圚のディレクトリに配眮されたす。

VTune Amplifierでプロファむリングを開始する前にLogcatデヌタの収集を開始し、その埌で停止コマンドラむンでCtrl + Cする必芁がありたす。



䟋に戻りたしょう。 以䞋に瀺すVTuneアンプのタむムラむンから刀断するず、この機胜は6回実行されたした。 アプリケヌションのメむンスレッドIDは12271です。茶色の列は、VTune Amplifierを䜿甚したプロファむリング䞭に収集されたパフォヌマンスCPU時間情報です。





VTune Amplifierタむムラむンでアプリケヌション分析結果を衚瀺



関数が実行されるたびに、「logcat -v threadtime」ずいう圢匏のコマンドでLogcatメッセヌゞを収集するず、以䞋に瀺すデヌタセットが取埗されたす。



 01-12 11:13:19.090 2174 2174 V MYTEST : start block 1 01-12 11:13:19.260 2174 2174 V MYTEST : start block 2 01-12 11:13:19.500 2174 2174 V MYTEST : my computation finished
      
      





このデヌタを受け取ったら、VTuneアンプぞのロヌドに適した適切な圢匏のCSVファむルに倉換できたす。 VTune Amplifierのドキュメントによるず、必芁なCSVファむルは次のようになりたす。



 name,start_tsc.UTC,end_tsc,pid,tid V/MYTEST : start block 1,2015-01-12 03:13:19.090,2015-01-12 03:13:19.090,2174,2174 V/MYTEST : start block 2,2015-01-12 03:13:19.260,2015-01-12 03:13:19.260,2174,2174 V/MYTEST:my computation finished,2015-01-12 03:13:19.500, 2015-01-12 03:13:19.500, 2174, 2174
      
      





ここでは、デヌタ列の「名前」ずしお、ロギング䞭に䜿甚されるタグずメッセヌゞ行が䜿甚されたす。 メッセヌゞ時間は、start_tsc.UTCおよびend_tsc列に分類されたす。 プロセスIDずストリヌムIDは、それぞれCSVファむルでpidずtidずしお衚されたす。 フィヌルドはコンマで区切られたす。



次に、VTuneアンプに移動しお、[分析タむプ]> [CSVからむンポヌト]コマンドを実行し、むンポヌトするために䜜成したデヌタファむルを遞択する必芁がありたす。 アプリケヌションはデヌタをダりンロヌドし、パフォヌマンス情報ずずもにタむムラむンにLogcatからメッセヌゞを衚瀺したす。 次の図は、メッセヌゞの堎所を指す小さな黄色の䞉角圢にマりスを移動するず、アプリケヌションによっお生成されたLogcatのデヌタがポップアップりィンドりに衚瀺される様子を瀺しおいたす。





VTuneアンプのタむムラむンでLogcatメッセヌゞを衚瀺する



CSVファむルを䜜成するためのヒントを次に瀺したす。



  1. Logcatに衚瀺されるタむムスタンプは、Android OSから取埗されたす。 これらは、デバむスに蚭定されおいるタむムゟヌンに関連付けられおいたす。 CSVファむルを䜜成するずきは、UTC暙準のタむムスタンプに倉曎する必芁がありたす。 VTune Amplifierぞのデヌタのむンポヌトを成功させるために必芁です。



  2. CSVファむルの名前には、サヌドパヌティアプリケヌションを䜿甚しおデヌタが収集されるホスト名ホスト名が含たれおいる必芁がありたす。 たずえば、ファむル名の構造は次のずおりです。[ナヌザヌ定矩] -hostname- <hostname-of-system> .csv。 Androidを実行しおいるタヌゲットデバむスの堎合、ホスト名はファむル/ proc / sys / kernel / hostnameにありたす。 ADBシェルを䜿甚しお衚瀺できたす。



  3. 「名前」列にある文字列デヌタは、開発者のニヌズに応じおカスタマむズできたす。 䞊蚘の䟋では、フリルなしで行いたした。Logcatメッセヌゞ党䜓が「名前」列に配眮されたした。 「name」列を察象ずする文字列デヌタにはコンマを含めないでください。 コンマは、行に衚瀺されるべきではない予玄枈みの区切り文字です。



  4. たた、システムのカヌネルからのメッセヌゞをCSV圢匏「dmesg」などに倉換し、VTune Amplifierにむンポヌトしお、タむムラむンで衚瀺するこずもできたす。 この機胜は、システムプログラマヌ、たずえばカヌネルモゞュヌルやデバむスドラむバヌを開発するナヌザヌにずっお非垞に䟿利です。 システムのカヌネルからのメッセヌゞの堎合、プロセスIDずスレッドIDを0に蚭定する必芁がありたす。システムメッセヌゞたずえば、同じ「dmesg」からののカりントダりンは、システムが起動した瞬間から始たりたす。 メッセヌゞ出力のUTC時間を瀺すように倉換する必芁がありたす。 たずえば、次の匏を䜿甚しおメッセヌゞのタむムスタンプを蚈算できたす。「メッセヌゞ時間」=「珟圚の時間」-「システムが動䜜を開始しおからの時間」+「メッセヌゞのタむムスタンプ」。 ここでの「珟圚時刻」ずは、珟圚のシステム時刻を意味したす。 ADBシェルの「date」コマンドを䜿甚しお取埗できたす。 「システムの開始からの時間」は、OSブヌトの開始から経過した時間です。 「/ proc / uptime」ファむルにありたす。


ヘルパヌスクリプト



䞊蚘の手順を簡略化できる実隓的なbashスクリプトlogcat2vtune.shを䜜成したした。 これを䜿甚しお、Logcatデヌタの収集ずCSVファむルの䜜成を自動化できたす。 スクリプトは、システムカヌネルからのメッセヌゞだけでなく、Logcatアプリケヌションに衚瀺されるメッセヌゞを収集できたす。 さらに、タヌゲットシステムに関する情報を読み取り、ロギング結果を解析し、CSVファむルを自動的に生成したす。



このスクリプトを䜿甚するには、bash環境が必芁です。 前述のように、Linuxシステムではこれは暙準の䜜業環境であり、Windowsでは、たずえばCygwinを䜿甚できたす。

VTune Amplifierを䜿甚しおプロファむリング䞭にデヌタを含むCSVファむルを取埗するには、以䞋を実行する必芁がありたす。



  1. コマンドラむンから「adb」が䜿甚可胜かどうかを確認したす。 その埌、必芁なキヌを指定しお、logcat2vtune.shスクリプトを実行したす。 たずえば、次のようになりたす。> ./logcat2vtune.sh -c logcat -g MYTEST



  2. VTune Amplifierでパフォヌマンスデヌタ収集を実行したす。 これは、アプリケヌションりィンドりずコマンドラむンの䞡方から実行できたす。



  3. VTune Amplifierでのデヌタ収集を停止したす。



  4. logcat2vtune.shが実行されおいるコマンドりィンドりの任意のボタンを抌しお、デヌタ収集を停止したす。 スクリプトは、収集されたログデヌタを読み取り、bash正芏衚珟を䜿甚しお解析し、CSVファむルに倉換したす。 このファむルは、コマンドラむンから䜜業しおいる珟圚のフォルダヌにありたす。



  5. 結果のCSVファむルをVTune Amplifierにダりンロヌドしたす。 Logcatメッセヌゞをタむムラむンで衚瀺できるようになりたした。


兞型的なスクリプトの䜿甚䟋を次に瀺したす。



 $logcat2vtune.sh -c logcat -g MYTEST
      
      





このコマンドを䜿甚するず、Logcatデヌタを収集し、文字列「MYTEST」を持぀メッセヌゞを遞択しお、CSVファむルを生成できたす。 Logcatスクリプトは、次のコマンドを䜿甚しおデヌタを収集したす。



 $adb shell logcat -v threadtime
      
      





「MYTEST」は、Logcatからのメッセヌゞがフィルタリングされる行です。 Logcatは非垞に長いメッセヌゞのリストを衚瀺できるため、開発者は通垞、プロセスからのメッセヌゞのみに関心があるため、フィルタヌの䜿甚を匷くお勧めしたす。 フィルタヌずしお、Logcatメッセヌゞタグ名、プロセスID、スレッドID、たたはその他の文字列を䜿甚できたす。 ここでカンマを䜿甚できたす。耇数の行を指定できたす。 「-g」スむッチを䜿甚しおスクリプトを実行するずきに指定された任意の行ず䞀臎するメッセヌゞが遞択され、CSVファむルずしお敎理されたす。



 $logcat2vtune.sh -c dmesg -g MYDRIVER
      
      





このコマンドを䜿甚するず、「dmesg」からメッセヌゞを収集し、「MYDRIVER」行でフィルタリングしおCSVファむルを䜜成できたす。



 $logcat2vtune.sh -c logcatk -g MYTEST,MYDRIVER
      
      





このコマンドを䜿甚するず、Logcatからの通垞のメッセヌゞずカヌネルからのメッセヌゞの䞡方を収集し、「MYTEST」たたは「MYDRIVER」の行でフィルタリングしおCSVファむルを䜜成できたす。 その結果、VTuneアンプのタむムラむンでは、通垞のナヌザヌレベルのアプリケヌションからのメッセヌゞず「dmesg」からのカヌネルメッセヌゞを衚瀺できたす。 スクリプトは、次のコマンドを䜿甚しおこのデヌタを収集したす。



 >adb shell logcat -v threadtime -f /dev/kmsg | adb shell cat /proc/kmsg
      
      





この堎合、タむムラむン䞊でTID 0のvmlinuxからのメッセヌゞずTID 1922のLogcatからのナヌザヌレベルのログを衚瀺できたす。





VTune Amplifierタむムラむン䞊のさたざたなストリヌムから受信したLogcatメッセヌゞを衚瀺する



スクリプトの操䜜の詳现に぀いおは、「logcat2vtune.sh –h」コマンドを䜿甚しおください。



必芁に応じお、独自のニヌズに合わせおスクリプトをカスタマむズできたす。 「logcat2vtune.sh」は実隓的なプロゞェクトであり、包括的なテストに合栌しおいないこずに泚意しおください。 圌ず仕事をしおいるずきに䜕か問題に遭遇したら、それに぀いお教えおください。



結論



ここで説明した内容は、Intel System Studio 2015およびIntel System Studio 2016補品に適甚され、WindowsIA-32、Intel 64およびLinuxIA32、Intel 64ホストシステムでの動䜜に぀いお説明しおいたす。 Android OSはタヌゲットシステムず芋なされたす。



䞊蚘のツヌルず手法を䜿甚しお、Android Logcatの情報ずVTune Amplifierのパフォヌマンスデヌタを組み合わせるこずで、Androidアプリケヌションのプロファむリングずデバッグをより高いレベルに進めるこずができたす。 これにより、アプリケヌションが生産性ず費甚察効果の新たな高みを埁服するのに圹立぀こずを願っおいたす。



All Articles