我的组织有一个运行Univa Grid Engine 8.4.1的服务器集群,用户提交各种类型的作业,一些使用单个CPU核心,一些使用OpenMPI来利用多个核心,所有这些都具有不同的和不可预测的运行时间。
我们启用了一个票务系统,以便一个用户可以占用整个队列,但如果网格和队列中装满了单CPU作业,则无法启动多CPU作业(它们只是坐在队列的顶部,等待所需数量的cpu插槽变为空闲,这通常不会发生。我们正在寻找配置资源预留,这样,如果MPI作业是队列中的下一个,网格将保持空闲,因为它们已经空闲,直到足以提交MPI作业,而不是填写它们使用队列中较低的单CPU作业。
我已经阅读过(例如here),网格决定哪些广告位是"保留"根据这些插槽中运行的作业剩余时间。我们遇到的问题是我们的工作有不确定的运行时间。有些需要几秒钟,有些需要几周时间,虽然我们大致了解工作需要多长时间,但我们永远无法确定。因此,我们不想通过-l h_rt和-l s_rt开始运行具有硬和软时间限制的qsub,否则我们的工作可能会过早被杀死。资源预留似乎使用default_duration,我们将其设置为无穷大,因为缺少更好的数字,并且平等地处理所有作业。它的采摘位置已经运行了几个月,而且已经运行了几天,而不是只运行了几分钟的长时间工作的插槽。
有没有办法告诉调度程序在多CPU MPI作业可用时保留插槽,而不是根据其中某些感知的作业运行时间预先选择插槽?
答案 0 :(得分:0)
不幸的是,我不知道如何做你所要求的事情 - 我认为保留是在提交作业时创建的,而不是随着广告位空闲而逐步创建。如果您还没有看到资源预留功能的设计文档,it's worth a look将面向该功能。
相反,我将建议一些自信地设置工作运行时的策略。当你的任何作业都没有运行时的主要问题是Grid Engine未来无法无限地保留空间,所以即使你设置了一些非常粗糙的运行时(在真实运行时的一个数量级内),你可能会得到一些积极的结果。
qacct
或解析accounting
文件以获取硬数据。当然,将该百分比调整为适合您的风险阈值。最后,请确保使用-R y
qsub标志提交多插槽作业以启用资源预留系统。这可以放在系统默认的sge_request
文件中,但通常不推荐这样做,因为它会降低调度性能:
由于已知预留调度性能消耗随着待处理作业的数量而增长,因此建议仅对实际排队等待瓶颈资源的作业使用-R y选项。