Arm Mobile Studioについて
この記事について
「Arm Mobile StudioでAndroidのパフォーマンス測定をDeepなレベルでしよう!」という事でYoutubeの放送を行いましたが、補足等をする記事です。
放送についてはコチラのアーカイブをご覧ください。
Arm Mobile Studioとは?
Arm Mobile StudioはArm社が提供しているモバイルゲーム(Android向けアプリ)制作者のためのツール群になっています。
以下の4つのツールをまとめたパッケージになっています。
■Streamline
CPUやGPUのカウンター情報などを閲覧できるツールです。
■PerformanceAdvisor
Streamlineで取得したデータから、わかりやすいレポート(HTML等)を作成してくれるツールです
■Graphics Analyzer
Graphicsの深いレベルを調査できるツールです。
■Mali Offline Compiler
Shaderを渡すと、どの位の負荷があるか等が事前に確認できるツールです。
どのツールもパフォーマンス計測に関連したツールになっています。
ツールによっては Arm社のGPU「Mali」が搭載されたAndroid端末がないと利用できないものもあります。
詳しい使い方・機能については、実際の放送をご覧ください。
Arm Mobile Studioで動作確認が出来ている端末はコチラをご覧ください。
https://developer.arm.com/tools-and-software/graphics-and-gaming/arm-mobile-studio/support/supported-devices
Mali GPU?
Mali GPUはArm社から提供されているモバイル向けのGPUになります。
日本ではQualcomm社のSoC「Snapdragon」がシェアも大きく有名だと思います。SnapdragonにはQualcomm社のGPU「Adreno」を積んでいます。ですので、日本ではQualcomm社のGPUシェアが大きい形になっています。
Mali GPU を採用しているSoCだとSamusung社の「Exynos」、他にもSoC「Kirin」等で採用されています。
世界的なシェアを見ると Mali GPUのシェアはとても大きなものになっています。
※Samusung社の場合、「Galaxy S10」と同じ名前でも出荷している地域によってSoCが異なり、MaliGPUモデルもあればAdrenoGPUモデルと分かれていたりします。
日本の場合ですと、Galaxy A20等のミドルクラスのAndroidデバイスでMaliGPUが積んであることが多いです。
Arm Mobile Studioの無償版とPro版について
Arm Mobile Studioはアカウントを登録することで、無償版を利用できます。ほとんどの機能は無償版で利用が出来るのですが、一部機能が制限されます。
大きい所ですと、Pro版ではバッチでの起動などのCIでの自動テスト等に関する機能が解放されるようになっています。
例えば、「アプリケーションのapkファイルを置いておくと、自動でPerformanceAdvisorでレポートまで出来ている」と言ったことがPro版では実現可能になるそうです。( 未検証ですが、ドキュメントを読む限り可能に見えます)
Pro版は値段は結構なお値段になります。
日本ではXLSOFTさんという会社さんが代理店として販売されていますので、コチラもご参考ください。
Streamlineで処理開始などのAnnotateを埋め込む
画像のような形でStreamlineに対してAnnnotationという形で好きな文字列を埋め込むことが出来ます。
マニュアルはコチラになります。https://developer.arm.com/documentation/101816/0706/Annotate-your-code
この機能を使えばロードの開始と終了に埋め込んでより深いレベルで状況が確認できるかと思います。
ただこのC言語ソースを呼び出すネイティブプラグインによって実現されます。
Graphics Analyzerが 64bitアプリを求めるという事について
Android 32bitアプリでGrapics Analyzerを起動してもデータが全然取得できませんでした。
原因を調べるため adb logcatしていたところ下記のようなエラーに遭遇しておりました。
I libEGL : Searching /data/user/0/com.DefaultCompany.URPNewProj for GLES layers
I libEGL : GLES layer found: /data/data/com.DefaultCompany.URPNewProj/libGLES_layer_aga.so
E libEGL : Failed to load layer /data/data/com.DefaultCompany.URPNewProj/libGLES_layer_aga.so with error: dlopen failed: "/data/data/com.DefaultCompany.URPNewProj/libGLES_layer_aga.so" is 64-bit instead of 32-bit
これを見る限り 64bit 用の GLESのレイヤーに一枚噛ませることでAnalyzerが実現しているのですが、64bit用の soファイルしかなくエラーが出てしまっているようでした。
Vulkanよりも、OpenGLESの方が良いという話について
Youtube放送中に「Vulkanだとオーバーヘッドも大きく、取れる項目が少なかったので OpenGLESアプリでしていた」という話をさせてもらいました。
Unityちゃんを置いただけのアプリをPerformanceAdvisorで実行してみたところ、下記のような差が出てしまいました。
OpenGLES 3.x
Vulkanで実行したケース
これはおそらくですが…
lwi_me.pyの引数で渡す .soファイルが原因だったのだと思います。
--lwi-vk-layer-lib-path ../target/android/arm/rooted/arm64-v8a/libVkLayerLWI64.so
のような形にしていたためです。rootedとしていたのが、Vulkan用のsofファイルがそちらにしかなかったためです。
またGraphics Analyzerでは、Traceする情報を選択することが出来るのですが…
Vulkanでは取得できる情報が少なくなってしまっています。
Mali Offline Compiler向けプラグイン
放送中にお見せしたMali Offline CompilerをUnityから呼び出す拡張をコチラに作ってみました。
しかし、Unityで「Compile and Show code」を行うと、Variantが多いShaderについては生のコードを書き出すのにとても時間が掛かってしまう…等々色々と悩みがあって、紹介を中途半端になってしまいました。
この辺は何か良いものが無いかは検討していってバージョンアップしたい所ですね…
(Stripping scriptable shader variantsではうまく行きませんでした。)
Mali Offline Compilerの出てくる結果について
Mali Offline CompilerにVertex Shaderを掛けるとPositionとVaryingの二つが出てくる下記の資料を読むと、「どうしてわかれているのか?」という事について何となく察せるようになっております。
また、ターゲットにするハードウェアによって出てくる結果が違うという話も触れさせていただきました。
下記のような形で、Cycleの情報で出てくるUnitの種類が異なっているのがお分かりかと思います。
Mali-G71の結果
Mali-G78についての結果
これはGPUによってArchitectureが異なり、積んであるUnitが異なっているからです。
Mali-G71はBifrostと呼ばれるアーキテクチャ、Mali-G78はValhallと呼ばれるアーキテクチャとなっています。
GPUのアーキテクチャーは下記の資料を見ていただくのが良いと思います。
その他情報集
UnityとArmのコラボレーションに関してのポータルです
Arm MobileStudioのチュートリアルページです。
Arm Mobile Studioの見るべき項目などを別途詳細で書いてあるマテリアルになります。
以上、放送の補足説明になります。