用法字串

此字串定義工作的預期資源使用情形。 它用來指定工作的資源保留,或用來將上的工作對映至主機,並在執行互動式工作時調整負載。

依預設,不會保留任何資源。

當 rusage 區段包含不可耗用的資源時, LSF 會拒絕資源需求字串。

多階段資源

rusage 字串內的多個階段容許不同的時段具有不同的記憶體需求 (負載指標 mem)。 除了最後一個階段之外,必須指定所有階段的持續時間,而衰減速率都是選用的,如果省略,則會假設為 0。 如果選用的最終持續時間保留空白,則會套用最終資源需求,直到工作完成為止。

多階段資源保留不能包括增加資源,但可以指定在多個時段內固定或減少資源保留。

資源保留限制

可以使用 lsb.queues中的 RESRSV_LIMIT 參數來設定資源需求保留限制。 佇列層次 RES_REQ rusage 值 (在 lsb.queues中設定) 必須在 RESRSV_LIMIT設定的範圍內,否則會忽略佇列層次 RES_REQ 。 工作及應用程式層次中合併的 RES_REQ rusage 值必須在 RESRSV_LIMIT範圍內,否則會拒絕工作。

當在 lsb.queues 中同時為可耗用資源設定 RES_REQRESRSV_LIMIT 時,佇列層次 RES_REQ 不再充當工作及應用程式層次中合併 RES_REQ rusage 值的硬性限制。 在此情況下,只能滿足 RESRSV_LIMIT 所設定的限制,且佇列層次 RES_REQ 會作為預設值。

批次工作

資源用量 (rusage) 區段可以在工作層次使用佇列配置參數 RES_REQ 或應用程式設定檔參數 RES_REQ 來指定。

基本語法

rusage[usage_string [, usage_string][|| usage_string] ...]

其中 usage_string 是:

load_index=value [:load_index=value]... [:duration=minutes[m]
 | :duration=hoursh | :duration=secondss [:decay=0 | :decay=1]]
附註: 持續時間的預設單位是「分鐘」。 若要使用小時或秒作為單位,請將 "h" 或 "s" 附加至持續時間值。 例如, duration=30 表示 30 分鐘,如同明確 duration=30m 一樣。 因此, duration=30h 表示 30 小時,而 duration=30s 表示 30 秒。

rusage 區段中的關鍵字 threshold 可讓您指定臨界值,在達到該臨界值時,所耗用的資源必須先達到該臨界值,才能進行配置。 如果未滿足叢集中每一部主機的臨界值,則工作會變成擱置中。

若要在指令行中指定臨界值,請使用 bsub -R 將臨界值附加至 rusage 區段中的資源。 例如:

bsub -R "rusage[bwidth=1:threshold=5]" sleep 100

您可以使用 bmod -R 來變更 rusage 區段的內容。 例如:

bmod -R "rusage[bwidth=1:threshold=7]" <job ID>

若要在配置檔中指定臨界值,請使用 RES_REQ ,將臨界值附加至 lsb.queues中的資源。 例如:

RES_REQ = rusage[bwidth=1:threshold=5]

您可以使用 RES_REQ ,將臨界值附加至 lsb.applications中的資源。 例如:

RES_REQ = rusage[bwidth=1:threshold=5]

多相記憶體語法

rusage[multi_usage_string [, usage_string]...]

其中 multi_usage_string 是:

mem=(v1 [v2vn]):[duration=(t1 [t2tm])][:decay=(d1 [d2... dk])]

form = n|n-1. 適用於單一階段 (n=1) ,不需要持續時間。

如果k >m,dm+1dkwill be ignored; ifk <m,dk+1=.. =dm= 0.

對於 mem以外的任何 load_indexusage_string 與基本語法相同。

多相位語法可以與單一相位記憶體資源需求搭配使用,也可以用於多個相位。

對於多階段時段型資源保留,請與 lsb.params中的 RESOURCE_RESERVE_PER_TASK=Y 搭配使用。

多階段資源保留無法在一段時間後增加。 從一個階段到下一個階段具有不斷增加的資源保留的工作提交將被拒絕。 例如:

bsub -R"rusage[mem=(200 300):duration=(2 3)]" myjob

指定從 200 MB 到 300 MB 的遞增記憶體保留。 將拒絕此工作。

提示: 當使用多階段 mem 資源需求時,可以針對單相資源個別指定 duration

載入索引

在資源使用字串中考量內部及外部負載指標。 資源值代表資源的起始保留數量。

持續時間

