如何强制一个进程在特定的 CPU 上运行?

如何强制一个进程在特定的 CPU 上运行?

我知道taskset可以用来强制一个进程在特定的cpu上运行。

我怎样才能强制 tomcat 在特定的 CPU 上运行?

然后我想在单独的 CPU 上运行 apache bench。

更新

我很感激你建议不要这样做,但我真的想知道如何去做:)

这篇文章展示了如何:http://mailinator.blogspot.com/2010/02/how-i-sped-up-my-server-by-factor-of-6.html

只是有点困惑你如何知道哪个 CPU,它是基于十六进制的?

答案1

大卫向你展示了火箭筒在哪里,但如果你使用它,你几乎肯定会搬起石头砸自己的脚(见我的评论)。

作为一般规则,你应该接受你并不比任务调度程序更聪明——许多非常聪明的人都在研究它,他们确实很好地确保了它在最短的时间内完成了最大数量的计算。除非你有非常具体和明确的理由来摆弄它(比如“我确切地知道内核中发生了什么,以及为什么,我希望它做相反”,您应该信任调度程序并让它做自己的事情。

答案2

参见taskset命令。请注意,这几乎总会对性能产生重大的负面影响。

答案3

除非您打算执行以下操作之一:

制作您自己的任务调度程序。让 apache 主要使用一个,其他人也会依次使用它。

我建议为它配备一个专用的服务器,这样就不必对内核进行超级深入的更改,也不必为使用任务集绕过所有系统任务的调度程序而头疼。

答案4

根据手册页taskset,CPU 被指定为位掩码。因此 CPU0 是 0x01,CPU1 是 0x02,CPU2 是 0x04,CPU3 是 0x08。如果您希望进程在多个 CPU 上运行,可以将它们加在一起。(例如 0x03 是 CPU0 和 CPU1)

相关内容