linux - 用于 FS 在 x86 SMP 中启动的工作 linux 内核 + gem5 配置

标签 linux x86 multiprocessing x86-64 gem5

我正在尝试启动 Linux 内核 2.6.22.9 的 gem5 FullSystem (FS) 模拟(因为二进制文件由 gem5 提供)以及 TimingSimpleCPU 上的自定义 Linux 内核 3.4.112。虽然它们都在单核 x86 FS 模拟机中工作,但它们无法在多核模拟机中启动。

我什至不知道如何开始调试。我已经尝试连接到 gem5 TimingSimpleCPU 为端口 7000、7001 等上的每个处理器提供的远程 gdb 端口。我看到在双核启动时,在某个点之后,核心 0 卡在 schedule() 调用上,而核心 1 始终保持空闲状态()并且从不调度()任何东西,直到核心 0 也卡在 schedule() 调用上.

调试 gem5 及其与 Linux 内核的兼容性以在 TimingSimpleCPU X86 arch 上启动多核完整系统的正确方法是什么?我认为可能存在与自旋锁支持或 APIC 相关的问题。

最佳答案

X86 2 核心 Linux 内核 5.1、TimingSimpleCPU、gem5 08c79a194d1a3430801c04f37d13216cc9ec1da3 恰好适用于此设置:https://github.com/cirosantilli/linux-kernel-module-cheat/tree/6aa2f783a8a18589ae66e85f781f86b08abb3397#gem5-buildroot-setup-getting-started启动完成,cat/proc/cpuinfo 显示 2 个 CPU。

最后的运行命令是:

./run --cpus 2 --emulator gem5 -- --cpu-type TimingSimpleCPU

该存储库中指定了所有内容,包括如何构建 gem5、Linux 内核以及如何运行它们。

然后,只需轻按一下开关,如果您好奇的话,同样适用于 aarch64:

./run --arch aarch64 --cpus 2 --emulator gem5 -- --cpu-type TimingSimpleCPU

然后我根据 OP 的评论添加了选项 --caches --l2cache ,现在我重现了失败,我没有解决方案:

./run --cpus 2 --emulator gem5 -- --cpu-type TimingSimpleCPU --caches --l2cache

开机挂起,最后的终端信息是:

pci 0000:00:04.0: legacy IDE quirk: reg 0x1c: [io  0x0376]

在上方一点我们可以看到可疑消息:

[Firmware Bug]: CPU1: APIC id mismatch. Firmware: 1 APIC: 0

但是,带有额外选项的 ARM 启动仍然有效:

./run --arch aarch64 --cpus 2 --emulator gem5 -- --cpu-type TimingSimpleCPU --caches --l2cache

不过,我后来尝试了更多的缓存选项:

/run --arch aarch64 --emulator gem5 --cpu 2 --run-id 2 -- --cpu-type=HPI --caches --l2cache --l1d_size=64kB --l1i_size=64kB --l2_size=256kB

它也失败了,如在:https://github.com/cirosantilli/linux-kernel-module-cheat/tree/99180e6616331b7385b09147f11f67962f9facc4#gem5-arm-multicore-hpi-boot-fails 中所解释的那样...

如何调试此类问题以使其正常运行是一个极其困难的问题,需要对 Linux 内核 + X86 ISA + gem5 有足够的了解,其中 enough 是未定义的。这个学习过程与启用正确的日志选项/关注代码的正确部分密切相关。该设置恰好出于“运气”。

关于linux - 用于 FS 在 x86 SMP 中启动的工作 linux 内核 + gem5 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56642695/

相关文章:

c++ - 用C++实现一棵树

python - 如何在 Linux 中的键盘上获取箭头键和回车键,使其表现得像 Windows7

linux - 获取变量中存储的相对路径的绝对路径

python - 具有多处理功能的 py2exe 无法运行进程

linux - unix passwd 所需的功能

c++ - VC++ 2010 - 尝试 DLL 时未声明的标识符,少量代码

c++ - 使用 AVX 后 SSE 运行缓慢

linux - 如何在禁用 SMP 支持的情况下运行 "invd"指令?

python - 使用 Python 多处理共享对象数组

python - 多处理:如何在多个进程之间共享一个字典?