所以这是我的问题:
我有几种不同的配置服务器。我有不同的计算(工作);我可以预测大约每项工作需要花多长时间才能完成。另外,我有优先事项。我的问题是如何保持所有机器加载99-100%并以最佳方式安排作业。
每台机器一次可以进行多次计算。工作被推到了机器上。中央机器知道每台机器的当前负载。另外,我想在这里分配一些机器学习,因为我会知道每个工作的统计数据(启动,完成,CPU负载等)。
如何以最佳方式分配工作(计算),并牢记优先事项?
任何建议,想法或算法?
仅供参考:我的平台.NET。
答案 0 :(得分:2)
答案 1 :(得分:1)
作为替代方法,您可以使用每台机器的峰值性能比估算来安排作业。只有在考虑负载平衡系统的CPU运行时性能时,这才会非常有效。这种方法忽略了有关I / O,簇大小,网络性能,存储器模型类型等问题。看看http://dx.doi.org/10.1145/1513895.1513901
更准确(近负载均衡作业分配)方法的提议将是算法 - 依赖于计算机体系结构的方法。在这种情况下,可以将更高优先级的作业调度到满足其需求的最佳服务器 - 但是您需要首先确定作业到服务器的最佳映射。您还可以在多处理器(非单处理器)上应用OS调度算法的一些方法。希望你会发现这有用。
答案 2 :(得分:0)
看起来这与.NET几乎没什么关系。
但是将您的机器视为“工作线程”,在可用CPU(或其他重要资源)上订购可用机器的“池”,然后使用您对每项任务的了解将每项工作推送到最适合的机器。
如果您事先了解所有工作,则可以使用“最适合”算法在正确的计算机上按正确顺序安排它们。您还可以查看“切割库存”算法; http://en.wikipedia.org/wiki/Cutting_stock_problem ......
答案 3 :(得分:0)
Microsoft最近在其quincy调度程序上发布了paper。如果您只是优化CPU利用率,那么一个非常简单的求解器可以找到全局最优。如果需要在更多轴上进行优化,那么问题空间显然会更复杂。
您的群集有多大?你如何处理优化失败案例?他们重要吗? IO有吗?数据是否具有磁盘关联性?是否有不止一个地方可以办一份工作?所有要考虑的事情。