与用户空间上下文切换相比,内核上下文切换的成本有多高?



根据C10k和本文,随着越来越多的客户端连接和创建越来越多的线程,每连接1线程的服务器的吞吐量会下降。根据这两个来源,这是因为存在的线程越多,与这些线程完成的实际工作相比,花在上下文切换上的时间就越多。在高连接数的情况下,事件服务器似乎不会受到性能下降的影响。

然而,事件服务器也在客户端之间进行上下文切换,它们只是在用户空间中进行。

    为什么这些用户空间上下文切换比内核线程上下文切换快?
  • 内核上下文切换到底做了什么,如此昂贵?
  • 内核上下文切换到底有多昂贵?要花多少时间?
  • 内核上下文切换时间取决于线程的数量吗?

我最感兴趣的是Linux内核如何处理上下文切换,但是关于其他操作系统的信息也很受欢迎。

    为什么这些用户空间上下文切换比内核线程上下文切换快?

因为CPU不需要切换到内核模式再切换回用户模式。

  • 内核上下文切换到底做了什么,如此昂贵?

主要是切换到内核模式。在Linux中,内核模式和用户模式下的页表是相同的,所以至少没有TLB无效的惩罚。

  • 内核上下文切换到底有多昂贵?要花多少时间?

需要测量,并且可以因机器而异。我猜现在一台典型的桌面/服务器机器每秒可以做几十万个上下文切换,可能是几百万个。

  • 内核上下文切换时间取决于线程的数量吗?

取决于内核调度程序如何处理这个。坦率地说,在Linux中它是相当有效的,即使有大量的线程计数,但是更多的线程意味着更多的内存使用意味着更多的缓存压力,因此可能会降低性能。我还期望在处理数千个套接字时涉及一些开销。

相关内容

  • 没有找到相关文章

最新更新