gem5 - gem5 中的伪指令是什么?

标签 gem5

所以,我正在了解 gem5 中的一些模拟是如何实现的,更具体地说,我正在查看 PIMSim ( https://github.com/vineodd/PIMSim )。我看到他们为 x86 架构实现了一些伪指令。我已经看到这些伪指令仅在完整系统模式下使用。为此,他们修改了以下文件:

  • include/gem5/m5ops.h
  • util/m5/m5op_x86.S
  • src/arch/x86/isa/decoder/two_byte_opcodes.isa
  • src/sim/pseudo_inst.hh(cc)

我已经了解实现自定义伪指令需要进行哪些更改,但我不明白它们是什么以及如何使用它们。我在这些文件之外没有找到调用此函数的任何地方。有什么帮助吗?提前致谢!

最佳答案

伪操作是从客户内部进行魔法模拟操作的方法,这种类型的技术通常被称为客户仪器

它们可以用作/实现为:

  • 放置在真实 ISA 的未使用编码空间中的魔术指令

    我认为这始终是启用的,除了在 KVM 中,主机 CPU 接管并且如果看到那些未知指令就会崩溃。

  • 访问魔术内存地址。这是从 Python 配置中配置/启用的,System.py 包含:

    m5ops_base = Param.Addr(
        0xffff0000 if buildEnv['TARGET_ISA'] == 'x86' else 0,
        "Base of the 64KiB PA range used for memory-mapped m5ops. Set to 0 "
        "to disable.")
    
  • ARM semihosting :一些自定义半主机操作最近已连接到 m5ops。一些 m5ops 和一些标准化半主机操作可以实现的功能(例如退出模拟器)之间存在一些重叠,这一点毫无意义。

一些最常见的 m5ops 是:

  • m5 exit:退出模拟器
  • m5 检查点:采取检查点
  • m5 dumpstats:转储统计信息
  • m5 resetstats:将统计数据归零并重新开始计数下一个 m5 dumpstats
  • m5 readfile:读取主机fs.py --script选项内容的值,对run different workloads after Linux boot checkpoint非常有用。

m5ops 很有用,因为通常很难确定何时要以其他方式执行上述操作,例如:在 Linux 完成启动时执行某些操作。例如,要从模拟器中原生地执行此操作,您需要提前知道发生的时间。您可以胡乱检查 PC 是否匹配某个地址(例如,对于 Linux panic 检查已经完成),但这有点困难。

还存在in-tree m5 tool您可以交叉编译并将其放置在完整的系统 guest 中,以公开来自可执行 CLI 界面的神奇指令。

但是如果需要,您也可以将它们硬编码到二进制文件中以获得更精确的结果,例如像 X86 中那样进行硬编码

#define LKMC_M5OPS_CHECKPOINT __asm__ __volatile__ (".word 0x040F; .word 0x0043;" : : "D" (0), "S" (0) :)
#define LKMC_M5OPS_DUMPSTATS  __asm__ __volatile__ (".word 0x040F; .word 0x0041;" : : "D" (0), "S" (0) :)

更多硬编码示例位于:https://github.com/cirosantilli/linux-kernel-module-cheat/blob/4f82f79be7b0717c12924f4c9b7c4f46f8f18e2f/lkmc/m5ops.h或者您也可以从主线树中更好、更费力地使用它们,如下所示:How to use m5 in gem5-20

更多信息也可以在以下位置找到:https://cirosantilli.com/linux-kernel-module-cheat/#m5ops

关于gem5 - gem5 中的伪指令是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63488050/

相关文章:

gem5 - 如何在 se 模式下使用 gem5 中的 m5ops,例如 m5_exit 和 m5_dump_stats

linux - 卸载或创建多个 gem5 模拟

scons - 构建gem5时出错: TypeError : File/hdd/Me/gem5/src/systemc/ext/systemc found where directory expected

linux - 将 perf_event 与 gem5 内的 ARM PMU 结合使用

gem5 - 提交的指令和提交的操作之间的区别

python - 是否可以运行 python 文件,编辑它,然后在第二个终端中运行它

gem5 - 如何使用 gem5 fs.py 在模拟中附加多个磁盘镜像?

python - importerror 没有名为缓存的模块

gem5 - 如何计算 gem5 基准测试开始和结束之间的 CPU 时钟周期数?