Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.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/3/wix/2.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
我看了一下柜台';在linux上使用perf时,其值始终为0_Linux_System Calls_Perf - Fatal编程技术网

我看了一下柜台';在linux上使用perf时,其值始终为0

我看了一下柜台';在linux上使用perf时,其值始终为0,linux,system-calls,perf,Linux,System Calls,Perf,我在Ubuntu 12.04上运行程序, 计数器的值通常为0。我的计数器似乎不适用于我 attr.read_format = PERF_FORMAT_TOTAL_TIME_ENABLED | PERF_FORMAT_TOTAL_TIME_RUNNING; 运行程序时,输出为: 我无法理解这些值的含义。我想要得到的是每个cpu的缓存引用和它的缓存未命中。但显然结果似乎不正确 我已在以下位置阅读了有关性能方法的文档: #包括 #包括 #包括 #包括 #包

我在Ubuntu 12.04上运行程序, 计数器的值通常为0。我的计数器似乎不适用于我

attr.read_format = PERF_FORMAT_TOTAL_TIME_ENABLED |
                   PERF_FORMAT_TOTAL_TIME_RUNNING;
运行程序时,输出为:



我无法理解这些值的含义。我想要得到的是每个cpu的缓存引用和它的缓存未命中。但显然结果似乎不正确

我已在以下位置阅读了有关性能方法的文档:

#包括
#包括
#包括
#包括
#包括
#包括

但是,不幸的是,结果也总是0

下面是一个简短的示例,用于测量对printf(3)的调用的总指令计数

#包括
#包括
#包括
#包括
#包括
#包括
#包括
长的
性能事件打开(结构性能事件属性*硬件事件,pid,
int cpu、int group_fd、无符号长标志)
{
int ret;
ret=syscall(_unr_perf_event_open,hw_event,pid,cpu,
组(fd,flags),;
返回ret;
}
int
主(内部argc,字符**argv)
{
结构性能事件属性;
长计数;
int-fd;
memset(&pe,0,sizeof(struct perf_event_attr));
pe.type=性能类型硬件;
pe.size=sizeof(结构性能事件属性);
pe.config=性能计数硬件指令;
pe.disabled=1;
pe.exclude_kernel=1;
pe.hv=1;
fd=性能事件打开(&pe,0,-1,-1,0);
如果(fd==-1){
fprintf(stderr,“打开引线%llx\n时出错”,pe.config);
退出(退出失败);
}
ioctl(fd,性能事件IOC重置,0);
ioctl(fd,性能事件IOC启用,0);
printf(“此printf的测量指令计数”);
ioctl(fd,性能事件IOC禁用,0);
读取(fd、计数和大小(长));
printf(“已使用%lld条指令”,计数);
关闭(fd);
}

我刚刚试过你的代码,删除下面的行(第75、76行)使代码对我有效

attr.read_format = PERF_FORMAT_TOTAL_TIME_ENABLED |
                   PERF_FORMAT_TOTAL_TIME_RUNNING;

我刚刚尝试了你的代码,删除下面的行(第75,76行)使代码对我有效

attr.read_format = PERF_FORMAT_TOTAL_TIME_ENABLED |
                   PERF_FORMAT_TOTAL_TIME_RUNNING;

我已经编辑了我的问题并修改了我的程序,但是一些问题似乎仍然存在。你能帮我吗!谢谢您是否在“perf stat-e cache misses ls”上看到任何缓存未命中。请尝试使用ioctls启用、禁用和重置计数器,就像手册页上的示例中所做的那样。请参阅上面我修改的答案。我已经解决了此问题。起初我确实删除了这些行,但没有任何更改,因为我在VMware中尝试了该代码。但是,当我在真实的Ubuntu环境中运行这段代码时,一切都很好!谢谢你的帮助!我已经编辑了我的问题并修改了我的程序,但是一些问题似乎仍然存在。你能帮我吗!谢谢您是否在“perf stat-e cache misses ls”上看到任何缓存未命中。请尝试使用ioctls启用、禁用和重置计数器,就像手册页上的示例中所做的那样。请参阅上面我修改的答案。我已经解决了此问题。起初我确实删除了这些行,但没有任何更改,因为我在VMware中尝试了该代码。但是,当我在真实的Ubuntu环境中运行这段代码时,一切都很好!谢谢你的帮助!