を実行しているC++アプリケーションでkernel.kallsymsの役割:私は以下のスイッチと私のC++コードをコンパイル
g++ -O0 -g -rdynamic -DNDEBUG -DARMA_NO_DEBUG -std=c++11 -pthread
リンカスイッチは、次のとおりです。
-lboost_system -lboost_thread -lboost_chrono -larmadillo -pthread
しかし、私は、私にはスレッドを使用しません応用。私はまた、delay
関数の使用を避けます。
次にコードを実行し、perf
ツールでテストします。
sudo perf record ./bin/my_application
sudo perf report -f
結果は私には奇妙です:
Overhead Command Shared Object Symbol
50.92% myApplication [kernel.kallsyms] [k] native_sched_clock
24.73% myApplication [kernel.kallsyms] [k] pick_next_entity
17.46% myApplication [kernel.kallsyms] [k] prepend_name
2.57% myApplication myApplication [.] arma::arrayops::copy_small<double>
1.11% myApplication myApplication [.] arma::Mat<double>::Mat
1.11% myApplication myApplication [.] myClass::myMethod
1.11% myApplication libblas.so.3 [.] dgemv_
0.97% myApplication myApplication [.] arma::Mat<double>::init_cold
kernel.kallsyms
機能が実行時間を支配しているのはなぜ?
私のアプリケーションではそれぞれnative_sched_clock
,pick_next_entity
,prepend_name
となりますか?
'なぜkernel.kallsyms関数が実行時間を支配しているのですか? - おそらく、あなたが使用する* user-space *カウンタは、* kernel *より頻繁に起動されません。 '私のアプリケーションでは、それぞれnative_sched_clock、pick_next_entity、prepend_nameは何ですか? - これらはカーネル関数です。カーネルコードでその記述をチェックすることができます。例えば。 [prepend_name](http://elixir.free-electrons.com/linux/latest/source/fs/dcache.c#L3025)は、ファイル名で動作します。 – Tsyvarev