持續時間是應保留指定資源的時段。 請指定等於或大於 ELIM 更新間隔的持續時間。

  • 如果值後接字母 smh,則指定的時間分別以秒、分鐘或小時為測量單位。
  • 依預設,持續時間以分鐘為單位指定。

    例如,下列指定多階段語法的持續時間為 1 小時:

    • duration=(60)
    • duration=(1h)
    • duration=(3600s)

    例如,下列指定單一階段語法的持續時間為 1 小時:

    • duration=60
    • duration=1h
    • duration=3600s
      提示: 靜態共用資源不支援持續時間。 如果在 lsb.resources 「限制」區段中定義共用資源,則不會套用持續時間。

衰變

衰減值指出保留數量在持續時間內應該如何減少。

  • 值 1 表示系統應線性減少在持續時間內保留的數量。
  • 值 0 會導致在整個期間保留總量。

不支援 0 或 1 以外的值,並採用預設值 0。 如果未指定持續時間,則會忽略衰減值。

提示: 靜態共用資源不支援 Decay。 如果共用資源定義在 lsb.resources 「限制」區段中,則不會套用衰減。

預設值

如果未指定資源或其值,則預設值是不保留該資源。 如果未指定持續時間,則預設值是保留工作生命期限的總金額。 (預設衰減值為 0。)

範例

rusage[mem=50:duration=100:decay=1]

此範例指出應為工作保留 50 MB 記憶體。 當工作執行時,保留數量將每分鐘減少大約 0.5 MB ,直到 100 分鐘結束為止。

資源預約方法

透過在數值之後使用 /job/host/task 關鍵字,在資源使用字串中指定資源保留方法。 資源字串中指定的資源保留方法會置換 lsb.resources 檔案的 ReservationUsage 區段中指定的廣域設定。 您只能指定可耗用資源的資源保留方法。 指定資源保留方法,如下所示:

  • value/task

    指定所指定資源的個別作業保留。 這相當於在 lsb.resources 檔案的 ReservationUsage 區段中為 METHOD 參數指定 PER_TASK

  • value/job

    指定所指定資源的個別工作保留。 這相當於在 lsb.resources 檔案的 ReservationUsage 區段中為 METHOD 參數指定 PER_JOB

  • value/host

    指定所指定資源的個別主機保留。 這相當於在 lsb.resources 檔案的 ReservationUsage 區段中為 METHOD 參數指定 PER_HOST

  • 基本語法:
    resource_name=value/method:duration=value:decay=value

    例如,

    rusage[mem=10/host:duration=10:decay=0]
  • 多相位記憶體語法:
    resource_name=(value ...)/method:duration=(value ...):decay=value

    例如,

    rusage[mem=(50 20)/task:duration=(10 5):decay=0]

如何解析簡式佇列層次及工作層次 rusage 區段

工作層次 rusage 會置換佇列層次規格:

  • 對於內部負載指標 (r15sr1mr15mutpgiolsittmpswpmem) ,工作層次值不能大於佇列層次值 (除非使用限制參數 RESRSV_LIMIT 作為上限而非佇列層次值)。
  • 對於外部負載指標,工作層次 rusage 可能大於佇列層次需求。
  • 針對持續時間,內部及外部負載指標的工作層次值不能大於佇列層次值。
  • 若為多階段簡式 rusage 區段:
    • 若為內部負載指標 (r15sr1mr15mutpgiolsittmpswpmem) , 工作層次值的第一階段不能大於佇列層次值的第一階段 (除非使用限制參數 RESRSV_LIMIT 作為上限而非佇列層次值)。
    • 對於持續時間及減少,如果工作層次或佇列層次是多階段,則工作層次值優先。

如何合併簡式佇列層次及工作層次 rusage 區段

同時定義工作層次及佇列層次 rusage 區段時,為工作定義的 rusage 區段會置換佇列中定義的 rusage 區段。 這兩個 rusage 定義會合併,工作層次 rusage 優先。 例如:

範例 1

給定佇列中的 RES_REQ 定義:

RES_REQ = rusage[mem=200:lic=1] ...

及工作提交:

bsub -R "rusage[mem=100]" ...

產生的工作需求是

rusage[mem=100:lic=1]

其中mem=100由工作置換指定mem=200由佇列指定。 不過lic=1因為工作未指定它,所以會保留來自佇列的。

範例 2

針對下列佇列層次 RES_REQ (定義的衰減及持續時間):

RES_REQ = rusage[mem=200:duration=20:decay=1] ...

