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

bn31dyow  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(96)

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

x7yiwoj4

x7yiwoj41#

(更新:据报道,PIN在WSL下不起作用。但它不需要perf计数器,所以在VM或其他环境中仍然有用。它可能在WSL 2中起作用,WSL 2是运行真实的Linux内核的VM。)
您是否 * 尝试过 * PIN或SDE,它是建立在PIN之上的,可以满足您的需求?https://software.intel.com/en-us/articles/intel-software-development-emulator

**sde64 -mix -- ./my-program**将告诉您PIN是否有效,并可能自行解决您的问题。SDE的指令组合是通过助记符IIRC实现的,可能不是通过内存目的地而不是src实现的,但至少在您花时间编写自定义PIN工具之前,您将知道PIN是否有效。
**PIN基于动态运行时检测,而不是性能计数器。**它甚至可能不包含SIGILL(WSL对此没有问题);它必须在CPU上模拟lzcnt,在那里它解码为rep bsr,等等。

所以我怀疑PIN除了JIT的能力之外还需要更多的内核支持(像Java和Web浏览器JS引擎这样的东西需要,而且只是mmap(PROT_EXEC))。
另请参阅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

yebdmbv4

yebdmbv42#

valgrind工具所做的远不止提供总的堆使用情况。
请参阅valgrind用户手册http://www.valgrind.org/docs/manual/manual.html
特别是,请查看描述valgrind工具callgrind和cachegrind的章节。
http://www.valgrind.org/docs/manual/cg-manual.html
http://www.valgrind.org/docs/manual/cl-manual.html

相关问题