gpt4 book ai didi

linux-kernel - 模式切换涉及哪些开销

转载 作者:行者123 更新时间:2023-12-03 22:29:25 24 4
gpt4 key购买 nike

我多次读/听到这样的论点,即进行大量系统调用等会效率低下,因为应用程序进行了模式切换,即从用户模式转到内核模式,并且在执行系统调用后,通过执行以下操作开始在用户模式下执行模式再次切换。

我的问题是模式切换的开销是多少? cpu缓存是否失效或tlb条目被清除,或者发生什么导致开销?

请注意,我在询问有关模式切换而不是上下文切换的开销。我知道模式切换和上下文切换是两回事,我完全知道与上下文切换相关的开销,但是我不明白是什么是模式切换引起的开销?

如果可能,请提供有关特定* nix平台的信息,例如Linux,FreeBSD,Solaris等。

问候

拉里

最佳答案

简单模式开关上不应有CPU缓存或TLB刷新。

一个快速测试告诉我,在我的Linux笔记本电脑上,用户空间进程完成一个简单的syscall大约需要花费0.11微秒,除了切换到内核模式和返回内核之外,该系统调用不需要做很多工作。我正在使用getuid(),它仅从内存结构中复制单个整数。 strace确认系统调用已重复MAX次。

#include <unistd.h>
#define MAX 100000000
int main() {
int ii;
for (ii=0; ii<MAX; ii++) getuid();
return 0;
}


在我的笔记本电脑上,使用 time ./testover进行测量大约需要11秒钟,而将11秒钟除以1亿将得到0.11微秒。

从技术上讲,这是两个模式开关,所以我想您可以说单个模式开关需要0.055微秒,但是单向开关不是很有用,所以我认为往返次数会更多相关的。

关于linux-kernel - 模式切换涉及哪些开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1860253/

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