及工作提交 (無衰退或持續時間):

bsub -R "rusage[mem=100]" ...

工作產生的需求如下:

rusage[mem=100:duration=20:decay=1]

佇列層次持續時間及減少與工作層次規格合併,以及mem=100用於工作置換mem=200由佇列指定。 不過duration=20decay=1因為工作未指定它們,所以會保留來自佇列的。

應用程式設定檔中的 rusage

如需如何使用佇列層次及工作層次資源需求來解析應用程式設定檔中資源需求的相關資訊,請參閱 資源需求

如何將簡式佇列層次 rusage 區段與複合 rusage 區段合併

當定義簡式佇列層次及複合應用程式層次或工作層次 rusage 區段時,會合併兩個 rusage 定義。 如果已定義工作層次資源需求 (簡式或複合) ,則會忽略應用程式層次,並合併工作層次及佇列層次區段。 如果未定義工作層次資源需求,則應用程式層次與佇列層次會合併。

當複合資源需求與佇列層次的簡式資源需求合併時,行為取決於佇列層次需求是否為工作型。

範例 1

工作型簡式佇列層次需求適用於合併複合需求的第一個術語。 例如:

給定參照工作型資源之佇列的 RES_REQ 定義:

RES_REQ = rusage[lic=1] ...

及工作提交資源需求:

bsub -R "2*{rusage[mem=100] ...} + 4*{[mem=200:duration=20:decay=1] ...}"

產生的工作需求是

bsub -R "2*{rusage[mem=100:lic=1] ...} + 4*{rusage[mem=200:duration=20:decay=1] ...}"

工作型資源lic=1from 佇列只會新增至第一個術語,因為它是以工作為基礎,且未包含工作層次需求。

範例 2

主機型或插槽型簡式佇列層次需求適用於合併複合需求的所有術語。 例如:

對於不包括工作型資源的下列佇列層次 RES_REQ:

RES_REQ = rusage[mem=200:duration=20:decay=1] ...

及工作提交:

bsub -R "2*{rusage[mem=100] ...} + 4*{rusage[lic=1] ...}"

工作產生的需求如下:

2*{rusage[mem=100:duration=20:decay=1] ...} + 4*{rusage[lic=1:mem=200:duration=20:decay=1] ...}

位置duration=20decay=1因為工作未在任何術語中指定它們,所以會保留來自佇列的。 在第一個術語中mem=100從工作中保留; 在第二個任期中mem=200因為工作資源需求未指定它,所以會使用來自佇列的。

指定多個 -R 選項

bsub 接受 rusage 區段的多個 -R 選項。

限制: 複合資源需求不支援多個 -R 選項。 多階段 rusage 字串不支援多個 -R 選項。

You can specify multiple resource requirement strings instead of using the && operator. 例如:

bsub -R "rusage[mem=100]" -R "rusage[tmp=50:duration=60]"

LSF 會將多個 -R 選項合併成一個字串,並在符合所有資源需求時分派工作。 透過容許多個資源需求字串並自動將它們合併成一個字串, LSF 可簡化多層封套 Script 的使用。

-R 選項區段數目無限制。

支援在一個 rusage 字串內以逗點區隔多個資源需求。 例如:

bsub -R "rusage[mem=20]" -R "rusage[mem=10||mem=10]" myjob

給定的載入索引在資源使用字串中不能出現多次。

指定替代用法字串

如果您使用應用程式的多個版本,則可以指定您偏好與舊式版本一起使用的版本 (如果偏好版本無法使用)。 使用OR(||) 表示式來區隔定義替代資源的不同使用字串。

使用的工作層次資源需求規格||運算子與在應用程式及佇列層次定義的其他 rusage 需求合併。

附註: 無法提交具有複合資源需求的替代 rusage 字串。

LSF 如何合併包含 | | 運算子的 rusage 字串

下列範例顯示 LSF 如何合併包含 | | 運算子的工作層次與佇列層次 rusage 字串。

佇列層次 RES_REQ = rusage ...

工作層次 bsub -R " rusage ...

產生的 rusage 字串

[mem=200:duration=180]

[w1=1 || w2=1 || w3=1]"

[w1=1, mem=200:duration=180 || w2=1, mem=200:duration=180 || w3=1, mem=200:duration=180]

[w1=1 || w2=1 || w3=1]

[mem=200:duration=180]"

[mem=200:duration=180, w1=1 || mem=200:duration=180, w2=1 || mem=200:duration=180, w3=1]


附註:

