-v /:/host
でコンテナーを実行する フラグと実行中の perf report
--symfs /host
のコンテナー内 フラグで修正:
96.59% a.out a.out [.] function
2.93% a.out [kernel.kallsyms] [k] 0xffffffff8105144a
0.13% a.out [nvidia] [k] 0x00000000002eda57
0.11% a.out libc-2.19.so [.] vfprintf
0.11% a.out libc-2.19.so [.] 0x0000000000049980
0.09% a.out a.out [.] main
0.02% a.out libc-2.19.so [.] _IO_file_write
0.02% a.out libc-2.19.so [.] write
そのままでは機能しない理由の一部は? perf script
からの出力 これに光を当てます:
...
a.out 24 3374818.880960: cycles: ffffffff81141140 __perf_event__output_id_sample ([kernel.kallsyms])
a.out 24 3374818.881012: cycles: ffffffff817319fd _raw_spin_lock_irqsave ([kernel.kallsyms])
a.out 24 3374818.882217: cycles: ffffffff8109aba3 ttwu_do_activate.constprop.75 ([kernel.kallsyms])
a.out 24 3374818.884071: cycles: 40053d [unknown] (/var/lib/docker/aufs/diff/9bd2d4389cf7ad185405245b1f5c7d24d461bd565757880bfb4f970d3f4f7915/a.out)
a.out 24 3374818.885329: cycles: 400544 [unknown] (/var/lib/docker/aufs/diff/9bd2d4389cf7ad185405245b1f5c7d24d461bd565757880bfb4f970d3f4f7915/a.out)
...
/var/lib/docker/aufs
に注意してください 道。これはホストからのものであるため、コンテナーには存在しません。perf report
を支援する必要があります それを見つけるために。これは、mmap イベントが cgroup の外部で perf によって追跡され、perf がパスの再マッピングを試みないために発生する可能性があります。
もう 1 つのオプションは、sudo perf record -a docker run -ti <container name>
のように perf ホスト側で実行することです。 .ただし、コレクションはここではシステム全体である必要があります (-a
フラグ) コンテナーは、ここで実行する docker クライアント ツールのプロセス階層にない docker デーモン プロセスによって生成されるためです。
コンテナーの実行方法を変更する必要がない (既に実行中のプロセスをプロファイリングできるようにする) 別の方法は、bindfs を使用してコンテナーのルートをホストにマウントすることです:
bindfs /proc/$(docker inspect --format {{.State.Pid}} $CONTAINER_ID)/root /foo
次に、perf レポートを perf report --symfs /foo
として実行します
perf record
を実行する必要があります システム全体ですが、特定のコンテナのイベントのみを収集するように制限できます:
perf record -g -a -F 100 -e cpu-clock -G docker/$(docker inspect --format {{.Id}} $CONTAINER_ID) sleep 90
Linux 上の matlab は何もプロットできません (libstdc++.so.6 をロードできません:バージョン `CXXABI_1.3.8' が見つかりません)
Linux 用 R パッケージのインストール エラー