gha*_*der 14 operating-system mode switch-statement linux-kernel
很多次我读/听到由于应用程序进行模式切换(即从用户模式进入内核模式)并且在执行系统调用之后开始在用户模式下执行,因此进行大量系统调用等会产生效率低下.模式再次切换.
我的问题是模式切换的开销是多少?是否cpu缓存失效或tlb条目被刷新或导致开销的情况?
请注意,我问的是模式切换所涉及的开销而不是上下文切换.我知道模式切换和上下文切换是两个不同的事情,我完全了解与上下文切换相关的开销,但我无法理解的是模式切换引起的开销是多少?
如果可能,请提供有关特定*nix平台的一些信息,如Linux,FreeBSD,Solaris等.
问候
拉利
Eri*_*nen 12
在简单的模式切换上应该没有CPU缓存或TLB刷新.
一个快速测试告诉我,在我的Linux笔记本电脑上,用户空间进程需要大约0.11微秒才能完成一个简单的系统调用,除了切换到内核模式和返回之外,它还可以完成很少的工作.我正在使用getuid(),它只复制内存结构中的一个整数. strace确认系统调用重复MAX次.
#include <unistd.h>
#define MAX 100000000
int main() {
int ii;
for (ii=0; ii<MAX; ii++) getuid();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这在我的笔记本电脑上大约需要11秒,测量使用time ./testover,11秒除以1亿,给你0.11微秒.
从技术上讲,这是两个模式开关,所以我认为你可以声称单模式开关需要0.055微秒,但是单向开关不是很有用,所以我认为这个后面的数字是更多相关的.
| 归档时间: |
|
| 查看次数: |
5294 次 |
| 最近记录: |