無法以複合資源需求來提交替代 rusage 字串。

非批次環境

資源保留僅適用於批次工作。 如果您僅使用 LSF Base 執行工作 (例如透過 lsrun) ,則 LIM 會使用資源使用情形來判定工作的放置。 資源使用要求用來暫時增加負載,使主機不會超載。 當 LIM 提出放置建議時,資源使用字串中不會考量外部負載指標。 在此情況下,資源使用字串的語法為

res[=value]:res[=value]: ... :res[=value]

res 是 lsload 指令所傳回值的其中一個資源。

rusage[r1m=0.5:mem=20:swp=40]

前述範例指出作業預期會將 1 分鐘執行佇列長度增加 0.5,耗用 20 MB 記憶體及 40 MB 交換空間。

如果未指定任何值,則會假設作業在使用該資源時密集使用。 在此情況下,不論主機有多少 CPU ,都不會將多個作業指派給主機。

作業的預設資源使用情形為r15s=1.0:r1m=1.0:r15m=1.0。這指出耗用少量其他資源的 CPU 密集作業。

可調整大小的工作

與資源需求字串的其他元件僅與將其他空位新增至執行中工作相關不同, rusage 資源需求字串也會在從工作中移除空位時影響資源使用情形。

在執行中工作中新增或移除插槽時:
  • 在工作配置中新增或移除的 時段型 資源數量與時段數的變更成正比
  • 工作型 資源數量不受插槽數目變更影響
  • 每一個 主機型 資源的數量與主機數目的變更成正比

使用多階段資源保留時,工作配置基於資源保留的階段。

附註: 可殘差工作不能有複合資源需求。

使用情形的持續時間及減少

資源使用及 | | 運算子的持續時間及衰減會影響資源配置。

在為其他時段排定工作時,會忽略 rusage 表示式中資源的持續時間或衰減。

如果工作具有下列 rusage 字串:rusage[mem=100:duration=300],只有在主機上有 100 個可用的記憶體單元時,才會在該主機上排程一個額外插槽的調整大小要求。 在此情況下, mem 是基於時段的資源 (在 lsb.params中為 RESOURCE_RESERVE_PER_TASK=Y)。

一旦完成調整大小作業,如果工作執行不到 300 秒,則只會保留額外的記憶體,直到工作執行 300 秒為止。 當調整工作大小時,如果工作已執行超過 300 秒,則不會保留額外的記憶體。 這種行為與衰變類似。

| | 運算子可讓您指定多個替代 rusage 字串,其中一個在分派工作時使用。 分派工作之後,您無法使用 bmod 將 rusage 變更為具有操作員 | | 的新 rusage

對於工作調整大小,當使用 | | 運算子時,調整大小要求會使用最初用來分派工作的 rusage 表示式。 如果自工作啟動以來已修改 rusage 表示式,則會使用新的單一 rusage 表示式來排定調整大小要求。

範例 1

您想要執行可自動調整大小的工作,以便工作佔用的每個插槽保留 100 MB 交換空間。 在此情況下, swp 是插槽型資源 ( lsb.params中的 RESOURCE_RESERVE_PER_TASK=Y)。 配置給工作的每一個額外插槽都應該保留額外的交換空間。 下列工作提交指定此資源要求:
bsub -ar -app <appplicaion_file> -n "1,100" -R "rusage[swp=100]" myjob 
同樣地,如果您想要從執行中工作釋放部分插槽,則會適當地減少工作所保留的資源。 例如,針對下列工作提交:
bsub -ar -app <appplicaion_file> -n 100 -R "rusage[swp=50]" myjob 
Job <123> is submitted to default queue.
您可以執行 bresize release ,從一部主機上的工作釋放所有插槽:
bresize release "hostA" 123

工作使用的交換空間會減少上使用的介面槽數目hostA乘以 50 MB。

範例 2

您可以在應用程式的兩個版本之間進行選擇,每個版本在主機上具有不同的記憶體及交換空間需求。 如果您使用運算子提交可自動調整大小的工作, | | 則在使用應用程式的一個版本啟動工作之後,在調整大小作業期間新增至工作的插槽會根據最初執行的應用程式版本來保留資源。 例如,針對下列工作提交:
bsub -n "1,100" -ar -R "rusage[mem=20:app_lic_v201=1 || mem=20:swp=50:app_lic_v15=1]" myjob 

如果工作開始於app_lic_v15,在調整大小作業中新增的每一個額外插槽會保留 20 MB 記憶體及 50 MB 交換空間。