与用户空间上下文切换相比,内核上下文切换有多贵?

时间:2011-08-07 12:36:07

标签: multithreading kernel

根据C10kthis paper,随着越来越多的客户端连接并创建越来越多的线程,每个连接1个线程的服务器的吞吐量会降低。根据这两个来源,这是因为存在的线程越多,与这些线程完成的实际工作相比,上下文切换花费的时间就越多。在连接数很高的情况下,优化服务器似乎没有因性能降低而受到太大影响。

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

  • 为什么这些用户空间上下文切换比内核线程上下文切换更快?
  • 内核上下文切换究竟做了哪些更昂贵的事情?
  • 内核上下文切换到底有多贵?需要多长时间?
  • 内核上下文切换时间是否取决于线程数?

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

1 个答案:

答案 0 :(得分:5)

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

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

  • 内核上下文切换究竟做了哪些更昂贵的事情?

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

  • 内核上下文切换到底有多贵?需要多长时间?

需要进行测量,因机器而异。我想现在一台典型的桌面/服务器机器每秒可以进行几十万个上下文切换,可能只有几百万。

  • 内核上下文切换时间是否取决于线程数?

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