为什么Linux性能计数器中的指令数不确定
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了为什么Linux性能计数器中的指令数不确定,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1744字,纯文字阅读大概需要3分钟。
内容图文
![为什么Linux性能计数器中的指令数不确定](/upload/InfoBanner/zyjiaocheng/964/b77dfcb0de014f90a5cec4be88034d40.jpg)
能够分析其二进制文件实际上将在模拟器(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的指令量(与示例输出中的指令量相反),以确定方式获取执行代码量?
解决方法:
摘要:
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性能计数器中的指令数不确定所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。