我有几个大型 hugin 脚本作业,希望能够及时处理。每个脚本有时会使用机器的所有核心,而其他时候则在一段时间内是单线程的。
我想知道以最快的方式完成我所有的拼接工作。让 Linux 内核来整理是否更好?例如,让所有脚本同时占用 CPU?还是将作业分开更好?- 类似于 sun grid engine / Maui(只有一台服务器)?或者,将我的所有脚本重写为单个脚本?最后一个选项不太便于移植。
答案1
只要您的资源限制是 CPU 时间,您就可以让内核调度程序完成其工作,并且您将获得某种程度上最优的结果。
但是,如果您有其他限制,例如 RAM 使用或磁盘 IO,那么以某种方式分散作业可能实际上是有益的,但您需要自己观察系统以找出实际的限制,从而制定最佳策略。
只要单线程和多线程处理阶段发生在同一进程/作业中,使用经典的作业调度程序很可能不会有太大帮助,甚至根本没有帮助。
答案2
你需要跑多快?
一种方法是不断添加作业,直到资源达到某个限制,例如 CPU 利用率阈值。这样可以使进程调度开销和内存使用量可控。例如,GNU make 具有 --load-average,它会暂停新作业,直到平均负载低于阈值。
了解进程的哪一部分是单线程的很重要。查看可用的源代码。有时,除了获得具有良好单线程性能的 CPU 外,短期内对此无能为力。
一些云式应用程序可以轻松扩展到多个主机,通常是自动的。如果应用程序可以以这种方式构建,那么一台主机可以根据需求爆发到数百台。
在制定性能方法时,有许多工具可用。我推荐一个参考资料:Red Hat Enterprise Linux 性能调优指南。