加入收藏 | 设为首页 | 会员中心 | 我要投稿 商洛站长网 (https://www.0914zz.com/)- AI应用、CDN、边缘计算、云计算、物联网!
当前位置: 首页 > 综合聚焦 > Linux > 正文

linux-kernel – 模式切换所涉及的开销是多少?

发布时间:2021-02-20 07:16:06 所属栏目:Linux 来源:互联网
导读:很多时候,我读/听到这样的观点,即由于应用程序进行模式切换,即从用户模式切换到内核模式,并且执行系统调用开始在用户模式下执行,因此使得大量的系统调用等效率将是低效的模式切换. 我的问题是什么是模式切换的开销? cpu缓存是否无效或tlb条目被刷新或导致开

很多时候,我读/听到这样的观点,即由于应用程序进行模式切换,即从用户模式切换到内核模式,并且执行系统调用开始在用户模式下执行,因此使得大量的系统调用等效率将是低效的模式切换.

我的问题是什么是模式切换的开销? cpu缓存是否无效或tlb条目被刷新或导致开销发生什么?

请注意,我在询问模式切换中涉及的开销,而不是上下文切换.我知道模式切换和上下文切换是两个不同的东西,我完全知道与上下文切换相关的开销,但是我不明白是什么开销是由模式切换引起的?

如果可能,请提供有关特定* nix平台(如Linux,FreeBSD,Solaris等)的一些信息.

问候

拉利

解决方法

在简单模式切换器上应该没有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;
}

我的笔记本电脑需要约11秒,用时间/秒,11秒除以1亿,给你0.11微秒.

从技术上讲,这是两个模式开关,所以我想你可以声称单模开关需要0.055微秒,但是单向开关并不是很有用,所以我认为这个数字越多越好相关的.

(编辑:商洛站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读