【问题标题】:Making simulation deterministic (simulator based on qemu)使模拟具有确定性(基于 qemu 的模拟器)
【发布时间】:2023-03-09 05:09:01
【问题描述】:

我正在使用 Marss 循环精确模拟器,它使用 QEMU。它是一个完整的系统模拟器,提供用户和内核统计信息。 但是,即使我只获取用户统计信息,不同运行之间的统计信息也会有很大差异。我在火星网站上问过这个问题,但没有得到好的答案。 我想知道它是否与qemu有关。或者任何可以使模拟具有确定性的 qemu 选项/变体。 我尝试使用 -icount auto ,但仍然存在一些变化。 对于简单标量 eio 文件,我从未观察到任何变化。 我将不胜感激。

【问题讨论】:

    标签: c++ simulator qemu deterministic


    【解决方案1】:

    我没有使用 MARSS/QEMU,但我熟悉这个问题,熟悉一般的模拟器和 SimpleScalar。

    通常很难使完整的系统模拟器具有确定性。例如。如果您的程序打印一天中的时间,并且一天中的时间发生变化,则将遵循不同的代码路径。更一般地说,如果你正在做一个完整的系统模拟,并且时间 ls,那么操作系统和用户代码的确切交错将根据磁盘磁头的位置、磁盘缓存中有多少数据等而有所不同。更不用说什么系统上正在运行其他进程。

    SimpleScalar eio(和工业模拟器)通过记录外部 I/O 事件的跟踪来提供确定性,以便以与之前运行完全相同的指令数应用于模拟。基本上,您只是在录制时进行完整的系统模拟

    您需要为 MARSS/QEMU 寻找类似的选项。不幸的是,我没有找到这样的。

    缺少这些...

    但是我可以听到你说“我的程序不读取一天中的时间。它不应该每次都以完全相同的方式运行吗?”也许是这样......但是(1)许多Linux图书馆在道德上相当于阅读时间。并且 (2) 还有其他进程在运行用户代码。

    所以你需要控制运行。不要一直启动您的虚拟机(不是硬件虚拟机,我的意思是您在模拟器上运行的操作系统)。停止单用户。编辑 /etc/rc 以停止尽可能多的进程运行。完整的系统模拟与在真机上进行基准测试没有什么不同。在真实机器上,我们甚至可以在每次运行基准测试时重新启动机器。禁用(虚拟)网络。等等。

    如果可以,不要在真正的操作系统上运行,而是在最小的监视器上运行。

    但是,最好找到 I/O 跟踪重放工具。有时这些隐藏在调试器选项下。


    这是 2008 年关于 qemu 中 I/O 重放补丁的参考。

    http://wiki.qemu.org/Features/FaultTolerance - 重放 I/O 以提高可靠性/容错能力。

    QEMU 用户空间模拟可能更具可重复性。我不知道它是否与 MARSS 一起使用


    顺便说一句:再现性问题不仅仅与模拟器有关。它也与可靠性和调试有关。

    您也许可以找到一个通用的 Linux 重放工具,您可以使用它来使您的系统在 QEMU/MARSS 之上的重现性更高。


    在 MARSS 中,您可以使用 ptlcall 检查点工具在您的基准测试(假设您正在运行 SPEC 等)完成大量初始 I/O 之后,以及在下一个 I.O.许多基准测试会执行大量初始 I/O,然后在用户代码中运行一段时间,然后执行一些最终 I/O。通过使用这些检查点,您可以避免随时间变化的系统调用。

    类似的 Simpoints,http://www.marss86.org/~marss86/index.php/Simpoints


    顺便说一句,我刚刚想起另一种程序可能是非确定性的(除了偶然地依赖于时间或多处理器交互):它们可能显式地和内在地依赖于时间。

    例如Livermore Loops 基准测试的 langer98 版本乘以循环花费的时间,如果花费的时间不足,则会增加循环计数。您可以在此处记录外部交互,例如时间和系统调用,并且该程序可能会变得可重现 - 但您不会准确衡量它将在您的更新、更快的计算机上执行的操作。

    反过来:假设你有一个编译器优化开关,形式为“应用这个非常昂贵的优化不超过 2 小时,然后停止......”

    【讨论】:

      【解决方案2】:

      QEMU 内置确定性记录和回放

      QEMU 2.9.0 现在通过保存外部输入具有确定性记录和回放功能,但它暂时被破坏了:How to use QEMU's deterministic record and replay feature for a Linux kernel boot?

      主要文件有:

      【讨论】:

        猜你喜欢
        • 2011-02-05
        • 2012-01-27
        • 1970-01-01
        • 1970-01-01
        • 2015-05-18
        • 2012-09-25
        • 2011-05-25
        • 2014-04-30
        • 2012-09-04
        相关资源
        最近更新 更多