1

如果我尝试使用多个--num-cpus=8内核,例如 16、32 或 64,终端将保持空白。

在提交 2a9573f5942b5416fb0570cf5cb6cdecba733392 和 Linux 内核 4.16 处使用 gem5 进行了测试。

相关主题:https ://www.mail-archive.com/gem5-users@gem5.org/msg15469.html

4

2 回答 2

2

如果我在 Ciro 的回答中添加更多内容,则由于这行代码,gem5 中的当前 GICv2 模型默认支持单核。如果不启用gem5ExtensionsEnabled,它不会highest_int用接收中断号更新,因此接收到的中断不会被发布到指定的 cpu 以调用处理程序。也就是说,没有跳转到中断处理程序。另外,即使我们打开gem5ExtensionsEnabled,我认为它最多可以支持 4 个核心,因为 和 的默认值INT_BITS_MAX分别itLines是 32 和 128(请参阅); 它检查跨 4 个内核的每个内核的 32 条中断线。例如,假设一个系统具有 16 个内核,并且 cpu 5 执行循环。另外,假设另一个核心(比如核心 11)已经有一个比这更高优先级的中断。然后,循环将忽略来自核心 11 的另一个中断,因为循环索引x最多可以增长到 3。

要打开gem5ExtensionsEnabled,您可以将选项传递--param='system.realview.gic.gem5_extensions=True'给您的命令,如 Ciro 所述。但是,请注意,该参数用于在此处haveGem5Extensions设置变量,而不是设置,仅当固件代码在 GICD_TYPER 偏移处将一些数据(0x200)写入 GIC 分配器寄存器时才启用(请参阅)。 gem5ExtensionsEnabled

于 2018-12-12T22:41:13.540 回答
1

较新的方法:GICv3

由于 GICv3 于 2019 年 2 月在https://gem5-review.googlesource.com/c/public/gem5/+/13436实施,您可以直接使用它。

GICv3 硬件本身支持超过 8 个 CPU,因此它可以正常工作。

截至 2020 年 7 月 gem5 3ca404da175a66e0b958165ad75eb5f54cb5e772,GICv3 是默认的 GIC,VExpress_GEM5_V2但默认的 fs.py 机器VExpress_GEM5_V2位于该提交处,因此您只需选择它:

fs.py --machine-type VExpress_GEM5_V2

一旦我这样做了,它就起作用了,与单个 CPU 相比,原子启动在 16 个内核上花费了大约 6 倍。使用此设置进行测试:https ://github.com/cirosantilli/linux-kernel-module-cheat/tree/d0ada7f58c6624662bbfa3446c7c26422d1c5afb#gem5-arm-full-system-with-more-than-8-cores

旧方法:GICv2 扩展

如前所述:https: //www.mail-archive.com/gem5-dev@gem5.org/msg24593.html gem5 有一个 GICv2 扩展 + 内核补丁,允许这样做:

  • 使用来自: https ://gem5.googlesource.com/arm/linux/+/refs/heads/gem5/v4.15的 ARM linux 内核分支,特别是 GICv2 扩展脚本提交
  • 添加fs.py选项--param 'system.realview.gic.gem5_extensions = True' --generate-dtb

使用此设置进行测试:https ://github.com/cirosantilli/linux-kernel-module-cheat/tree/bab029f60656913b5dea629a220ae593cc16147d#gem5-arm-full-system-with-more-than-8-cores (gem5 4c8efdbef45d98109769cf675ee3411393e8ed06,Linux内核fork v4.15,aarch64)。

于 2018-05-09T07:43:39.570 回答