gpt4 book ai didi

assembly - MWAIT 与 HALT 在效率方面的比较

转载 作者:行者123 更新时间:2023-12-04 02:46:07 27 4
gpt4 key购买 nike

我对 MONITOR-MWAIT 与 HLT 指令产生了疑问。
两者都停止处理器,都在各种外部触发器(中断等)上唤醒。

在我的实验中,考虑到以下因素,HLT 和 MWAIT 的功能几乎相同:

  • 如果您是 不是 操作系统调度程序,一个带有上述指令的简单循环,将很快被中断,并且由于 MWAIT 需要重新检查 MONITOR 和 MWAIT 之间的条件,有什么区别? (我要问的是,为什么不首先使用 HLT,并节省分配跟踪区域的痛苦(如果不仔细配置,将避免 mon/mwait 机制并将其变成 NOP),因为如果你不是操作系统调度程序,您不可能没有足够快地醒来以简单地检查 HLT 循环中的值... ???

  • (当然,MWAIT 可能具有更高的分辨率,我还没有测量过分辨率,但它似乎被(我假设)中断等唤醒了。所以我看不到大的优势。

    谢谢,
    任何以这种方式的想法将不胜感激

    最佳答案

    对于性能;最重要的是,无论何时 CPU 正在等待(HLT 的 IRQ,或 MWAIT 的 IRQ 或内存写入)发生时,它从“等待”状态退出所需的时间。这会影响延迟 - 例如在中断处理程序启动或任务切换实际发生之前需要多长时间。 CPU从等待状态出来的时间对于不同的CPU是不同的,对于同一个CPU上的HLT和MWAIT也可能略有不同。

    这同样适用于功耗——等待时的功耗在不同 CPU 之间可能会有很大差异(尤其是当你开始考虑像超线程这样的事情时); HLT 与 MWAIT 的功耗在同一 CPU 上也可能略有不同。

    就使用而言,它们适用于不同的情况。 HLT 用于等待 IRQ,而 MWAIT 用于等待内存写入发生。当然,如果您正在等待内存写入发生,那么您需要决定 IRQ 是否应该中断您的等待(例如,如果您只想等待内存写入,您可以执行 CLI 然后 MWAIT)。

    然而,对于多任务系统,它们大多只用于相同的事情——在 CPU 空闲的调度程序中。在引入 MONITOR/MWAIT 之前,调度程序会在等待工作时使用 HLT(以稍微降低功耗)。这意味着,如果另一个 CPU 解除一个任务的阻塞,它不能只是将该任务放入调度程序的队列中,并且必须向 HLT 的 CPU 发送一个(相对昂贵的)“处理器间中断”以将其从 HLT 状态中剔除(否则当有它可以/应该做的工作时,CPU 将继续什么都不做)。使用 MWAIT,这种“处理器间中断”(可能)是不必要的——您可以将 MONITOR 设置为监视对调度程序队列的写入,以便将任务放入队列的行为足以导致等待的 CPU 停止等待.

    也有一些研究将 MONITOR/MWAIT 用于诸如自旋锁和同步之类的事情(例如,等待竞争锁被释放)。这项研究的最终结果是 CPU 退出“等待”状态所需的时间太长,并且像这样使用 MONITOR/MWAIT 会导致太多的性能损失(除非存在设计缺陷——例如使用自旋锁)当您应该使用互斥锁时)。

    我想不出使用 HLT 或 MWAIT 的任何其他原因(除了调度程序和锁定/同步之外)。

    关于assembly - MWAIT 与 HALT 在效率方面的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13465422/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com