• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      作業(yè)調(diào)度軟件LoadLeveler在氣象模式中的應(yīng)用

      2021-04-20 03:25:24張明楊效鄒麗唐艷娟張燕
      氣象科技 2021年1期
      關(guān)鍵詞:隊(duì)列高性能管理員

      張明 楊效 鄒麗 唐艷娟 張燕

      (甘肅省氣象信息與技術(shù)裝備保障中心,蘭州 730020)

      引言

      氣象業(yè)務(wù)需要處理大量的數(shù)據(jù),對計(jì)算機(jī)的計(jì)算能力等方面有著較高要求[1]。西北區(qū)域氣象中心高性能計(jì)算集群中計(jì)算節(jié)點(diǎn)CPU總核數(shù)832個(gè),峰值處理能力為25 TFlops,存儲(chǔ)空間72 TB。為了實(shí)現(xiàn)作業(yè)提交、調(diào)度和資源管理,西北區(qū)域氣象中心高性能計(jì)算集群使用作業(yè)調(diào)度軟件LoadLeveler來管理集群作業(yè)。LoadLeveler可以根據(jù)業(yè)務(wù)模式優(yōu)先級(jí)、資源需求和資源的可用性對作業(yè)進(jìn)行調(diào)度,并處理作業(yè)相關(guān)的管理、執(zhí)行和記賬,它為集群資源的最優(yōu)化利用提供了動(dòng)態(tài)調(diào)度和工作負(fù)載均衡的功能[2]。陳曉霞等指出LoadLeveler允許系統(tǒng)管理員對批處理環(huán)境進(jìn)行完全控制并與操作系統(tǒng)緊密耦合集成以實(shí)現(xiàn)資源管理、搶占式調(diào)度、和記賬等功能[3]。馬驍?shù)忍岢鎏岣哒麄€(gè)系統(tǒng)的資源利用率是高性能計(jì)算集群管理的核心,通過合理的使用調(diào)度算法協(xié)調(diào)各節(jié)點(diǎn)間的資源分配,提高系統(tǒng)的使用率和吞吐率[4]。

      系統(tǒng)運(yùn)行至今,較未采用調(diào)度軟件LoadLeveler來管理集群作業(yè)前的月平均作業(yè)數(shù)、CPU利用率等指標(biāo)有了大幅提升:月平均作業(yè)數(shù)2萬余個(gè),系統(tǒng)月 CPU 平均利用率達(dá)到40%左右,業(yè)務(wù)模式運(yùn)行正點(diǎn)率滿足國家局考核要求。隨著模式預(yù)報(bào)精度的提高,模式規(guī)模也越來越大,所需資源迅速增加,如何利用LoadLeveler加強(qiáng)氣象部門高性能計(jì)算資源管理,充分發(fā)揮氣象部門高性能計(jì)算集群資源效益成為系統(tǒng)管理員要解決的重要問題。

      1 技術(shù)思路

      LoadLeveler集群由配置文件來定義,采用關(guān)鍵字格式。在配置文件LoadL_config中可以指定使用的admin文件的位置、定義cluster范圍的配置參數(shù)、指定管理員、指定安裝目錄以及相關(guān)文件的存放位置、配置記賬相關(guān)參數(shù)、包含調(diào)度器的調(diào)節(jié)參數(shù)等。在配置文件LoadL_admin中可以定義Machine的角色及相關(guān)配置參數(shù)、定義用戶、組、隊(duì)列、集群等。

      系統(tǒng)管理員結(jié)合區(qū)域氣象中心高性能計(jì)算資源總量和資源需求配置LoadLeveler文件關(guān)鍵字定義隊(duì)列、設(shè)置調(diào)度算法和調(diào)度器調(diào)節(jié)參數(shù)等。除此以外,管理員通過編輯JCF(作業(yè)定義文件)指定作業(yè)運(yùn)行參數(shù)、定義資源需求,利用命令行、腳本及API接口管理集群資源及運(yùn)行的作業(yè),將作業(yè)的處理需求與可用資源進(jìn)行匹配。

      2 LoadLeveler的作業(yè)管理

      2.1 隊(duì)列設(shè)置

      氣象模式可以為不同區(qū)域尺度的天氣變化研究提供數(shù)據(jù)支撐[5],因此在天氣預(yù)報(bào)中應(yīng)用極為廣泛。西北區(qū)域氣象中心高性能計(jì)算機(jī)系統(tǒng)管理員在 LoadLeveler 中使用隊(duì)列來對模式作業(yè)在資源上進(jìn)行調(diào)度。隊(duì)列是LoadLeveler用來決定程序該被分派到哪些節(jié)點(diǎn)(Node)運(yùn)行,以及可使用多少CPU 時(shí)間的重要依據(jù)[6]。根據(jù)作業(yè)性質(zhì)和優(yōu)先級(jí)的不同,西北區(qū)域氣象中心高性能計(jì)算機(jī)集群中隊(duì)列的設(shè)置如表1所示。

      表1 西北區(qū)域氣象中心高性能計(jì)算機(jī)集群中隊(duì)列劃分

      管理員在滿足區(qū)域級(jí)的數(shù)值預(yù)報(bào)業(yè)務(wù)/準(zhǔn)業(yè)務(wù)需求的基礎(chǔ)上,對業(yè)務(wù)研發(fā)/科研任務(wù)的資源需求進(jìn)行統(tǒng)籌安排,對數(shù)值預(yù)報(bào)業(yè)務(wù)/準(zhǔn)業(yè)務(wù)所需的計(jì)算資源按運(yùn)行時(shí)段分配所需CPU核資源。西北區(qū)域氣象中心現(xiàn)有6個(gè)業(yè)務(wù)/準(zhǔn)業(yè)務(wù)模式(表2),業(yè)務(wù)應(yīng)用峰值所需CPU核數(shù)512個(gè),核算每天需要的計(jì)算資源量為 8864 CPU 核小時(shí)。

      2.2 設(shè)置作業(yè)調(diào)度算法

      LoadLeveler使用不同的調(diào)度器,由管理員在配置文件中指定。

      (1)LL_DEFAULT調(diào)度器(默認(rèn)調(diào)度器)。LL_DEFAULT調(diào)度器將作業(yè)在空閑資源上進(jìn)行調(diào)度,根據(jù)任務(wù)負(fù)載情況啟動(dòng)、掛起或恢復(fù)作業(yè)。在調(diào)度并行作業(yè)時(shí),節(jié)點(diǎn)在變?yōu)榭捎脿顟B(tài)時(shí)都會(huì)被保留,所保留節(jié)點(diǎn)會(huì)一直保持空閑狀態(tài),直到有足夠節(jié)點(diǎn)可以用來運(yùn)行這個(gè)并行作業(yè)。這種機(jī)制在調(diào)度大型作業(yè)時(shí),會(huì)導(dǎo)致系統(tǒng)總體利用率很低,造成資源浪費(fèi)。

      (2)API調(diào)度器。通過使用LoadLeveler API(應(yīng)用程序編程接口)可以編寫自己的API調(diào)度程序管理作業(yè)的資源分配和分派作業(yè),API調(diào)度程序任務(wù)的主要接口是:ll_query、ll_get_data、ll_start_job_ext等。

      表2 西北區(qū)域氣象中心高性能計(jì)算機(jī)系統(tǒng)業(yè)務(wù)/準(zhǔn)業(yè)務(wù)模式

      (3)BACKFILL(回填調(diào)度算法)調(diào)度器。回填調(diào)度算法將所有等待的作業(yè)存放在一個(gè)排過序的隊(duì)列中,在隊(duì)列中優(yōu)先級(jí)最高的作業(yè)會(huì)被優(yōu)先調(diào)度,并且允許搶占作業(yè),以便可以運(yùn)行優(yōu)先級(jí)更高的作業(yè)。為了提高系統(tǒng)的吞吐率,在不影響大作業(yè)運(yùn)行的前提下會(huì)運(yùn)行小作業(yè)。如果請求的資源不足,作業(yè)會(huì)變成“Top Dog”狀態(tài)并且計(jì)算出最早的啟動(dòng)時(shí)間。

      基于以上特點(diǎn),為了最大限度地利用資源提高集群效率,管理員指定LoadLeveler采用BACKFILL調(diào)度器,在配置文件LoadL_config中指定SCHEDULER_TYPE = BACKFILL。系統(tǒng)先掃描集群中運(yùn)行的作業(yè)之間是否存在時(shí)間間隙,然后再據(jù)排隊(duì)作業(yè)所需資源的多少和預(yù)估時(shí)間,將排隊(duì)的作業(yè)插到空閑節(jié)點(diǎn)上運(yùn)行,這樣能充分利用資源,提高集群吞吐率[7]。

      2.3 設(shè)置調(diào)度器的調(diào)節(jié)參數(shù)

      2.3.1 SYSPRIO(決定作業(yè)的順序)

      用戶提交給LoadLeveler每個(gè)作業(yè)都被分配1個(gè)基于SYSPRIO關(guān)鍵字的優(yōu)先級(jí)編號(hào),當(dāng)調(diào)度器收到作業(yè)時(shí)會(huì)首先依據(jù)SYSPRIO表達(dá)式確定作業(yè)的優(yōu)先級(jí),SYSPRIO的值高則作業(yè)具有高優(yōu)先級(jí)。

      管理員設(shè)置SYSPRIO:0-(QDate),Qdate是作業(yè)進(jìn)入等待隊(duì)列的時(shí)間和中央管理節(jié)點(diǎn)啟動(dòng)時(shí)間的秒數(shù)差值。系統(tǒng)會(huì)根據(jù)作業(yè)提交時(shí)間創(chuàng)建FIFO(先入先出)隊(duì)列,就是所有作業(yè)按時(shí)間順序排隊(duì),當(dāng)系統(tǒng)資源滿足下一個(gè)作業(yè)的需求時(shí)立即執(zhí)行[8]。同一隊(duì)列的作業(yè)如果不指定墻鐘時(shí)間,系統(tǒng)認(rèn)為優(yōu)先級(jí)別一樣,先來先服務(wù)。如果指定了墻鐘時(shí)間,則認(rèn)為墻鐘時(shí)間短的作業(yè)優(yōu)先級(jí)高。

      2.3.2 MACHPRIO(決定機(jī)器的順序)

      系統(tǒng)也會(huì)為每個(gè)計(jì)算節(jié)點(diǎn)分配1個(gè)機(jī)器優(yōu)先級(jí)編號(hào),基于MACHPRIO關(guān)鍵字表達(dá)式。管理員設(shè)置MACHPRIO:0-(LoadAvg),LoadAvg是節(jié)點(diǎn)當(dāng)前的負(fù)載,為了提高系統(tǒng)性能,LoadLeveler會(huì)優(yōu)先考慮負(fù)荷低的節(jié)點(diǎn)來運(yùn)行作業(yè)。

      負(fù)責(zé)監(jiān)控機(jī)器資源使用情況的Startd進(jìn)程每隔一段時(shí)間(缺省為5 min)會(huì)從系統(tǒng)中獲取上1 min 的負(fù)載情況并更新到調(diào)度節(jié)點(diǎn)。使用命令llstatus -L machine時(shí)看到的LdAvg值(圖1)就是節(jié)點(diǎn)當(dāng)前的負(fù)載,但是這個(gè)值不是實(shí)時(shí)更新的,會(huì)有一段時(shí)間的滯后。

      圖1 使用命令llstatus -L machine查看系統(tǒng)狀態(tài)

      當(dāng)有作業(yè)被調(diào)度運(yùn)行時(shí),中央管理節(jié)點(diǎn)會(huì)使用Startd進(jìn)程更新的負(fù)載值加上預(yù)估的作業(yè)負(fù)載值來更新計(jì)算節(jié)點(diǎn)的負(fù)載值,這樣就相當(dāng)于降低了分配給作業(yè)使用的節(jié)點(diǎn)的優(yōu)先級(jí),使這些節(jié)點(diǎn)在下一次調(diào)度時(shí)盡量不被選取。使用公式如下:

      loadavg = sysload + negotiaotr_loadavg_increment×init_count

      其中,loadavg就是在中央管理節(jié)點(diǎn)內(nèi)部最終被用于計(jì)算節(jié)點(diǎn)的優(yōu)先級(jí),sysload是Startd進(jìn)程更新的機(jī)器的負(fù)載值,negotiaotr_loadavg_increment是預(yù)估的作業(yè)啟動(dòng)時(shí)可能的負(fù)載值,管理員設(shè)置為0.5。

      2.4 實(shí)現(xiàn)作業(yè)搶占功能

      LoadLeveler支持搶占,允許高優(yōu)先級(jí)作業(yè)搶占低優(yōu)先級(jí)作業(yè)以保證有足夠的資源優(yōu)先運(yùn)行,這是保證重要業(yè)務(wù)模式運(yùn)行的關(guān)鍵手段。西北區(qū)域氣象中心使用suspend搶占模式,該模式下被搶占作業(yè)的執(zhí)行程序還保留在虛擬內(nèi)存中,當(dāng)搶占作業(yè)完成時(shí),被搶占的作業(yè)可以在原來的節(jié)點(diǎn)上恢復(fù)運(yùn)行。在LoadL_config文件中搶占配置如下:

      PREEMPTION SUPPORT = FULL

      DEFAULT PREEMPT METHOD = su

      PREEMPT_CLASS[normal] = ENOUGH:su{normal1}

      PREEMPT_CLASS[normal2] = ENOUGH:su{normal1}

      PREEMPT_CLASS[normal] = ENOUGH:su{normal2}

      即隊(duì)列normal的優(yōu)先級(jí)最高,隊(duì)列normal2的優(yōu)先級(jí)次之,隊(duì)列normal1最低。圖2為normal隊(duì)列搶占normal1隊(duì)列的過程,ST(作業(yè)狀態(tài))一列中R代表作業(yè)處于運(yùn)行狀態(tài),I 代表作業(yè)在等待調(diào)度,E代表作業(yè)已經(jīng)被suspend方法搶占。

      圖2 normal隊(duì)列搶占normal1隊(duì)列

      2.5 作業(yè)過濾

      為了使管理員充分掌握各類應(yīng)用模式的資源使用情況,用戶必須主動(dòng)告知作業(yè)所屬氣象應(yīng)用模式。通過修改LoadL_config配置文件及編寫相應(yīng)腳本程序,強(qiáng)制用戶提交作業(yè)時(shí)對模式類型進(jìn)行說明,作為對各類應(yīng)用模式所使用資源統(tǒng)計(jì)依據(jù)[9]。用戶提交的作業(yè)定義文件JCF中必須有“#@ comment= 模式名稱”關(guān)鍵字,如:# @ comment = GRAPES,模式名稱必須是模式列表(model.list)中列出的模式之一,否則作業(yè)提交失敗,并返回錯(cuò)誤信息。

      LoadLeveler通過submit filter過濾用戶提交的做業(yè),提交成功時(shí)如圖3所示。

      圖3 作業(yè)成功提交

      3 LoadLeveler資源管理

      3.1 可消耗資源Consumable Resources和WLM

      當(dāng)系統(tǒng)管理員在配置集群時(shí)或用戶在規(guī)劃作業(yè)時(shí),需要了解集群中機(jī)器的可用資源,因?yàn)橘Y源的可用性會(huì)隨著時(shí)間的變化而變化,LoadLeveler將它們定義為可消耗資源Consumable Resources。為了控制作業(yè)的資源使用情況,管理員定義LoadLeveler資源強(qiáng)制策略,使用工作負(fù)載管理器Workload Manager (WLM)對CPU、物理內(nèi)存、虛擬內(nèi)存和大頁面等資源進(jìn)行分配。WLM通過創(chuàng)建不同的服務(wù)類并為這些類指定屬性來實(shí)現(xiàn)控制:當(dāng)物理內(nèi)存或CPU超過限制時(shí),該類中的作業(yè)進(jìn)程將接收較低的調(diào)度優(yōu)先級(jí),直到它們的利用率低于限制;當(dāng)虛擬內(nèi)存或?qū)嶋H內(nèi)存限制被超過時(shí),作業(yè)進(jìn)程被終止;如果大頁面超過限制,則拒絕任何新的大頁面請求[10]。

      根據(jù)實(shí)際使用需求,管理員在LoadL_config文件中為可消耗資源定義適當(dāng)?shù)倪x項(xiàng):SCHEDULE_BY_RESOURCES= ConsumableCpus ConsumableMemory CollectiveGroups指定CPU、物理內(nèi)存、群組為調(diào)度資源;ENFORCE_RESOURCE_USAGE = ConsumableMemory使得WLM能夠強(qiáng)制執(zhí)行可消耗資源。為了讓調(diào)度器從計(jì)算機(jī)中分配資源,需在LoadL_admin文件中指定機(jī)器資源:resources = ConsumableCpus(all) ConsumableMemory(100 GB)

      使用llstatus -R命令(圖4)可以看到LoadLeveler集群中所有節(jié)點(diǎn)的可消耗資源

      圖4 集群可消耗資源

      3.2 在作業(yè)定義文件JCF中指定資源

      利用LoadLeveler進(jìn)行資源和作業(yè)管理時(shí),不能在登錄節(jié)點(diǎn)上以腳本方式運(yùn)行作業(yè)命令文件,所有作業(yè)必須通過作業(yè)提交命令llsubmit提交。為了利用llsubmit提交作業(yè),用戶必須針對此作業(yè)創(chuàng)建作業(yè)定義文件JCF,JCF作業(yè)定義文件是一個(gè)shell腳本,其中包含LoadLeveler關(guān)鍵字指令,以#@為前綴。這些關(guān)鍵字通知LoadLeveler作業(yè)的環(huán)境,要執(zhí)行的程序,在何處寫入輸出文件,作業(yè)是串行還是并行,以及作業(yè)運(yùn)行所需要的資源。比如指定任務(wù)請求資源的名稱和數(shù)量:#@ resources = ConsumableCpus(2);指定網(wǎng)絡(luò)參數(shù):#@ network.MPI = sn_all,shared,US;指定作業(yè)總共運(yùn)行的任務(wù)數(shù):#@ total_tasks = n。

      3.3 計(jì)算資源記賬

      3.3.1 使用 LoadLeveler對作業(yè)進(jìn)行記賬

      對高性能計(jì)算機(jī)系統(tǒng)進(jìn)行資源記賬,需要在配置文件(LoadL_config)中打開記賬功能。配置文件中的ACCT的關(guān)鍵字,可以設(shè)置為:ACCT = A_ON A_DETAIL。A_ON:打開記賬功能,記錄作業(yè)的CPU使用時(shí)間;A_DETAIL:記錄作業(yè)的詳細(xì)信息以及作業(yè)使用的每個(gè)機(jī)器的資源情況。

      管理員可運(yùn)行l(wèi)lsummary命令根據(jù)記賬數(shù)據(jù)生成報(bào)表,統(tǒng)計(jì)資源的周期內(nèi)使用情況,分析不同用戶在不同時(shí)間使用資源(CPU、內(nèi)存等)的詳細(xì)情況[11]。圖5展示了管理員使用llsummary -s 02/09/2019 to 02/09/2020命令在系統(tǒng)其中一個(gè)登錄節(jié)點(diǎn)上生成的近一年報(bào)表:

      圖5 使用llsummary -s命令生成報(bào)表

      3.3.2 使用Prolog/Epilog腳本記賬

      LoadLeveler允許管理員定義prolog和epilog腳本,在每個(gè)作業(yè)步驟之前和之后自動(dòng)運(yùn)行,提取作業(yè)的詳細(xì)運(yùn)行信息[12],在/lza/g1/gold_acct目錄下生成記錄文件。提取的作業(yè)信息包括作業(yè)類型、作業(yè)號(hào)、用戶賬號(hào)、使用CPU數(shù)、使用節(jié)點(diǎn)數(shù)等。

      在LoadL_config文件中配置JOB_PROLOG和JOB_EPILOG關(guān)鍵字:JOB_PROLOG = /lza/u/loadl/acctbin/prolog.sh;JOB_EPILOG = /lza/u/loadl/acctbin/epilog.sh。腳本使用Perl語言編寫,主要代碼如圖6所示。

      圖6 Prolog/Epilog腳本部分代碼

      4 利用應(yīng)用程序編程接口API

      LoadLeveler提供豐富的命令行及API接口管理集群資源及運(yùn)行的作業(yè),通過使用LoadLeveler編程接口,管理員可以定制LoadLeveler的使用以滿足實(shí)際需求,在應(yīng)用程序中調(diào)用這些API來與LoadLeveler交互獲取LoadLeveler標(biāo)準(zhǔn)命令無法提供的數(shù)據(jù),編寫自己的API 調(diào)度程序,創(chuàng)建新的自定義LoadLeveler命令,獲得使用報(bào)告等。LoadLeveler支持的接口和功能如表3所示。

      頭文件llapi.h定義了所有API數(shù)據(jù)結(jié)構(gòu)和子例程,該文件位于LoadLeveler發(fā)行目錄的include子目錄中,調(diào)用任何API子例程時(shí),必須包含此文件[13]。

      5 LoadLeveler的CPU親和性

      CPU親和性(affinity)是一種調(diào)度屬性(scheduler property),它可以將一個(gè)進(jìn)程“綁定”到一個(gè)或一組CPU上,使用LoadLeveler的親和性時(shí),管理員在配置文件(LoadL_config)中指定關(guān)鍵字: RSET_SUPPORT=RSET_MCM_AFFINITY,指示計(jì)算機(jī)可以運(yùn)行請求CPU親和性的作業(yè)。

      LoadLeveler將選擇幾組CPU并將它們附加到任務(wù)進(jìn)程,這些CPU來自相同的MCM(Multiple Chip Modules多芯片模塊),可以指定進(jìn)程在某個(gè)(或某些)處理器上運(yùn)行,從而提高系統(tǒng)性能。用戶在作業(yè)定義文件JCF中指定:#@ task_affinity = core(number) | cpu(number),如果指定了core,則作業(yè)的每個(gè)任務(wù)都必須盡可能在指定數(shù)量的處理器內(nèi)核上運(yùn)行;如果指定了cpu,則作業(yè)的每個(gè)任務(wù)都必須盡可能在指定數(shù)量的邏輯CPU上運(yùn)行。在LoadLeveler中,core指物理CPU,cpu指邏輯CPU。

      6 結(jié)論

      西北區(qū)域氣象中心搭建高性能計(jì)算機(jī)集群系統(tǒng)作為承載天氣預(yù)報(bào)業(yè)務(wù)和相關(guān)科學(xué)研究模式運(yùn)算的重要平臺(tái),采用LoadLeveler來調(diào)度管理集群作業(yè),可以根據(jù)優(yōu)先級(jí)、資源需求和資源的可用性對串行或并行的作業(yè)進(jìn)行調(diào)度,并處理與運(yùn)行在分布式資源集上的作業(yè)相關(guān)的管理、執(zhí)行和記帳。系統(tǒng)具有多個(gè)隊(duì)列和靈活的調(diào)度策略,保證高性能計(jì)算機(jī)系統(tǒng)資源的充分利用,為用戶提供高效的計(jì)算資源,充分保障了西北區(qū)域氣象中心數(shù)值預(yù)報(bào)業(yè)務(wù)模式和科研模式的運(yùn)行,對于發(fā)揮西北區(qū)域氣象中心高性能計(jì)算資源使用效益具有重要的意義。

      猜你喜歡
      隊(duì)列高性能管理員
      我是小小午餐管理員
      我是圖書管理員
      我是圖書管理員
      隊(duì)列里的小秘密
      基于多隊(duì)列切換的SDN擁塞控制*
      軟件(2020年3期)2020-04-20 00:58:44
      可疑的管理員
      在隊(duì)列里
      豐田加速駛?cè)胱詣?dòng)駕駛隊(duì)列
      一款高性能BGO探測器的研發(fā)
      電子制作(2017年19期)2017-02-02 07:08:49
      高性能砼在橋梁中的應(yīng)用
      登封市| 任丘市| 涟源市| 元阳县| 余姚市| 清涧县| 兴安县| 德江县| 昆明市| 泰和县| 包头市| 盈江县| 诸暨市| 会宁县| 汪清县| 汤阴县| 马尔康县| 六盘水市| 长顺县| 泾源县| 夹江县| 右玉县| 邵阳县| 科技| 大田县| 将乐县| 富顺县| 大邑县| 莆田市| 杨浦区| 资阳市| 泗阳县| 公安县| 永安市| 大方县| 九龙县| 台中县| 三都| 云霄县| 蒲城县| 西峡县|