Docker* コンテナでのプロファイル

インテル® VTune™ プロファイラー

この記事は、インテル® デベロッパー・ゾーンに公開されている『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* コンテナをインストールして設定する

  1. [オプション] 必要に応じて、ホストシステムから以前の Docker* バージョンを削除します。
    host> sudo apt-get remove docker
  2. 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 (英語) を参照してください。
  3. 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 コマンドを使用して、ファイルから圧縮されたリポジトリーをロードすることもできます。

  4. -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
  5. コンテナ ID を確認します。
    host> docker ps
    CONTAINER ID      IMAGE             COMMAND             CREATED             STATUS            PORTS             NAMES
    98fec14f0c08      myimage           "/bin/bash"         10 seconds ago      Up 9 seconds                        sharp_thompson
  6. コンテナ ID を使用してバックグラウンド・モードで (bash シェルを起動して) コンテナに入ります。
    host> docker exec -it 98fec14f0c08  /bin/bash
  7. Java* アプリケーションと JVM を動作中の Docker* インスタンスにコピーします。次に例を示します。
    host> docker cp /home/samples/jdk1.8.tar 98fec14f0c08:/var/local
    host> docker cp /home/samples/matrix.tar 98fec14f0c08:/var/local
  8. matrix.tar および jdk アーカイブを展開します。

アタッチモードで高度な hotspot 解析を実行する

  1. ホストでインテル® VTune™ Amplifier を起動します。
    host> cd /opt/intel/vtune_amplifier_2018.0.2.522558
    host> source ./amplxe-vars.sh
    host> amplxe-gui
  2. プロジェクト (例: matrix_java) を作成します。
  3. コンテナ内で Java* アプリケーションを実行します。
    container> cd /var/local/matrix
    container> /var/local/jdk1.8.0_72-x64/bin/java -cp . MatrixMultiplication 2000 2000 2000 2000
  4. top コマンドを実行して java プロセスの PID を取得します。
  5. [Analysis Target (解析ターゲット)] タブで次の項目を設定します。
    • [local host (ローカルホスト)] ターゲット・システム・タイプ
    • [Attach To Process (プロセスにアタッチ)] ターゲットタイプ
    • javaPID (プロセス ID) (例: 24116)

  6. 右の [Binary/Source Search (バイナリー/ソース検索)] ボタンをクリックして、ホスト上のソースが配置されている場所を指定します。

    インテル® VTune™ Amplifier は、このパスを検索して、hotspot の原因であるソースコードとマシン命令を関連付けます。

  7. [Analysis Type (解析タイプ)] タブに切り替えて、[Advanced Hotspots (高度な hotspot)] 解析タイプを選択し、[Hotspots and stacks (hotspot とスタック)] オプションを選択します。

  8. [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 を参照してください。

関連情報

インテル® VTune™ プロファイラー・パフォーマンス解析クックブックのトップに戻る

タイトルとURLをコピーしました