Linux   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为什么Linux性能计数器中的指令数不确定大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

能够分析其二进制文件实际上将在模拟器(NS-3 / DCE)下运行的应用程序运行时.我想使用 linux性能计数器,我期望没有非确定性来源的应用程序的指令计数是确定性的. 根据linux性能计数器,我不能错,让我们举一个简单的例子: $(perf stat -c -- sleep 1 2>&1 && perf stat -c -- sleep 1 2>&1) |grep instructions
能够分析其二进制文件实际上将在模拟器(NS-3 / DCE)下运行的应用程序运行时.我想使用 linux性能计数器,我期望没有非确定性来源的应用程序的指令计数是确定性的.
根据linux性能计数器,我不能错,让我们举一个简单的例子

$(perf stat -c -- sleep 1 2>&1 && perf stat -c -- sleep 1 2>&1) |grep instructions
        669218 instructions              #    0,61  insns per cycle
        682286 instructions              #    0,58  insns per cycle

1)这种非决定论的来源是什么?这是否源于cpu中的低级分支预测和其他引擎.

2)其他问题,是否有办法知道输入cpu的指令量(与示例输出中的指令量相反),以确定方式获取执行代码量?

解决方法@H_301_20@
摘要

1)非确定性是由睡眠1命令的变化引起的,而不是来自分支预测或其他微架构特征.

2)如果cpu支持,您可以使用硬件偶数计数器找到获取的指令数.但是,这将比退役指令的数量变化更多(这是perf通常报告的指令).

细节:

如果您想要执行确定数量的指令,则sleep命令不是一个好的测试用例.它将执行非确定数量的指令,因为内核正在做的事情会有一些细微的变化.

您可以使用以下指令指定是收集用户模式还是内核模式指令计数:u表示用户模式或指令:k表示内核模式.两次运行:

perf stat -e instructions:k,instructions:u,instructions sleep 1

我得到以下结果:

PerfoRMANce counter stats for 'sleep 1':

       373,044 instructions:k            #    0.00  insns per cycle        
       199,795 instructions:u            #    0.00  insns per cycle        
       572,839 instructions              #    0.00  insns per cycle        

   1.001018153 seconds time elapsed

PerfoRMANce counter stats for 'sleep 1':

       379,722 instructions:k            #    0.00  insns per cycle        
       199,970 instructions:u            #    0.00  insns per cycle        
       579,519 instructions              #    0.00  insns per cycle        

   1.000986201 seconds time elapsed

正如您所看到的,实际经过的睡眠时间1略有不同.哪个是非决定论的来源.但是,用户模式指令的数量比内核模式指令的变化少.

大佬总结

以上是大佬教程为你收集整理的为什么Linux性能计数器中的指令数不确定全部内容,希望文章能够帮你解决为什么Linux性能计数器中的指令数不确定所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。