了解激活和提交筛选器
本主题概述了管理员可以添加到群集的自定义作业筛选器类型,以及 HPC 作业计划程序服务如何根据这些筛选器的返回值处理作业。
作业提交和作业激活筛选器是自定义应用程序,可为群集上的作业提供额外的检查和控制。 例如,提交筛选器可以根据选择的信息检查作业属性,也可以更改作业属性值。 激活筛选器可以在将资源分配给作业之前检查许可证可用性等因素。 根据筛选器中的返回值,HPC 作业计划程序服务对作业执行相应的操作。 若要帮助确定要强制执行的计划策略是否需要自定义筛选器,请参阅 何时在 Windows HPC Server 中使用作业提交或作业激活筛选器。
本主题介绍激活和提交筛选器,以及 HPC 作业计划程序服务如何解释来自筛选器的返回值。 有关安装和配置筛选器的信息,请参阅 在 Microsoft HPC Pack中安装提交和激活筛选器。
在本主题中:
自定义筛选器运行时
当作业提交到群集(提交筛选器)或作业即将获取群集资源(激活筛选器)时,HPC 作业计划程序服务可以运行自定义筛选器。
提交筛选器在提交作业后立即运行,然后根据作业模板检查作业(提交筛选器可以更改作业属性,包括分配的作业模板)。 如果作业通过提交筛选器,则会验证用户凭据,然后应用作业模板默认值和值约束。 有关详细信息,请参阅 了解激活和提交筛选器 [帮助链接?]。
激活筛选器在将候选资源分配给排队或正在运行的作业时运行(作业的候选资源基于作业和任务属性以及计划策略)。 激活筛选器可以确定是否应在这些资源上启动作业,或者是否应为作业保留资源或释放这些资源。 由于每次将资源分配给作业时都会运行激活筛选器,因此激活筛选器可能会针对同一作业运行多次。 例如,激活筛选器可以在作业即将启动时运行,然后再次运行,因为新资源即将添加到作业(动态增长)。
群集范围和特定于作业模板的筛选器
可以在群集范围级别定义自定义筛选器,并将在每个作业上运行。 群集范围的筛选器作为可执行应用程序或脚本实现。 从 HPC Pack 2008 R2 Service Pack 2 开始,还可以在作业模板级别定义自定义筛选器。 这些筛选器仅在与关联的作业模板一起提交的作业上运行。 模板级筛选器允许对特定类型的作业运行特定筛选器,还可以根据需要运行一系列筛选器。
注意
作业模板级筛选器必须定义为 DLL,并实现 IActivationFilter
或 ISubmissionFilter
接口。
可以将群集范围和作业模板级筛选器添加到群集。 提交或准备好激活作业时,任何作业模板筛选器都将在群集范围筛选器之前运行。
作业提交筛选器及其返回值
每次提交作业时,HPC 作业计划程序服务都可以运行作业提交筛选器。 筛选器可以检查作业属性,以确定是否应将作业添加到队列中。
提交筛选器分析作业说明 XML(指定作业条款),以检查要禁止或限制的选项,或者未能包含所需选项。 提交筛选器还可以通过修改作业 XML 文件来更改作业属性值。 无法更改任务属性值。
根据作业提交筛选器的返回值,HPC 作业计划程序服务将按照下表中所述处理作业。
退出代码 | 作业计划程序操作 |
---|---|
0 | 作业将添加到队列 as-is。 |
1 | 筛选器修改了一个或多个作业属性,并将该作业添加到队列中。 |
任何其他退出代码 | 作业标记为 失败,并显示提交筛选器失败作业的错误消息。 |
筛选器超时 | 作业标记为 失败,并显示提交筛选器超时的错误消息。 默认超时为 15 秒。 可以在“作业计划程序配置”对话框中修改该设置。 |
找不到 筛选器 | 作业标记为 失败,并显示一条错误消息,指出找不到筛选器。 |
注意
如果指定了提交筛选器链,作业将按列出的顺序运行每个筛选器,直到它已成功传递所有筛选器。 退出代码为 0 时,作业将传递给下一个筛选器。 退出代码为 1 时,修改后的作业将传递给下一个筛选器。 如果作业在链中的任何时间点都失败,则再次调用已在作业上运行的所有提交筛选器,以便允许筛选器在必要时还原操作。
作业激活筛选器及其返回值
当候选资源即将分配给排队或正在运行的作业时,HPC 作业计划程序服务可以运行激活筛选器。 作业激活筛选器可以检查作业是否存在导致作业在激活时失败的因素,例如许可证不可用或已超过提交用户的使用时间。
激活筛选器分析作业说明 XML(指定作业术语),并可以检查作业属性和其他数据源,以确定作业是否可以使用资源。 将其他参数传递给筛选器,以提供信息,例如当前计划传递期间可用的候选资源数、队列中作业的位置以及是否在群集上启用回填。 请查看这些参数 IActivationFilter
接口 public ActivationFilterResponse FilterActivation(Stream jobXml, int schedulerPass, int jobIndex, bool backfill, int resourceCount)
。 创建筛选器的开发人员可以使用这些参数来帮助微调筛选器行为。
根据激活筛选器中的筛选器返回值,HPC 作业计划程序服务将启动作业、阻止队列,直到作业可以启动、保留作业的资源而不阻止队列,或将作业置于保留状态。 可以使用 保留到 作业属性来设置保存特定作业的时间量。 如果作业处于保留状态,并且没有为该作业指定 保留直到 值,则作业将保留 默认保留持续时间 群集设置指定的秒数。 默认保留持续时间 的有效值为 60-604800(介于 1 分钟到 1 周之间)。 默认值为 900 秒(15 分钟)。
重要
作业运行后,将清除 保留 Until 属性。
注意
激活筛选器和回填:作业只能在回填窗口中运行,激活筛选器返回值为 0。
根据作业激活筛选器中的返回值(退出代码),HPC 作业计划程序服务将按照下表中所述处理作业。
退出代码 | 排队作业 | 运行作业 |
---|---|---|
0 | 启动作业。 作业在候选资源上启动。 |
扩大工作。 候选资源将添加到正在运行的作业。 |
1 | 不要启动作业,阻止队列。 作业未启动,并保留在队列中。 在作业通过或取消之前,不会启动其他作业或优先级相等或较低优先级。 筛选器会定期重新评估作业,直到作业通过或作业取消为止。 |
不要增长工作。 候选资源不会添加到正在运行的作业。 队列不会被阻止,资源可用于其他作业。 |
2 | 不要启动作业、保留资源并继续计划其他作业。 作业未启动,但根据计划模式保留候选资源:在排队中,最多保留作业的最大资源;在“均衡”中,将保留最小资源。 其他作业可以在其他资源上启动。 筛选器会定期重新评估作业,直到作业通过。 |
定义。 筛选器不应为“正在运行”作业返回此退出代码。 |
3 | 保留作业、释放资源并继续计划其他作业。 作业将保留到 保留到 作业属性指定的日期和时间。 保留期过后,作业将由筛选器程序重新计算。 如果筛选器返回退出代码 3,并且没有为该作业指定 保留 值,则作业将保留 默认保留持续时间 群集设置指定的时间量。 |
定义。 筛选器不应为“正在运行”作业返回此退出代码。 |
4 | 失败作业。 作业标记为 失败,并显示激活筛选器失败的错误消息。 |
定义。 筛选器不应为“正在运行”作业返回此退出代码。 |
任何其他退出代码 | 定义。 但将值视为 2。 | 定义。 筛选器不应为“正在运行”作业返回此退出代码。 |
筛选器超时 | 与退出代码 2 相同。 默认超时为 15 秒。 可以在“作业计划程序配置”对话框中修改该设置。 |
定义。 |
找不到 筛选器 | 与退出代码 2 相同。 | 定义。 |
注意
如果指定了激活筛选器链,则只要每个筛选器通过退出代码为 0,作业就会按列出的顺序进行评估。 如果筛选器返回非零退出代码,则会将该值传递给 HPC 作业计划程序,并且再次调用已在作业上运行的任何激活筛选器,以便允许筛选器在必要时还原操作。 例如,检查可用许可证的激活筛选器可能包括在调用还原函数时释放许可证的代码。