4

这里有没有人在新的四核处理器中运行多线程应用程序的 linux 线程调度程序方面有经验?如果有这样的人,您可以在这里写下您对内核管理不同线程的性能如何的经验,您是否经历过任何线程饥饿或其中一个内核的饥饿?

谢谢你。

4

4 回答 4

7

鉴于像 Christoph Lameter(以及调度程序上的 Ingo Molnar)这样的内核开发人员已经将内核调整为在 4096 处理器上运行良好,并且考虑到英特尔自己在该问题上投入的优化量,针对性能和节能进行了多核特定调整,我敢打赌,内核比我们任何人在用户空间中编写的任何东西都要优化得多。

线程库也一样;目前只有一个线程库,用于 Linux 2.6 的 NPTL。LinuxThreads 在 2.4 版本中从 glibc 中删除,而 NPTL 是在 2.6 版本之前产生的。而且它真的很快。

只要确保避免使用旧内核,您的发行版或 kernel.org 的最新版本是最好的。在生产中部署之前,请确保衡量性能差异,并考虑是否值得额外的支持成本(如果有)。

于 2009-01-12T10:06:56.227 回答
5

Linux 本身很好地支持使用许多处理器。如果我没记错 SMP,Linux 支持 4096 处理器。真正会产生影响的是您的应用程序是否是为利用多个处理器而编写的。

于 2009-01-07T01:10:50.297 回答
1

它在我们正在生产的双四核系统 (V8) 上运行良好……快得要命。

但是当锁(互斥体)受到激烈竞争时,要非常警惕 Linux 的线程饥饿倾向。想象一个场景,当 10 个线程使用一个锁时,需要非常频繁地使用锁,但时间很短,并且在任何给定点在锁之外完成的工作少于时间片。Linux 将非常倾向于几乎总是将锁传递给一个线程,而排除所有其他线程。

这也取决于绑定到内核中的特定线程包 - 我相信有几个。

于 2009-01-07T02:41:07.027 回答
1

我在我们的 Intel Q6600 上获得了绝对惊人的结果,无论是并行构建还是其他一些并行应用程序,但我一直小心避免过多的并行性:我通常在四到八个线程之间分叉,所以没有太多的争论。如果你分叉了足够多的线程,你将有明显的开销,尤其是当它们竞争相同的信号量时。我的猜测是,几千个线程可能太多了,几十个线程可能还可以。但这只是一个猜测;如果你想知道,你必须找到测量过的人,或者你必须自己做一个实验。

但是对于十几个线程,我们的结果非常好。

于 2009-01-07T02:48:09.227 回答