0

我已经对 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 个线程的情况...

4

2 回答 2

1

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

如果可以,请尝试更新的内核(2.6.23 之后),看看新的完全公平的调度程序是否有所作为。

于 2011-07-28T07:55:58.263 回答
0

九个妇女可以在九个月内生九个孩子,每人每人九个月。一个女人可以在九个月内生一个孩​​子,同样是每人每人九个月。但是九个女人仍然需要十八个月才能生十个孩子,比每人每个孩子十六个多月的速度还要糟糕得多!

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

于 2017-09-08T21:35:16.560 回答