Assembly 如何通过获取指令类型细分来描述工作负载?

Assembly 如何通过获取指令类型细分来描述工作负载?,assembly,valgrind,windows-subsystem-for-linux,perf,intel-pin,Assembly,Valgrind,Windows Subsystem For Linux,Perf,Intel Pin,我想获得测试程序中内存读写指令的百分比,最好是动态的。除了计算gdb asm转储中的指令(无论如何都是静态的)之外,还有更简单的方法获得它吗?提供堆的总使用率。有一些不错的特性,但不支持WSL。具有指令计数功能,但我不确定它是否支持WSL。(更新:据报道,PIN在WSL下不工作。但它不需要性能计数器,因此它在VM或其他应用程序中仍然有用。) 您是否尝试过PIN,或SDE,它构建在PIN之上,可以满足您的需求 sde64-mix-->/my程序将告诉您PIN是否有效,并可能自行解决您的问题。SD

我想获得测试程序中内存读写指令的百分比,最好是动态的。除了计算gdb asm转储中的指令(无论如何都是静态的)之外,还有更简单的方法获得它吗?提供堆的总使用率。有一些不错的特性,但不支持WSL。具有指令计数功能,但我不确定它是否支持WSL。

(更新:据报道,PIN在WSL下不工作。但它不需要性能计数器,因此它在VM或其他应用程序中仍然有用。)


您是否尝试过PIN,或SDE,它构建在PIN之上,可以满足您的需求
sde64-mix-->/my程序将告诉您PIN是否有效,并可能自行解决您的问题。SDE的指令组合是通过助记符IIRC实现的,可能不是通过内存目标与src实现的,但至少在您开始编写自定义PIN工具之前,您会知道PIN会起作用

PIN基于动态运行时检测,而不是性能计数器。它甚至可能没有cath SIGILL(这并不是说WSL会有问题);它必须在CPU上模拟
lzcnt
,在CPU上解码为
repBSR
,诸如此类

因此,我怀疑PIN除了JIT之外还需要更多的内核支持(这是Java和web浏览器JS引擎所需要的,只是
mmap(PROT_EXEC)
)。它可能会使用ptrace,但如果GDB在WSL下工作,那么希望PIN会这样做

另见

相关:不特定于WSL,但提到了
sde64-mix

(更新:据报道,PIN在WSL下不起作用。但它不需要性能计数器,因此它在VM或其他应用程序中仍然很有用。)


您是否尝试过PIN,或SDE,它构建在PIN之上,可以满足您的需求
sde64-mix-->/my程序将告诉您PIN是否有效,并可能自行解决您的问题。SDE的指令组合是通过助记符IIRC实现的,可能不是通过内存目标与src实现的,但至少在您开始编写自定义PIN工具之前,您会知道PIN会起作用

PIN基于动态运行时检测,而不是性能计数器。它甚至可能没有cath SIGILL(这并不是说WSL会有问题);它必须在CPU上模拟
lzcnt
,在CPU上解码为
repBSR
,诸如此类

因此,我怀疑PIN除了JIT之外还需要更多的内核支持(这是Java和web浏览器JS引擎所需要的,只是
mmap(PROT_EXEC)
)。它可能会使用ptrace,但如果GDB在WSL下工作,那么希望PIN会这样做

另见


相关:不是特定于WSL的,但提到了
sde64-mix

valgrind工具所做的远远不止提供堆的总使用率

请参阅valgrind用户手册

特别是,请查看描述valgrind工具callgrind和cachegrind的部分


valgrind工具所做的远不止提供堆的总使用率

请参阅valgrind用户手册

特别是,请查看描述valgrind工具callgrind和cachegrind的部分


我没有WSL(或Windows),所以我不确定这个答案是否有效。如有必要,请发表评论!它至少对WSL以外的东西有用,因此可能会对未来的读者有所帮助。我收到错误:E:Fork for injector launcher failed:Bad address To work It,#1我运行了echo 0 | sudo tee/proc/sys/kernel/yama/ptrace#scope#2我运行了导出路径=$PATH:/home/myusername/sde,我尝试了#3 chmod-R 777。最后我尝试了#4 export PATH=$PATH:/home/myusername/sde/intel64/pin#u lib/injector,但还是失败了。xed64工作正常。这似乎是一个与WSL相关的问题,因为SDE64在virtualbox中工作。谢谢。我没有WSL(或Windows),所以我不确定这个答案是否有效。如有必要,请发表评论!它至少对WSL以外的东西有用,因此可能会对未来的读者有所帮助。我收到错误:E:Fork for injector launcher failed:Bad address To work It,#1我运行了echo 0 | sudo tee/proc/sys/kernel/yama/ptrace#scope#2我运行了导出路径=$PATH:/home/myusername/sde,我尝试了#3 chmod-R 777。最后我尝试了#4 export PATH=$PATH:/home/myusername/sde/intel64/pin#u lib/injector,但还是失败了。xed64工作正常。这似乎是一个与WSL相关的问题,因为SDE64在virtualbox中工作。谢谢