【问题标题】:On throughput of linux scheduler when there are more threads than cores当线程多于内核时Linux调度程序的吞吐量
【发布时间】:2011-07-15 14:22:22
【问题描述】:

我已经对 linux 调度程序进行了一些测量。 linux 是“Linux 版本 2.6.18-194.el5 (mockbuild@x86-005.build.bos.redhat.com)”,机器配备 8 个 CPU。测量是该机器上的唯一工作负载。

测量是两组。在第一组中,设置了 8 个线程,每个线程的计算成本相同。第二组是将一个线程一分为二,总共有 9 个线程(其中 2 个线程的成本是其他 7 个线程的一半)。

当我运行这两个测量集时,我希望吞吐量是相同的,因为总计算成本是相同的,并且 linux 调度程序应该(虽然我不确定)将这两个较小的线程调度到一个内核中。结果证明吞吐量从 8 个线程显着减少到 9 个线程。任何人都知道可能是什么原因。

编辑:@Waldheinz。这些线程是按顺序设置的(​​比如 0、1 ... 7),并且(无休止的)元组流从线程 0、1 到线程 7。每个元组在每个线程上花费一些时间,进行一些计算。所有 8 个线程的计算成本与第一组测量中的相同。

更新:如果线程数改为16,意味着每个核心有两个线程,吞吐量提高到8线程的情况下......

【问题讨论】:

  • 我确定这取决于这些线程在做什么。您能否提供一些有关您的基准如何工作的详细信息?

标签: linux-kernel scheduling throughput


【解决方案1】:

Linux 2.6.18 现在已经很老了,可以追溯到 2006 年,当时多核系统并不常见或重要。您的基准测试可能会解决内核在 2.6.23 之前使用的 O(1) scheduler 的一些缺陷。我完全忘记了这些问题是什么,但这听起来似乎很合理。 O(1) 部分指的是调度开销基本上是恒定的,但即使是这种情况,调度程序在某些情况下也会做出错误的决定。

如果可以,请尝试更新的内核(2.6.23 之后),看看新的completely fair scheduler 是否有所作为。

【讨论】:

    【解决方案2】:

    九个女人可以在九个月内生九个孩子,每人每人九个月。一个女人可以在九个月内生一个孩​​子,同样是每人每人九个月。但是九个女人仍然需要十八个月才能生十个孩子,更糟糕的是每人每个孩子超过 16 个月!

    您正在为您的线程分配太大的工作块,并且没有足够长的时间运行您的测试来平滑块大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 2012-03-04
      • 2013-10-20
      • 1970-01-01
      相关资源
      最近更新 更多