跳转至

背景

gem5最新版本25.1.0.0于2026.1.发布,其中基于 Hot Chips 2025 发布的公开信息,新的配置文件模拟了 Arm Neoverse V2 CPU。通过该配置文件,可以学习到如何在gem5上对一个具体的CPU进行建模,CPU架构应该如何组织。美中不足的是没有对硬件进行性能对齐,只是一个初期的建模尝试。

一般建模流程

个人理解一般的建模流程是:搜集CPU手册/逆向网站的信息 -> 尽可能准而详细在gem5将这些信息描述出来 -> 寻找用于测试的负载/benchmark -> 在gem5和硬件同时跑,对比性能计数器 -> 找到性能差异点,纠错,继续对比gem5和硬件...

其中比较关键的点在于: 1. 搜集到的CPU信息不全,关键信息如BTB entry,Cache size缺失,这种情况只能自己猜,怎么猜?如果有真实硬件,那么需要通过CPU逆向,构造特定的程序,dump硬件计数器来逆向分析出需要的信息,这块学问很多也很有趣,有兴趣的读者可以看CPU微架构逆向方法学,非常好的博客。如果没有真实硬件,没招,这种建模也没什么意义 2. 搜集到的CPU信息很全,但是gem5的O3CPU架构与待建模的CPU可能有差别,并且一些信息在gem5无法通过建模参数简单改变,这就是模拟器的局限性了,你很难用一个通用的模拟器去建模所有的CPU。当然如果这些参数对实际负载程序影响不大,省略也是可以的 3. benchmark的选择:你是要跑一个裸机的还是一个需要一个os的benchmark?gem5和硬件是否都支持跑一个OS?如果单单是一个硬件的仿真,很多情况是不支持跑一个linux然后跑benchmark的,这种情况你如何确定你的应用程序是什么,它真的能够反应gem5的建模精确度吗?

上面提出了很多需要思考的问题,都不简单并且很难找到一个通用的解法,这也是性能建模的难点。回到gem5,看一下25.1.0.0版本,做了什么改变,我只列出我关心的,arm和gpu也有很多更新但不是我关注的,详见https://github.com/orgs/gem5/discussions/2865

  1. 支持一个新的分支预测器件gshare
  2. 支持前端解耦,FDP
  3. 支持分布式发射队列
  4. 发布新的arm core config,本文分析