Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ kernel.kallsyms在C++;应用程序运行_C++_Linux Kernel_Performance Testing_Perf - Fatal编程技术网

C++ kernel.kallsyms在C++;应用程序运行

C++ kernel.kallsyms在C++;应用程序运行,c++,linux-kernel,performance-testing,perf,C++,Linux Kernel,Performance Testing,Perf,我用以下开关编译了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_applicatio

我用以下开关编译了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
开销命令共享对象符号 50.92%myApplication[kernel.kallsyms][k]本机时钟 24.73%myApplication[kernel.kallsyms][k]选择下一个实体 17.46%myApplication[kernel.kallsyms][k]前缀_name 2.57%我的应用程序我的应用程序[.]arma::arrayops::copy_small 1.11%myApplication myApplication[.]arma::Mat::Mat 1.11%myApplication myApplication[.]myClass::myMethod 1.11%的myApplication libblas.so.3[.]dgemv_ 0.97%myApplication myApplication[.]arma::Mat::init_cold 为什么
kernel.kallsyms
函数控制着执行时间


对于我的应用程序,
native\u sched\u clock
pick\u next\u entity
prepend\u name
每个都在做什么?

您的应用程序太快太短,无法以默认频率
perf record
进行分析。所有带有
[k]
[kernel.kallsyms]
的行都来自内核,它们执行一些服务任务,比如加载二进制文件和调度线程/进程(```)。当您在某种虚拟化平台(如xen、kvm等)上使用perf时,可能会出现问题,因为大多数虚拟化环境都不允许访问来宾内核的硬件性能计数器(AWS有时会在独立实例上提供基本的周期子集和指令);所以perf将使用软件定时器中断

尝试在要测量的代码周围添加循环(重复100或1000次)和/或增加要处理的数据的大小。您的程序应至少运行几秒钟


您还可以尝试运行
perf stat./program
来获取程序的计时值和基本硬件性能计数(如果支持计数器),并发布结果。

为什么kernel.kallsyms函数在执行时间上占主导地位?
-可能,您使用的用户空间计数器的触发频率低于内核计数器<代码>什么是本机时钟、选择下一个实体、为我的应用程序预先命名?这些是内核函数,您可以在内核代码中查看它们的描述。例如,使用文件名进行操作。