如何通过获取指令类型明细来表征工作负载?

问题描述 投票:0回答:1

我想获得测试程序中内存读写指令的百分比,最好是动态获取。除了计算gdb asm转储中的指令(这仍然是静态的)之外,还有没有更简单的方法来获取它? Valgrind提供总堆使用量。 Perf具有一些不错的功能,但确实支持WSL。 Pin具有指令计数功能,但是我不确定它是否支持WSL。

assembly valgrind perf
1个回答
0
投票

您是否有[[tried]] PIN,或基于PIN构建的SDE,您想要什么?https://software.intel.com/en-us/articles/intel-software-development-emulatorsde64 -mix -- ./my-program会告诉您PIN码是否有效,并且可以完全解决您的问题。 SDE的指令混合使用助记符IIRC,也许不是通过内存目标与src,但是至少您会知道在任何时间编写自定义PIN工具之前PIN都会起作用。

PIN基于动态运行时检测,而不是性能计数器。

它甚至可能不支持SIGILL(不是WSL会遇到这样的问题);它必须在将其解码为lzcnt的CPU上模拟rep bsr,诸如此类。 因此,我怀疑PIN除了JIT的能力之外还需要更多的内核支持(Java和Web浏览器JS引擎需要的东西,而且只是mmap(PROT_EXEC))。它可能使用ptrace,但是

如果GDB在WSL下工作,那么PIN也应该如此。

另请参见Tools to count number of different types of instructions in x86 assembly to create a dynamic instruction mix table

相关:How do I determine the number of x86 machine instructions executed in a C program?不是特定于WSL的,但是提到了sde64 -mix

© www.soinside.com 2019 - 2024. All rights reserved.