性能计数器linux,为什么Linux性能计数器中的指令数不确定

能够分析其二进制文件实际上将在模拟器(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,ns-3

来源: https://codeday.me/bug/20190708/1402729.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值