先佔排程行為

先佔排程主要根據在佇列層次指定的參數: 部分佇列適用於先占,而其他佇列則不適用於先占。 一旦建立佇列階層,其他因素 (例如佇列優先順序及偏好的先占順序) 會決定應該先占佇列中的哪些工作。

有三種方法可以建立哪些佇列應該先被清空:

  • 根據佇列優先順序- PREEMPTION 參數會將佇列定義為先佔或先佔,且先占是根據佇列優先順序,其中較高優先順序佇列中的工作可以先占較低優先順序佇列中的工作

  • 根據偏好的順序- PREEMPTION 參數以偏好的順序定義可以先占其他佇列的佇列

  • 明確地,依特定佇列- PREEMPTION 參數定義可以先占的佇列,以及哪些佇列


先占配置 行為 (behavior)
未啟用先占-未將任何佇列定義為先占,且未將任何佇列定義為先占 高優先順序工作不會先占已在執行中的工作
佇列定義為先佔,但未列出可先佔的特定佇列 此佇列中的工作可以由優先順序值較高的任何佇列中的工作先占
佇列定義為可先占,且指定一個以上可先占的佇列 此佇列中的工作只能由指定佇列中的工作先占
佇列定義為先佔,但未列出可先佔的特定佇列
  • 此佇列中的工作先占工作所有具有較低優先順序值的佇列
  • 從最少載入的主機先占工作
佇列定義為先佔,並列出一個以上可以先佔的特定佇列,但未指定任何佇列喜好設定
  • 此佇列中的工作先占指定清單中任何佇列的工作
  • 先在最少載入的主機上先先清空工作
佇列定義為先佔,且一個以上佇列已指定喜好設定號碼,指出偏好的先佔順序
  • 具有喜好設定號碼的佇列優先於沒有喜好設定號碼的佇列
  • 具有較高喜好設定號碼的佇列優先於具有較低喜好設定號碼的佇列
  • 對於具有相同喜好設定號碼的佇列,優先順序最低的佇列優先於優先順序較高的佇列
  • 對於沒有喜好設定號碼的佇列,優先順序較低的佇列優先於優先順序較高的佇列
佇列定義為先佔,或佇列定義為先佔,並配置具有最短執行時間的工作先佔
  • 根據上述其他參數來決定要先占工作的佇列
  • 已執行最短時間的工作已先被清空
佇列定義為先佔,或佇列定義為先佔,並防止先占在特定時段內完成的工作
  • 根據上述其他參數來決定要先占工作的佇列
  • 預先清空具有指定執行限制或執行時間且在指定時段內不會完成的工作
佇列定義為先佔式,或佇列定義為先佔式,並防止預先佔用具有指定執行時間的工作
  • 根據上述其他參數來決定要先占工作的佇列
  • 已執行少於指定時段的工作已先被清空

個案研討: 三個具有不同優先順序的佇列

請考量三個佇列定義如下的情況:
  • 佇列 A 具有最高相對優先順序,值為 99
  • 佇列 B 既是先佔也是先佔,且相對優先順序為 10
  • 佇列 C 具有最低相對優先順序,預設值為 1
佇列可以先佔,如下所示:
  • A 可以先佔 B ,因為 B 可先佔且 B 的優先順序低於 A
  • B 可以先占 C ,因為 B 是先佔的,且 C 的優先順序低於 B
  • A 無法先占 C,即使 A 的優先順序高於 C,因為 A 不是先佔,也不是 C 先佔

使用中工作槽的計算

使用中的工作槽數決定是否可以啟動先佔工作。 可以配置計算使用中工作時段數目的方法,以確保可以啟動先佔工作。 當工作被先占時,它會暫停。 根據 lsb.resources 檔案中強制的限制,如果已暫停的工作仍計入系統中容許的工作總數,則暫停工作可能不足以讓先佔工作執行。

PREEMPT_FOR 參數用來變更工作插槽使用情形的計算,並在計算中忽略已暫停的工作。 這可確保如果符合限制,則先佔工作可以實際執行。


先占配置 對計算使用的工作時段的影響
未啟用先占
  • 工作介面槽限制是根據執行中及已暫停工作所採用的工作介面槽數目來施行。
  • 對執行中及已暫停的工作施行在佇列層次指定的工作介面槽限制。
已啟用先占
  • 主電腦及個別使用者層次的工作總數不受已暫停工作數目限制-僅考量執行中工作。
  • 執行中工作數目永不超出工作插槽限制。 如果啟動先佔工作違反工作時段限制,則會暫停低優先順序工作以執行先佔工作。 不過,如果仍違反工作時段限制 (亦即,在計算使用中的工作時段時,暫停的工作仍會計數) ,則先佔工作仍無法啟動。
  • 對於執行中及已暫停的工作,一律會施行在佇列層次指定的工作插槽限制。
  • 啟用先佔排程時,已暫停的工作絕不會針對個別使用者的工作時段總數限制進行計數。
已啟用先占,且 PREEMPT_FOR=GROUP_JLP 計算使用者群組使用中的每個處理器工作插槽,並比較結果與使用者層次指定的限制時,只會計算執行中工作。
已啟用先占,且 PREEMPT_FOR=GROUP_MAX 計算此使用者群組使用中的工作槽,並比較結果與使用者層次指定的限制時,只會計算執行中工作。
已啟用先占,且 PREEMPT_FOR=HOST_JLU 計算使用者群組使用中的工作插槽總數,並比較結果與主機層次指定的限制時,只會計算執行中工作。 已暫停的工作不會計入個別使用者的限制。
已啟用先占,且 PREEMPT_FOR=USER_JLP 計算個別使用者使用中的每個處理器工作插槽,並將結果與使用者層次指定的限制相比較時,只會計算執行中工作。

預先佔用回填工作

當高優先順序佇列配置為執行具有資源或時段保留的工作且已啟用回填排程 ( lsb.params中的PREEMPT_JOBTYPE=BACKFILL ) 時,回填工作可以使用保留的工作時段。 配置具有工作的低優先順序佇列以先占回填工作可能會延遲在具有資源或插槽保留的高優先順序佇列中啟動工作。 LSF 容許此配置,但提供警告訊息。

下列範例顯示各種佇列配置和優先順序所產生的行為。
佇列名稱 配置 優先順序 結果
queueR 具有資源或插槽保留 80 這些佇列中的工作保留資源。 如果已啟用回填排程,則具有已定義執行限制的回填工作可以使用資源。
queueB 作為可先占的回填佇列 50 queueB 中具有已定義執行限制的工作使用 queueR中工作所保留的工作插槽。
queueP 作為先佔佇列 75 此佇列中的工作不一定有執行限制,而且可能會從具有保留的工作中取得資源。

為了保證可岔斷回填工作的執行時間下限, LSF 會在先占時暫停它們。 若要變更此行為,以便 LSF 在預先佔用時終止可岔斷的回填工作,您必須在 lsb.queues中定義參數 TERMINATE_WHEN=PREEMPT