调度变量可以有效地调整工作项

时间:2012-05-24 18:40:41

标签: queue scheduling

(我也在math.stackexchange.com发布了这个问题,因为我不确定它应该属于哪个。)

我的系统包含以下输入:

  • 要完成的工作项集。这些是可变大小的。它们不必按任何特定顺序完成。
  • 过去完成工作项目需要多长时间的历史数据。但是,过去的表现并不能保证未来的成功!也就是说,一旦我们实际执行一个工作项,我们可能会发现它比以前更长或更短。
  • 可能有我以前从未见过的工作项,因此没有关于的历史数据。
  • 工作项目还具有“并行”或“序列”的“分类”。
  • 能够拾取工作项目并进行处理的“代理”集。代理的数量是固定的并且事先已知。代理一次只能处理一个工作项。
  • 代理执行工作项的“服务器”集。服务器有不同的功能。具体来说,它们能够同时处理不同数量的代理。

规则:

  • 如果服务器正在用于执行“串行”工作项,则不能同时用它来执行任何其他工作项。
  • 如果没有使用服务器来执行任何“串行”工作项,它可以同时处理尽可能多的代理,所有代理都执行“并行”工作项。
  • 必须针对特定服务器执行少量工作项(尽管任何代理都可以执行此操作)。如果这很重要,这些工作项目是“平行的”。 (现在可能更容易忽略这条规则!)

要求:

鉴于上述输入和规则,我需要“尽快”执行一组工作项。由于我们无法知道工作项目在完成之前需要多长时间,我们不可能希望预先得到一个完美的解决方案(我想),所以“尽快”意味着没有明显做一些像使用一个代理一样愚蠢的事情逐个执行每个工作项目!

从历史上看,我有一个非常简单的循环算法,只是通过降低历史持续时间对工作项进行排序,以便更长时间运行最长的工作项,并且希望在周期结束时我能够使所有代理和服务器保持合理地满载短期工作项。这导致利用率图形具有非常好的“方形”形状,在周期结束时没有长尾工作项的长尾。

然而,这个历史算法要求我预先配置代理和服务器的数量,并将工作项预分配到“池”并将池分配给服务器,以及许多其他可怕的东西。我现在需要支持动态数量的代理和服务器,而无需重新配置。 (请注意,服务器的数量将在一个周期内得到修复 - 也就是说,数字只会在周期之间发生变化 - 但代理的数量可能会在周期的中间增加或减少。)

完成所有工作项目后,我们会记录每个工作项目进入下一个周期所需的时间,并从头开始重新开始!

0 个答案:

没有答案