【问题标题】:Is a process faster when running in kernel mode than running in user mode?在内核模式下运行的进程是否比在用户模式下运行更快?
【发布时间】:2023-04-08 11:19:01
【问题描述】:

我已阅读post 并想知道,如果进程/程序在根/内核模式下运行得更快。 目前我认为一定是这样,因为在 cpu 执行期间没有通过那些操作系统环(用户到内核环)。我说的对吗?

【问题讨论】:

    标签: performance


    【解决方案1】:

    这对于环形转换来说是正确的,是的。但是典型程序中的大多数 CPU 时间并没有花在环形转换上。如果一个程序花费 10%,这是很多,它最多可以快 10%。

    当您编写时:while (true) ; 永远不会转换,您不会观察到任何性能差异。

    更一般地说,CPU 环、虚拟内存和虚拟化带来的保护是安全功能,它们确实需要付出性能代价。成本与您使用这些功能的程度成正比。微软的一项研究曾经发现,如果我没记错的话,虚拟内存通常会消耗 10-20% 的性能。

    内核模式内存是虚拟的,就像用户模式内存一样(至少在当前操作系统中)。

    【讨论】:

    • 需要明确的是,内核模式下的内存访问并不比用户模式下快。内核地址是虚拟的。显然,内核的内存管理代码需要跟踪哪些物理页地址正在使用,并实际构建页表。 IDK 如果内核空间可能在 x86 上是非虚拟的(即在进入操作系统时禁用分页,在离开时重新启用),但我知道没有操作系统以这种方式工作。
    • 对于在虚拟内存管理上浪费大量时间的应用程序,使用大页面可以大大加快处理速度,而不会失去虚拟内存保护。
    • 我们现在有涉及推测计算的漏洞,称为“幽灵”漏洞,补丁通过限制可以做的事情来减慢速度。但是,如果您在内核模式下运行,您不会获得推测计算的全部好处吗?
    • @sudo 我当然不是这方面的专家,但我了解以下内容:即使有所有补丁,CPU 仍在推测,但内核会在上下文切换时执行额外的刷新操作。因此,如果(几乎)没有上下文切换,幽灵保护可能没有性能成本。
    • 如果有开关,则如果开关位于该术语的某些定义的同一“保护域”中(例如同一用户),则操作系统不会应用保护。所以同样的进程开关无论如何都不会受到保护。但是在内核模式下运行一切会节省我认为的最大成本。但是不要相信我在这里说的话;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 2020-10-15
    • 2015-10-15
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    相关资源
    最近更新 更多