この記事は、インテル® デベロッパー・ゾーンに公開されている『Intel® VTune™ Profiler Performance Analysis Cookbook』の「Profiling Docker* Containers」日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。
このレシピは、インテル® VTune™ Amplifier の解析向けに Docker* コンテナを構成して、独立したコンテナ環境で動作しているアプリケーションの hotspot を特定します。
コンテンツ・エキスパート: Denis Pravdin (英語)
注
高度な hotspot 解析は、インテル® VTune™ Amplifier 2019 で汎用の hotspot 解析に統合されました。ハードウェア・イベントベース・サンプリング収集モードで利用できます。
使用するもの
以下は、パフォーマンス解析シナリオで使用するハードウェアとソフトウェアのリストです。
- アプリケーション: MatrixMultiplication。この Java* アプリケーションはデモ用であり、ダウンロードすることはできません。
- ツール: インテル® VTune™ Amplifier 2018: 高度な hotspot 解析
注
- インテル® VTune™ プロファイラー評価版のダウンロードと製品サポートについては、https://www.isus.jp/intel-vtune-amplifier-xe/ を参照してください。
- このクックブックのレシピはすべてスケーラブルであり、インテル® VTune™ Amplifier 2018 以降に適用できます。バージョンにより設定がわずかに異なることがあります。
- ベータ版インテル® oneAPI ベース・ツールキット向けのバージョンから、インテル® VTune™ Amplifier の名称がインテル® VTune™ プロファイラーに変わりました。引き続き、インテル® Parallel Studio XE またはインテル® System Studio のコンポーネントとして、あるいはスタンドアロン版のインテル® VTune™ プロファイラーをご利用いただけます。
- Linux* コンテナランタイム: docker.io
- オペレーティング・システム: Ubuntu* 17.04
- CPU: インテル® プロセッサー (開発コード名 Skylake)、8 論理 CPU
Docker* コンテナをインストールして設定する
- [オプション] 必要に応じて、ホストシステムから以前の Docker* バージョンを削除します。
host> sudo apt-get remove docker
- Docker* をインストールします。
host> sudo apt-get update host> sudo apt-get install docker.io
注
- Docker* コンテナランタイムのバージョンはオペレーティング・システムのバージョンに依存します。apt-cache search “container runtime” と入力すると、正しいバージョンが表示されます。
- パッケージをインストールできない場合、Docker* の systemd サービスファイルでプロキシーサーバーが設定されていることを確認してください。詳細は、https://docs.docker.com/engine/admin/systemd/#httphttps-proxy (英語) を参照してください。ステップ 1 から 6 に従い、例のプロキシー名を使用するプロキシー名に変更します。
- インストールの詳細は、https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/#install-docker-ce (英語) を参照してください。
- Docker* イメージを作成します。
host> cd /tmp host> touch Dockerfile host> echo FROM ubuntu:latest > ./Dockerfile host> docker build -t myimage . Sending build context to Docker daemon 6.295 MB Step 1: FROM ubuntu:latest e0a742c2abfd: Pull complete 486cb8339a27: Pull complete dc6f0d824617: Pull complete 4f7a5649a30e: Pull complete 672363445ad2: Pull complete Digest: sha256:84c334414e2bfdae99509a6add166bbb4fa4041dc3fa6af08046a66fed3005f Status: Downloaded newer image for ubuntu:latest ---> 14f60031763d Successfully built 14f60031763d イメージ myimage が作成されたことを確認します。 host> docker images REPOSITORY TAG IMAGE ID CREATED SIZE myimage latest 14f60031763d 2 weeks ago 119.5 MB
注
docker load -i image.tar コマンドを使用して、ファイルから圧縮されたリポジトリーをロードすることもできます。 - -t および -d オプションを使用してコンテナを実行します。
host> docker run -td myimage
注
インテル® VTune™ Amplifier のアルゴリズム解析 (基本 hotspot、並行性、ロックと待機) 向けに Docker* コンテナを実行するには、次のように ptrace サポートを有効にします。host> docker run --cap-add=SYS_PTRACE -td myimage
または、privileged モードでコンテナを起動します。
host> docker run –-privileged -td myimage
- コンテナ ID を確認します。
host> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 98fec14f0c08 myimage "/bin/bash" 10 seconds ago Up 9 seconds sharp_thompson
- コンテナ ID を使用してバックグラウンド・モードで (bash シェルを起動して) コンテナに入ります。
host> docker exec -it 98fec14f0c08 /bin/bash
- Java* アプリケーションと JVM を動作中の Docker* インスタンスにコピーします。次に例を示します。
host> docker cp /home/samples/jdk1.8.tar 98fec14f0c08:/var/local host> docker cp /home/samples/matrix.tar 98fec14f0c08:/var/local
- matrix.tar および jdk アーカイブを展開します。
アタッチモードで高度な hotspot 解析を実行する
- ホストでインテル® VTune™ Amplifier を起動します。
host> cd /opt/intel/vtune_amplifier_2018.0.2.522558 host> source ./amplxe-vars.sh host> amplxe-gui
- プロジェクト (例: matrix_java) を作成します。
- コンテナ内で Java* アプリケーションを実行します。
container> cd /var/local/matrix container> /var/local/jdk1.8.0_72-x64/bin/java -cp . MatrixMultiplication 2000 2000 2000 2000
- top コマンドを実行して java プロセスの PID を取得します。
- [Analysis Target (解析ターゲット)] タブで次の項目を設定します。
- [local host (ローカルホスト)] ターゲット・システム・タイプ
- [Attach To Process (プロセスにアタッチ)] ターゲットタイプ
- java の PID (プロセス ID) (例: 24116)
- 右の [Binary/Source Search (バイナリー/ソース検索)] ボタンをクリックして、ホスト上のソースが配置されている場所を指定します。
インテル® VTune™ Amplifier は、このパスを検索して、hotspot の原因であるソースコードとマシン命令を関連付けます。
- [Analysis Type (解析タイプ)] タブに切り替えて、[Advanced Hotspots (高度な hotspot)] 解析タイプを選択し、[Hotspots and stacks (hotspot とスタック)] オプションを選択します。
- [Start (開始)] をクリックして解析を開始します。
コンテナで収集したデータを解析する
データ収集が完了すると、インテル® VTune™ Amplifier はデフォルトの [Hotspots (hotspot)] ビューポイントに結果を表示します。
[Summary (サマリー)] ビューの [Top Hotspots (上位の hotspot)] セクションは、ターゲット・アプリケーションの multiply 関数に最も CPU 時間がかかっていることを示しています。リストの関数をクリックして [Bottom-up (ボトムアップ)] タブに切り替え、この hotspot 関数のスタックフローを確認します。
詳細に解析するため、hotspot 関数をダブルクリックして関数の hotspot ソース行を特定し、この行で収集されたメトリックデータを解析します。
Docker* コンテナモジュールの統計を取得するには、[Module/Function/Call Stack (モジュール/関数/コールスタック)] でデータをグループ化し、モジュールパスの docker エントリーでコンテナモジュールを識別します。
注
このレシピの情報は、https://software.intel.com/en-us/forums/intel-vtune-amplifier-xe/topic/743546 を参照してください。
関連情報
- Java* コード解析 (英語)
- コンテナターゲットのプロファイル (英語)