gem5-19 上的 X86 Linux 启动状态


gem5-linux-logo

推送到 gem5 的更改频率随时间增加。 这使得及时了解 gem5 的哪些功能正常工作、哪些不正常变得非常重要。 考虑到 gem5 是一个全系统模拟器,应该能够模拟现代操作系统,Linux 内核的启动是确定 gem5 工作状态的一个非常重要的基准。 然而,gem5 对最新 Linux 内核版本的支持状态很难发现,而且 gem5 网站上以前可用的 Linux 内核或配置文件相当旧。 gem5-19 最近也已发布。

因此,我们运行了测试以发现 gem5-19 在启动最新 Linux 内核版本方面的能力。 在这篇文章中,我们将讨论这些测试的结果。

配置空间

在 gem5 上模拟 Linux 启动时,可能的配置空间很大。 为了测试 gem5-19,我们评估了多种配置,考虑了五个 Linux 内核、四个 CPU 模型、两个内存系统、两种 Linux 启动类型和四个 CPU 核心数量。

我们使用 X86 ISA 进行了这些测试。 我们的方法应该可以轻松扩展到其他 ISA,但我们还没有运行这些测试。 我们欢迎其他贡献者运行这些测试!

以下是这些配置的详细信息:

Linux 内核

我们使用下面显示的五个最新 LTS(长期支持)内核评估了 gem5。 我们计划继续测试 LTS 内核版本以及每个 gem5 发布版本的最新内核。

CPU 模型

我们使用了 gem5 支持的四种 CPU 模型:

内存系统

gem5 支持两种主要内存系统(在这些测试中使用):

启动类型

启动类型是指内核加载后将接管的过程类型。 我们使用两种不同的选项:

gem5art

我们使用 gem5art(用于组件可重现性测试的库)来执行这些实验。 gem5art 帮助我们以更加结构化和可重现的方式进行 gem5 实验。 但是,我们将把关于 gem5art 的详细讨论推迟到未来的博客文章。 用于运行这些实验的 gem5 配置脚本可在 gem5art 仓库中找到,有关如何使用 gem5art 运行这些实验的详细信息可以在 gem5art 启动教程中找到。 我们使用的磁盘镜像和 Linux 内核二进制文件可从以下链接获得(警告:这些文件的大小从几 MB 到 2GB 不等):

Linux 启动状态

图 1 和图 2 分别显示了使用经典内存系统进行 init 和 systemd 启动类型的实验结果。 图 3 和图 4 分别显示了使用 Ruby 内存系统进行 init 和 systemd 启动类型的实验结果。 所有可能的状态输出(如下面的图所示)定义如下:

使用经典内存系统时,KVM 和 Atomic CPU 模型总是有效。 TimingSimple CPU 在单核时总是有效,但在多 CPU 核心时无法启动内核。 O3 CPU 模型在大多数情况下无法模拟内核启动(唯一的成功是使用两个 Linux 内核版本的 init 启动类型)。

Linux boot status for classic memory system and init boot
图 1:经典内存系统和 init 启动的 Linux 启动状态

Linux boot status for classic memory system and systemd boot
图 2:经典内存系统和 systemd 启动的 Linux 启动状态

如图 3 和图 4 所示,对于 Ruby 内存系统,KVM 和 Atomic CPU 模型似乎有效,除了少数情况下即使 KVM CPU 模型也会超时。 TimingSimple CPU 最多可工作 2 个核心,但在 4 和 8 个核心时失败。 O3 CPU 模型在所有情况下都无法模拟 Linux 启动或超时。

Linux boot status for ruby memory system and init boot
图 3:Ruby 内存系统和 init 启动的 Linux 启动状态

Linux boot status for ruby memory system and systemd boot
图 4:Ruby 内存系统和 systemd 启动的 Linux 启动状态

这些实验的原始数据/结果可从此链接获得(警告:文件大小约 40MB)。

前进方向

研究人员大多在 Linux 启动期间快速转发模拟以避免上述问题,或者最终使用较旧的内核版本。 这导致模拟结果和从这些实验中得出的结论存在不确定性。 作为社区,我们不应忽视这些问题,并尝试使 gem5 能够成功运行这些启动测试。 有几个 JIRA 问题 (GEM5-359, GEM5-360) 开放以记录这些问题,希望最终能够修复它们。 与使用 Ruby 内存系统的 TimingSimple CPU 相关的 gem5 问题已在 develop 分支上修复,并将成为 gem5-20 的一部分。

此外,我们需要为 gem5 的新版本重复这些测试,并在新的 Linux 内核可用时进行测试。 我们希望通过 gem5 网站上的新页面尽快让 gem5 社区了解这些测试的结果。