我想获得测试程序中内存读写指令的百分比,最好是动态的。除了统计gdb asm转储中的指令数(这是静态的),还有什么更简单的方法来获得它吗?Valgrind提供了总堆使用率。Perf有一些不错的特性,但不支持WSL。Pin有指令计数功能,但我不确定它是否支持WSL。
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,等等。
sde64 -mix -- ./my-program
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。
mmap(PROT_EXEC)
sde64 -mix
yebdmbv42#
valgrind工具所做的远不止提供总的堆使用情况。请参阅valgrind用户手册http://www.valgrind.org/docs/manual/manual.html特别是,请查看描述valgrind工具callgrind和cachegrind的章节。http://www.valgrind.org/docs/manual/cg-manual.htmlhttp://www.valgrind.org/docs/manual/cl-manual.html
2条答案
按热度按时间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
。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