如何仅针对 gem5 中来宾源代码的给定兴趣区域分析统计信息?

How to analyze stats only for a given interest area of guest source code in gem5?

我已经开始使用 gem5 从缓存未命中或 dram 访问的角度弄清楚发生了什么。

我发现存在 m5_checkpoint, m5_reset_...

那么,要打印出感兴趣区域的“统计信息”,我如何在下面的示例中使用这些 API??

int main(void) {
   init() // I don't care what happens here
   run() // This function is what I want to analyze
   return 0;
}

密切相关的问题:How to count the number of CPU clock cycles between the start and end of a benchmark in gem5?

通过阅读 m5 工具的源代码,您可以看到它只是使用魔法(通常未分配)指令,或对魔法(通常未映射)内存地址进行内存访问。

因此,例如对于指令,您可以只插入那些带有 .inst 和内联汇编的指令,通常按顺序:

  • resetsats 在感兴趣区域之前
  • dumpstats 之后

最干净的方法是实际包含 m5 CLI 工具使用的 gem5 源代码中的 m5ops.h header,但我发现有时自己手动编码更容易。

例如,对于 aarch64,它们看起来像:

/* resetstats */
__asm__ __volatile__ ("mov x0, #0; mov x1, #0; .inst 0XFF000110 | (0x40 << 16);" : : : "x0", "x1")
/* dumpstats */
__asm__ __volatile__ ("mov x0, #0; mov x1, #0; .inst 0xFF000110 | (0x41 << 16);" : : : "x0", "x1")

这里是: