盧曉旭 顧旻皓,3 朱科軍,3 李 飛,3
1(中國(guó)科學(xué)院高能物理研究所 核探測(cè)與核電子學(xué)國(guó)家重點(diǎn)實(shí)驗(yàn)室 北京 100049)
2(中國(guó)科學(xué)院大學(xué) 物理科學(xué)學(xué)院 北京 100049)
3(中國(guó)科學(xué)院高能物理研究所 天府宇宙線研究中心 成都 610000)
高海拔宇宙線觀測(cè)站(Large High Altitude Air Shower Observatory,LHAASO)是“十二五”期間批復(fù)立項(xiàng)的國(guó)家重大科技基礎(chǔ)設(shè)施,是一個(gè)正在邊建設(shè)邊運(yùn)行的處于國(guó)際領(lǐng)先水平的高海拔宇宙線觀測(cè)項(xiàng)目。項(xiàng)目選址位于四川省稻城縣海子山,海拔4 410 m,投資超過(guò)10億元人民幣。項(xiàng)目的核心科學(xué)目標(biāo)為:探索高能宇宙線起源并開展相關(guān)的高能輻射、天體演化、甚至于暗物質(zhì)分布等基礎(chǔ)科學(xué)的研究[1-2]。
LHAASO現(xiàn)在的設(shè)計(jì)中,共有三種探測(cè)陣列,包括地面簇射粒子陣列(square KiloMeter detector Array,KM2A)、水切倫科夫探測(cè)器陣列(Water Cherenkov Detector Array,WCDA)[3]和廣角切倫科夫望遠(yuǎn)鏡陣列(Wide Field Cherenkov Telescope Array,WFCTA)。其中地面簇射粒子陣列(KM2A)分布在方圓1 km2,由5 242個(gè)電磁粒子探測(cè)器(Electromagnetic Detector,ED)和1 171個(gè)繆子探測(cè)器(Muon Detector,MD)組成[4],具體分布如圖1所示。4種探測(cè)器獨(dú)立運(yùn)行,產(chǎn)生的數(shù)據(jù)共同參與軟件觸發(fā),對(duì)空氣簇射的不同組成部分進(jìn)行區(qū)分,從而實(shí)現(xiàn)對(duì)于宇宙線和γ射線的高精度測(cè)量。
圖1 LHAASO各探測(cè)器分布Fig.1 Distribution of LHAASO detectors
作為L(zhǎng)HAASO的重要組成部分,地面簇射粒子陣列主要科學(xué)目標(biāo)是借助1 km2的觀測(cè)面積,以及大視場(chǎng)、全天候的工作特點(diǎn),覆蓋20 TeV~20 PeV,對(duì)γ射線源的巡天靈敏度在50 TeV附近達(dá)到1%蟹狀星云流強(qiáng)[5]。KM2A采樣探測(cè)廣延空氣簇射(Extensive Air Shower,EAS)到達(dá)地面的次級(jí)粒子,包括正負(fù)電子、γ和μ等。ED主要用于探測(cè)正負(fù)電子、正負(fù)μ和γ,精確測(cè)量這些粒子在某一位置處的數(shù)目密度和到達(dá)時(shí)間。多個(gè)ED共同觀測(cè),實(shí)現(xiàn)對(duì)簇射事例的方向、簇射芯位與能量的重建。ED是塑料閃爍體探測(cè)器,閃爍體產(chǎn)生的光子經(jīng)光纖收集傳輸?shù)焦怆姳对龉苻D(zhuǎn)化成電信號(hào)讀出。ED表面覆蓋鉛板,用于將EAS中的光子轉(zhuǎn)化成電子以提高探測(cè)效率和角分辨。MD是水切倫科夫探測(cè)器,表面覆蓋厚土層,厚土層用于吸收電子與光子。由于原初宇宙線強(qiáng)子簇射中產(chǎn)生的繆子數(shù)與原初強(qiáng)子的核子數(shù)相關(guān),因此,MD提供的繆子數(shù)可以用于區(qū)分原初強(qiáng)子成分。而通過(guò)測(cè)量簇射中次級(jí)繆子成分進(jìn)行原初粒子識(shí)別,KM2A可以進(jìn)行γ射線源百TeV能譜測(cè)量。
圖2為典型的高能物理實(shí)驗(yàn)的結(jié)構(gòu)示意框圖。探測(cè)器系統(tǒng)負(fù)責(zé)偵測(cè)微弱的粒子信號(hào),并將之轉(zhuǎn)化為電信號(hào),電子學(xué)系統(tǒng)負(fù)責(zé)將電信號(hào)轉(zhuǎn)化為數(shù)字信號(hào),并打包成數(shù)據(jù)包。觸發(fā)判選系統(tǒng)負(fù)責(zé)完成數(shù)據(jù)的篩選工作。數(shù)據(jù)獲取系統(tǒng)負(fù)責(zé)進(jìn)行高速海量數(shù)據(jù)讀取、在線處理與存儲(chǔ)[6]。LHAASO數(shù)據(jù)獲取系統(tǒng)主要分為數(shù)據(jù)流軟件與在線軟件。在線軟件作為一個(gè)分布式數(shù)據(jù)獲取系統(tǒng)的架構(gòu)系統(tǒng),為數(shù)據(jù)流軟件提供通用框架服務(wù)。而數(shù)據(jù)流軟件對(duì)于原始物理數(shù)據(jù)的海量數(shù)據(jù)進(jìn)行獲取、傳輸、處理與存儲(chǔ)[7]。
值得注意的是,對(duì)于LHAASO實(shí)驗(yàn)而言,并沒(méi)有設(shè)計(jì)硬件觸發(fā)系統(tǒng),因此,LHAASO實(shí)驗(yàn)的觸發(fā)判選功能由軟件承擔(dān)。所以,必須需要設(shè)計(jì)一個(gè)在線分布式軟件,作為數(shù)據(jù)流軟件的一部分,用來(lái)對(duì)陣列完成在線的數(shù)據(jù)篩選處理,執(zhí)行“觸發(fā)判選”的功能。
圖2 典型高能物理實(shí)驗(yàn)結(jié)構(gòu)圖Fig.2 Structural diagram of a typical high-energy physics experiment
LHAASO KM2A設(shè)計(jì)由5 242個(gè)ED和1 171個(gè)MD組成,ED估算總數(shù)據(jù)量為230 MB·s-1,MD估算數(shù)據(jù)量為316 MB·s-1,總數(shù)據(jù)量約546 MB·s-1。由于KM2A并不具備硬件觸發(fā)能力,需要設(shè)計(jì)一套LHAASO地面簇射粒子陣列在線分布式數(shù)據(jù)處理軟件,通過(guò)對(duì)輸入數(shù)據(jù)進(jìn)行在線的處理,降低數(shù)據(jù)量的同時(shí),篩選有效數(shù)據(jù),從而送入磁盤陣列,進(jìn)行數(shù)據(jù)存儲(chǔ)。
功能上,這個(gè)在線分布式數(shù)據(jù)處理軟件采用基于標(biāo)準(zhǔn)以太網(wǎng)和TCP/IP協(xié)議的數(shù)據(jù)傳輸方案,需要能夠接收包括來(lái)自所有探測(cè)器單元的同一時(shí)間的組包完畢的數(shù)據(jù),利用配置的觸發(fā)算法對(duì)數(shù)據(jù)包進(jìn)行在線處理與計(jì)算,將具有物理意義的數(shù)據(jù)提取、打包,組成為一個(gè)個(gè)標(biāo)有物理標(biāo)簽的事例,并按照配置的輸出規(guī)則將這些事例送出至不同的接收方。
性能上,數(shù)據(jù)處理軟件既不能在在線處理與計(jì)算前,丟失來(lái)自某些探測(cè)器的數(shù)據(jù);也不能將數(shù)據(jù)包處理與計(jì)算的時(shí)間拉的過(guò)長(zhǎng);同時(shí),處理完的事例要及時(shí)送出。
由于對(duì)于該在線數(shù)據(jù)處理軟件性能要求較高,且出于配置靈活性等方面的考慮,軟件設(shè)計(jì)采用在線分布式數(shù)據(jù)處理方案。
軟件配有一個(gè)管理節(jié)點(diǎn)和多個(gè)處理節(jié)點(diǎn)。處理節(jié)點(diǎn)負(fù)責(zé)進(jìn)行數(shù)據(jù)的接收與處理,并將處理后的數(shù)據(jù)依照輸出規(guī)則配置文件,將不同標(biāo)簽的事例發(fā)送至不同的接收節(jié)點(diǎn)。管理節(jié)點(diǎn)負(fù)責(zé)對(duì)于所有處理節(jié)點(diǎn)進(jìn)行性能監(jiān)督與調(diào)度。
軟件采用ZeroMQ作為消息和數(shù)據(jù)通信中間件,采用Protobuf進(jìn)行消息的(逆)序列化,采用Redis作為信息共享平臺(tái),負(fù)責(zé)發(fā)布軟件各個(gè)節(jié)點(diǎn)的運(yùn)行信息。軟件的業(yè)務(wù)層框架設(shè)計(jì)如圖3所示。
圖4為軟件的運(yùn)行示意圖。軟件的運(yùn)行分為配置階段與數(shù)據(jù)處理階段。
圖3 軟件業(yè)務(wù)層框架圖Fig.3 Business layer framework diagram of software
圖4 軟件運(yùn)行示意圖Fig.4 Software operation system
配置階段,主要完成的是對(duì)于軟件節(jié)點(diǎn)部署與節(jié)點(diǎn)內(nèi)參數(shù)的配置。節(jié)點(diǎn)部署,即配置軟件一共需要的節(jié)點(diǎn)種類,各種類型的節(jié)點(diǎn)個(gè)數(shù),節(jié)點(diǎn)運(yùn)行位置,節(jié)點(diǎn)ID,節(jié)點(diǎn)是否啟用等。節(jié)點(diǎn)內(nèi)參數(shù)配置,即配置某個(gè)節(jié)點(diǎn)的內(nèi)部參數(shù),如節(jié)點(diǎn)內(nèi)Worker數(shù)量,節(jié)點(diǎn)掛載的動(dòng)/靜態(tài)鏈接庫(kù),節(jié)點(diǎn)是否開啟輸出/節(jié)點(diǎn)內(nèi)部存盤功能,節(jié)點(diǎn)調(diào)用的數(shù)據(jù)處理階段需要使用的參數(shù)配置文件等。
軟件數(shù)據(jù)處理階段,主要完成的是數(shù)據(jù)消息的傳入、處理以及數(shù)據(jù)的傳出。
軟件的輸入為REQUEST類型消息與FRAGMENT類型消息。軟件每次信息交互,首先是管理節(jié)點(diǎn)收到的REQUEST類型消息。REQUEST類型消息主要意義為請(qǐng)求分配當(dāng)前最空閑處理節(jié)點(diǎn)。當(dāng)收到此類型消息后,管理節(jié)點(diǎn)會(huì)返回一個(gè)NEXTPRO類型消息,其內(nèi)容為當(dāng)前最空閑處理節(jié)點(diǎn)ID。
隨后,軟件的處理節(jié)點(diǎn)會(huì)收到FRAGMENT類型的消息,消息內(nèi)容是打包好的某一時(shí)間段的來(lái)自全部種類全部探測(cè)器的數(shù)據(jù)。在線分布式數(shù)據(jù)處理軟件的配置會(huì)為該節(jié)點(diǎn)選好需要加載的觸發(fā)算法。當(dāng)該節(jié)點(diǎn)在運(yùn)行過(guò)程中收到消息后,會(huì)利用加載的觸發(fā)算法對(duì)于數(shù)據(jù)進(jìn)行在線的數(shù)據(jù)處理與篩選。對(duì)于篩選后需要保留的事例,依據(jù)觸發(fā)算法的不同,根據(jù)數(shù)據(jù)單元的類型,每一個(gè)保留的事例打一個(gè)類型標(biāo)記。隨后,根據(jù)配置的輸出規(guī)則,處理節(jié)點(diǎn)可以將不同的事例類型發(fā)送向不同的輸出端。
當(dāng)處理節(jié)點(diǎn)完成某個(gè)FRAGMENT的處理與發(fā)送后,處理節(jié)點(diǎn)會(huì)向管理節(jié)點(diǎn)發(fā)送CLEAR類型消息以進(jìn)行匯報(bào),通知管理節(jié)點(diǎn)更改自身的工作狀態(tài)的記錄。
2.3.1 軟件管理模塊
軟件管理模塊對(duì)所有處理節(jié)點(diǎn)進(jìn)行性能監(jiān)督與調(diào)度。模塊分為模塊管理單元、模塊配置單元、模塊處理單元、模塊信息管理單元等,如圖5所示。
圖5 管理模塊結(jié)構(gòu)圖Fig.5 Managing module structure diagram
1)模塊管理單元。App單元是軟件管理模塊的管理單元。在軟件初始化階段,App單元負(fù)責(zé)調(diào)用配置單元,設(shè)定軟件管理模塊的運(yùn)行參數(shù),并初始化模塊處理單元與模塊信息管理單元。在軟件數(shù)據(jù)處理階段,App單元負(fù)責(zé)接收所有流入軟件管理模塊的消息,進(jìn)行消息解析,判斷消息類型,調(diào)用模塊處理單元完成消息處理。
2)模塊配置單元。Config單元為模塊的配置單元,負(fù)責(zé)在初始化階段完成參數(shù)設(shè)定??紤]到配置單元僅需要實(shí)現(xiàn)一次,該單元采用單例模式實(shí)現(xiàn)。而考慮到多線程的運(yùn)行環(huán)境下仍需要保證該單元的參數(shù)不會(huì)被多個(gè)線程同時(shí)改變,單元采用餓漢模式實(shí)現(xiàn)單例[8]。
3)模塊處理單元。模塊處理單元負(fù)責(zé)在軟件數(shù)據(jù)處理過(guò)程中,對(duì)于流入軟件管理模塊的不同類型的消息進(jìn)行不同的處理。該單元主要需要處理的消息類型為REQUEST類型消息與CLEAR類型消息。
處理單元內(nèi)部存有表格,表格內(nèi)容節(jié)點(diǎn)ID,節(jié)點(diǎn)當(dāng)前任務(wù)數(shù)量,節(jié)點(diǎn)Worker數(shù)量,節(jié)點(diǎn)CPU效率因子等。同時(shí),會(huì)利用這些參數(shù),計(jì)算出每個(gè)節(jié)點(diǎn)ID對(duì)應(yīng)的節(jié)點(diǎn)綜合負(fù)載量。當(dāng)收到REQUEST類型消息時(shí),處理單元會(huì)查詢表格,尋找到綜合負(fù)載量最小的節(jié)點(diǎn),將其ID返回,同時(shí)更新此ID的當(dāng)前任務(wù)數(shù)量,并重新計(jì)算此ID對(duì)應(yīng)的節(jié)點(diǎn)綜合負(fù)載量。
當(dāng)收到CLEAR類型消息時(shí),處理單元會(huì)查找表格,更新消息發(fā)送節(jié)點(diǎn)的當(dāng)前任務(wù)數(shù)量,同時(shí)更新該節(jié)點(diǎn)的綜合負(fù)載量。
4)模塊信息管理單元。Info單元為模塊的信息管理單元。該單元在模塊的配置階段,會(huì)配置好所有需要進(jìn)行信息管理的鍵。在模塊的數(shù)據(jù)處理階段,所有其他單元會(huì)在有消息操作時(shí),更改模塊信息管理單元相關(guān)鍵對(duì)應(yīng)的值。而模塊信息管理單元會(huì)定期將所有鍵與值發(fā)布到Redis數(shù)據(jù)庫(kù)上,以供用戶查詢運(yùn)行狀態(tài)。
考慮到多線程安全問(wèn)題,模塊信息管理單元也采用的是餓漢模式實(shí)現(xiàn)的單例模式。
2.3.2 軟件處理模塊
軟件處理模塊主要工作內(nèi)容為對(duì)流入模塊的消息與數(shù)據(jù)進(jìn)行處理,對(duì)處理后的消息數(shù)據(jù)參照配置的發(fā)送規(guī)則進(jìn)行發(fā)送,以及對(duì)于軟件管理模塊進(jìn)行狀況匯報(bào)。軟件處理模塊分為模塊管理單元、模塊配置單元、模塊計(jì)算單元、軟件輸出單元、軟件信息管理單元等,如圖6所示。
圖6 處理模塊結(jié)構(gòu)圖Fig.6 Processing module structure diagram
1)模塊管理單元。App單元是軟件觸發(fā)模塊的管理單元。在軟件初始化階段,App單元負(fù)責(zé)調(diào)用配置單元讀取環(huán)境變量,完成基本參數(shù)設(shè)定,隨后根據(jù)參數(shù)配置初始化一定數(shù)量的模塊計(jì)算單元與模塊輸出單元,加載用戶指定的觸發(fā)算法庫(kù)。而在軟件的數(shù)據(jù)處理階段,模塊管理單元作為軟件處理模塊的消息接收節(jié)點(diǎn),接收所有流入軟件處理模塊的消息并進(jìn)行處理。軟件管理模塊對(duì)消息解析與類型判斷。當(dāng)消息類型確認(rèn)為FRAGMENT類型后,管理單元會(huì)將消息放入模塊輸入隊(duì)列,以供計(jì)算單元進(jìn)行后續(xù)處理。
2)模塊配置單元。Config單元為模塊的配置單元。該單元主要任務(wù)為,讀取環(huán)境變量,加載關(guān)鍵配置參數(shù),如模塊實(shí)現(xiàn)的Worker數(shù)量,模塊調(diào)用的觸發(fā)算法庫(kù)的路徑與名稱,模塊的本地存儲(chǔ)與輸出功能的開關(guān)等。
3)模塊計(jì)算單元。Worker是模塊中擔(dān)任在線數(shù)據(jù)計(jì)算處理的單元。在線分布式數(shù)據(jù)處理軟件中,Worker數(shù)量用戶可以根據(jù)需求自行配置。Worker的主要任務(wù)就是從前面的輸入隊(duì)列中拿到數(shù)據(jù)包,調(diào)用配置指定的觸發(fā)算法,對(duì)于數(shù)據(jù)包進(jìn)行在線的數(shù)據(jù)計(jì)算與篩選,并將處理后的數(shù)據(jù)依照物理意義封裝成事例,并打上對(duì)應(yīng)物理意義的標(biāo)簽,放入輸出隊(duì)列中,以供模塊輸出單元進(jìn)行數(shù)據(jù)輸出。
KM2A的具體觸發(fā)策略等在§3.4將給出詳細(xì)描述。
4)模塊輸出單元。Output是模塊中負(fù)責(zé)處理后的數(shù)據(jù)分發(fā)的單元。當(dāng)觸發(fā)模塊打開本地存儲(chǔ)功能時(shí),模塊輸出單元會(huì)從輸出隊(duì)列中拿取處理好的數(shù)據(jù)存儲(chǔ)到本地磁盤。當(dāng)觸發(fā)模塊打開數(shù)據(jù)輸出功能時(shí),模塊在完成本地存儲(chǔ)相關(guān)工作后,會(huì)將數(shù)據(jù)擬成消息格式,進(jìn)行消息的序列化,并判斷數(shù)據(jù)類型,將序列化的數(shù)據(jù)發(fā)向所有配置時(shí)指定該類型需要發(fā)送的節(jié)點(diǎn)。當(dāng)發(fā)送完成后,會(huì)將相關(guān)的內(nèi)存刪除。
5)模塊信息管理單元。Info單元為模塊的信息管理單元。該單元主要功能與執(zhí)行方式與軟件管理模塊的信息管理單元相同。
軟件的內(nèi)存管理主要由隊(duì)列模塊、內(nèi)存池實(shí)現(xiàn)。軟件內(nèi)部節(jié)點(diǎn)間信息交換采用Protobuf進(jìn)行消息的序列/逆序列化,采用ZeroMQ作為消息中間件。
2.4.1 隊(duì)列模塊
軟件處理模塊內(nèi)部符合生產(chǎn)者-消費(fèi)者模型,因此,考慮引入數(shù)據(jù)模型作為數(shù)據(jù)的緩沖區(qū),從而使得模塊可以在異步的狀態(tài)工作,達(dá)到提高其抗性能波動(dòng)能力的目的[9]。通常在此情況下考慮的數(shù)據(jù)模型有隊(duì)列、環(huán)形緩沖區(qū)[10]等。本軟件采用的是隊(duì)列模型。首先,隊(duì)列模型的隊(duì)列長(zhǎng)度可以自由變化;其次,隊(duì)列的長(zhǎng)度易于觀察,從而能夠在調(diào)試與運(yùn)行階段更加便捷地觀察生產(chǎn)者與消費(fèi)者間的性能差異與性能波動(dòng)。隊(duì)列模塊相較于其他數(shù)據(jù)模型(如環(huán)形緩沖區(qū))的開發(fā)與測(cè)試難度也更低。
2.4.2 內(nèi)存池模塊
Memory是一個(gè)內(nèi)存池[11]。由于軟件需要不停地創(chuàng)建和銷毀內(nèi)存,而大量的創(chuàng)建、銷毀操作會(huì)產(chǎn)生很大的時(shí)間開銷與內(nèi)存碎片,因此,軟件設(shè)計(jì)采用了內(nèi)存池的內(nèi)存管理方法。在軟件開始接收數(shù)據(jù)之前,Memory負(fù)責(zé)創(chuàng)建好一定量的不同大小的內(nèi)存。每次節(jié)點(diǎn)需要?jiǎng)?chuàng)建一個(gè)內(nèi)存,實(shí)際操作就是從內(nèi)存池拿一塊已經(jīng)創(chuàng)建好、最接近所需內(nèi)存大小且比所需內(nèi)存大的內(nèi)存,并在拿取內(nèi)存后設(shè)置內(nèi)存的實(shí)際使用大小。而每次節(jié)點(diǎn)需要銷毀內(nèi)存,實(shí)際的對(duì)應(yīng)操作就是將內(nèi)存歸還到內(nèi)存池。如果內(nèi)存池里的某大小內(nèi)存“售罄”,則內(nèi)存池在下次收到此大小內(nèi)存的獲取操作時(shí),將創(chuàng)建一個(gè)具有這個(gè)大小的內(nèi)存到內(nèi)存池中,再將這塊內(nèi)存交給節(jié)點(diǎn)調(diào)用。當(dāng)軟件收到結(jié)束指令后,內(nèi)存池里的內(nèi)存統(tǒng)一銷毀。
2.4.3 消息序列化與逆序列化
消息從結(jié)構(gòu)化數(shù)據(jù)到流的解析過(guò)程成為序列化,反之為逆序列化。軟件的序列化與逆序列化采用的是Protobuf工具。Protobuf是一種以字節(jié)流為載體的序列化協(xié)議和工具套件,規(guī)模小、速度快、性能高,所以廣泛應(yīng)用于通信協(xié)議、數(shù)據(jù)存儲(chǔ)[12]。軟件采用Protobuf對(duì)于消息進(jìn)行序列化封裝,隨后采用ZeroMQ進(jìn)行消息發(fā)送。消息接收方在利用ZeroMQ完成消息接收后,再采用Protobuf進(jìn)行消息逆序列化解析,即可以得到消息的內(nèi)容。
2.4.4 消息中間件
軟件采用的是分布式結(jié)構(gòu),各節(jié)點(diǎn)間通信尤為重要,軟件選取ZeroMQ完成此項(xiàng)工作。ZeroMQ是一個(gè)基于消息隊(duì)列的套接字通信并發(fā)框架。它是一個(gè)面向消息的、開源的、跨語(yǔ)言的簡(jiǎn)單靈活的網(wǎng)絡(luò)通信庫(kù),且在數(shù)據(jù)量很大的使用場(chǎng)景下依然能保持高性能數(shù)據(jù)傳輸,而且能屏蔽底層通信細(xì)節(jié)??紤]到性能優(yōu)秀、開發(fā)簡(jiǎn)單等諸多優(yōu)點(diǎn),軟件選組ZeroMQ完成節(jié)點(diǎn)間通信[13]。
該軟件為用戶提供了N-Hit觸發(fā)算法作為樣例,為用戶開發(fā)個(gè)性化觸發(fā)算法的參考。LHAASO地面簇射粒子陣列中,主要設(shè)計(jì)采用的就是N-Hit算法。
Hit,即擊中數(shù)據(jù)包。N-Hit觸發(fā)算法是指在某個(gè)時(shí)間窗口內(nèi),著火探測(cè)單元的數(shù)量大于“N”時(shí),判定觸發(fā),這是當(dāng)今宇宙線實(shí)驗(yàn)中最常見(jiàn)的觸發(fā)方式。在整體實(shí)驗(yàn)中,只有電磁粒子探測(cè)器參與觸發(fā)條件判選,當(dāng)滿足觸發(fā)條件時(shí),將觸發(fā)時(shí)間內(nèi)來(lái)自電磁粒子探測(cè)器的數(shù)據(jù)包和繆子探測(cè)器的數(shù)據(jù)包統(tǒng)一進(jìn)行打包,封裝成事例。軟件設(shè)計(jì)中,采用滑動(dòng)時(shí)間窗口的方式,從排序后的擊中數(shù)據(jù)流中挑選滿足“N”觸發(fā)條件的事例的算法。
算法的第一步是對(duì)所有擊中數(shù)據(jù)包進(jìn)行排序。輸入在線分布式數(shù)據(jù)處理軟件的擊中數(shù)據(jù)包是按照單個(gè)通道保序的,但不同通道的擊中數(shù)據(jù)包之間不遵循序列號(hào)遞增的原則。因此,為滿足滑動(dòng)時(shí)間窗口的條件,需要進(jìn)行擊中數(shù)據(jù)包間排序。
算法采用的排序方法為合并排序方法。將兩個(gè)有序數(shù)列合并為一個(gè)有序數(shù)列為“歸并”。合并排序是建立于歸并操作上的一種非常有效的排序算法。屬于分治法的一個(gè)典型應(yīng)用。合并排序的主要作用為:將兩個(gè)或者兩個(gè)以上的有序表合并成一個(gè)新的有序表。首先,將待排序的序列分成若干個(gè)子序列,每個(gè)子序列都是有序的。然后再把有序的子序列合并為整體有序的序列。
該算法在時(shí)間保序的擊中數(shù)據(jù)包數(shù)組上實(shí)現(xiàn),主要負(fù)責(zé)挑選滿足“n>N”的觸發(fā)條件的時(shí)間窗內(nèi)數(shù)據(jù),并打包成事例。首先,算法會(huì)開一個(gè)Tw時(shí)間寬度的時(shí)間窗,搜索整個(gè)數(shù)據(jù)包,當(dāng)發(fā)現(xiàn)時(shí)間窗內(nèi)“n>N”時(shí),記錄“觸發(fā)開始”;隨后,當(dāng)發(fā)現(xiàn)時(shí)間窗內(nèi)“n<N”時(shí),記錄“觸發(fā)結(jié)束”。“觸發(fā)開始”與“觸發(fā)結(jié)束”之間的擊中數(shù)據(jù)包會(huì)被打包成新的事例。算法時(shí)間復(fù)雜度為O(N)。
假設(shè)N設(shè)為25,則算法處理示例如圖7所示。
圖7 N-Hit算法示例圖Fig.7 N-Hit algorithm diagram
以上算法可以從一個(gè)數(shù)據(jù)包內(nèi)挑出滿足“NHit”條件的事例,但是若單純逐個(gè)數(shù)據(jù)包處理,則會(huì)遺失跨兩個(gè)數(shù)據(jù)包的滿足“N-Hit”條件的事例。為防止此類事例丟失,算法對(duì)于輸入的打包數(shù)據(jù)有一定的要求,需要輸入的每個(gè)數(shù)據(jù)包內(nèi)保留一小段后一個(gè)數(shù)據(jù)包的時(shí)間的數(shù)據(jù)。這樣,跨數(shù)據(jù)包的事例將會(huì)在前一個(gè)數(shù)據(jù)包的在線數(shù)據(jù)處理中被處理,從而防止了跨數(shù)據(jù)包事例的漏處理。
KM2A選取N-Hit作為觸發(fā)算法。采用部分探測(cè)器參與觸發(fā)判選,全部探測(cè)器參與數(shù)據(jù)打包的策略。在KM2A觸發(fā)過(guò)程中,首先進(jìn)行ED擊中數(shù)據(jù)包時(shí)間提取與時(shí)間排序。隨后,利用滑動(dòng)時(shí)間窗“NHit”算法對(duì)于ED進(jìn)行時(shí)間窗搜索。當(dāng)搜索到“觸發(fā)開始”和“觸發(fā)結(jié)束”后,對(duì)于此區(qū)間內(nèi)ED與MD的數(shù)據(jù)包進(jìn)行打包,從而達(dá)到ED重建出原初宇宙線粒子的能量和方向,MD區(qū)分質(zhì)子與γ,和鑒別原初強(qiáng)子宇宙線的種類的功能。
軟件的測(cè)試分為模擬測(cè)試與實(shí)際運(yùn)行測(cè)試兩方面。模擬測(cè)試采用模擬數(shù)據(jù)輸入,主要用于測(cè)試軟件的功能,軟件的實(shí)際運(yùn)行測(cè)試采用真實(shí)探測(cè)器系統(tǒng)進(jìn)行測(cè)試,主要用于測(cè)試軟件是否滿足性能需求。
為了方便用戶對(duì)于個(gè)性化開發(fā)的觸發(fā)算法進(jìn)行功能測(cè)試,另外提供了離線觸發(fā)算法測(cè)試的軟件,以及數(shù)據(jù)解析軟件。離線觸發(fā)測(cè)試軟件的主要功能:接收FRAGMENT類型消息作為輸入,調(diào)用某一指定的觸發(fā)算法對(duì)消息進(jìn)行處理,并將處理后的事例進(jìn)行存儲(chǔ)。數(shù)據(jù)解析軟件的主要功能:讀取離線觸發(fā)測(cè)試軟件產(chǎn)生的存儲(chǔ)文件,對(duì)其中的數(shù)據(jù)進(jìn)行格式解析,檢查數(shù)據(jù)格式是否符合約定。
圖8為N-Hit算法產(chǎn)生的數(shù)據(jù)文件開頭部分的截圖。數(shù)據(jù)文件采用的是“文件頭+事例”的格式標(biāo)準(zhǔn)。前256字節(jié)為文件頭,主要包含文件的基本描述性信息,如文件格式版本號(hào)、運(yùn)行編號(hào)、文件開始/結(jié)束錄入時(shí)間、文件名、文件名大小、文件頭保留位等。事例采用的是“事例頭+事例數(shù)據(jù)內(nèi)容”的格式,事例頭包括事例頭標(biāo)志位、事例頭長(zhǎng)度、事例長(zhǎng)度、事例編號(hào)、事例時(shí)間、事例流標(biāo)志位等。事例數(shù)據(jù)內(nèi)容包括事例類型標(biāo)簽與事例數(shù)據(jù)包。
如圖8所示,“ee34 12ee”為事例頭標(biāo)志位,“2400 0000”為事例頭長(zhǎng)度?!?000 0000”為事例頭擴(kuò)展部分長(zhǎng)度,“8e12 0000”為事例總長(zhǎng)度,“0100 0000”為事例類型標(biāo)簽。綜合數(shù)據(jù)文件與數(shù)據(jù)解析程序分析,N-Hit算法能產(chǎn)生符合要求的數(shù)據(jù)。
圖8 N-Hit產(chǎn)生數(shù)據(jù)文件的數(shù)據(jù)片段Fig.8 Data fragment in data file generated by N-Hit
實(shí)際運(yùn)行測(cè)試:將該在線分布式數(shù)據(jù)處理軟件集成到數(shù)據(jù)流軟件中,在數(shù)據(jù)獲取系統(tǒng)對(duì)實(shí)際的地面簇射粒子陣列進(jìn)行數(shù)據(jù)采集與處理工作時(shí),對(duì)數(shù)據(jù)處理軟件的功能與性能進(jìn)行測(cè)試。
數(shù)據(jù)獲取系統(tǒng)硬件采用的是兩組共28片刀片服務(wù)器,CentOS Linux release 7.4.1708版本64位操作系統(tǒng),內(nèi)核版本采用的是3.10.0,CPU配置為48×3.00 GHz CPU(超線程開),CPU型號(hào)為Intel(R)Xeon(R)Gold 6136 CPU@3.00 GHz。
此時(shí)數(shù)據(jù)獲取系統(tǒng)共計(jì)連接2 380臺(tái)ED和570臺(tái)MD,數(shù)據(jù)獲取系統(tǒng)總計(jì)輸入帶寬約230 MB·s-1。共計(jì)配置處理節(jié)點(diǎn)27個(gè),管理節(jié)點(diǎn)1個(gè)。由于軟件管理節(jié)點(diǎn)負(fù)荷很輕,此處給出處理節(jié)點(diǎn)負(fù)荷變化。圖9、10與表1為實(shí)際運(yùn)行一段時(shí)間后某一節(jié)點(diǎn)的負(fù)荷情況,每45 min采樣一次,共采樣約8 h。值得提出的是,出于對(duì)前期觸發(fā)產(chǎn)生事例的分析考慮,實(shí)際觸發(fā)算法較原設(shè)計(jì)N-Hit觸發(fā)策略稍有修改,如此處采用的是ED與MD均可參與觸發(fā)的方式等。
圖9 某處理節(jié)點(diǎn)輸入帶寬Fig.9 Input bandwidth of one processing node
表1 某處理節(jié)點(diǎn)待處理任務(wù)數(shù)量Table 1 Amount of buffered packs in one processing node
圖10 某處理節(jié)點(diǎn)輸出帶寬Fig.10 Output bandwidth of one processing node
圖9 ~12與表1~2為某段運(yùn)行時(shí)間內(nèi)不同時(shí)刻節(jié)點(diǎn)統(tǒng)計(jì)數(shù)據(jù)。圖9~10與表1為單節(jié)點(diǎn)統(tǒng)計(jì)數(shù)據(jù),圖11~12與表2為所有處理節(jié)點(diǎn)總計(jì)統(tǒng)計(jì)數(shù)據(jù)。圖9統(tǒng)計(jì)了軟件某節(jié)點(diǎn)輸入數(shù)據(jù)包的速率,可以看出,輸入帶寬相對(duì)比較穩(wěn)定,沒(méi)有隨著時(shí)間的推移而出現(xiàn)顯著的帶寬不斷上升或下降的趨勢(shì)。表1為該節(jié)點(diǎn)的待處理數(shù)據(jù)包的數(shù)量。從表1可以看出,該節(jié)點(diǎn)待處理數(shù)據(jù)包在幾次觀測(cè)點(diǎn)均為0,證明所有輸入到該節(jié)點(diǎn)的數(shù)據(jù)包均迅速完成了數(shù)據(jù)處理,不存在節(jié)點(diǎn)內(nèi)部數(shù)據(jù)包堆積的現(xiàn)象。圖10為該節(jié)點(diǎn)輸出數(shù)據(jù)包的速率。從圖10可以看出,節(jié)點(diǎn)的輸出帶寬雖然出現(xiàn)了部分抖動(dòng),但是抖動(dòng)均不超過(guò)某一范圍。
圖11為軟件所有處理節(jié)點(diǎn)總輸入帶寬。從圖11中可以看出,處理節(jié)點(diǎn)總輸入帶寬與預(yù)計(jì)帶寬稍有偏高但相差不大。由于不同時(shí)刻不同探測(cè)器的擊中情況不同,導(dǎo)致預(yù)計(jì)帶寬時(shí)只能依照設(shè)計(jì)指標(biāo)與前期運(yùn)行情況給出大致統(tǒng)計(jì)。而由于數(shù)據(jù)在全部數(shù)據(jù)流軟件中進(jìn)行傳遞時(shí)會(huì)進(jìn)行多次格式變動(dòng)(如數(shù)據(jù)組裝時(shí)會(huì)添加部分?jǐn)?shù)據(jù)格式),因此,可認(rèn)為處理節(jié)點(diǎn)總輸入帶寬基本與預(yù)期相差無(wú)幾。圖12為軟件所有處理節(jié)點(diǎn)的輸出帶寬,從圖12可以看出,總輸出帶寬在某一范圍內(nèi)有一定抖動(dòng)變化。抖動(dòng)的產(chǎn)生與影響因素有很多,比如不同時(shí)刻輸入帶寬的變化,網(wǎng)絡(luò)的性能抖動(dòng),以及節(jié)點(diǎn)的緩存機(jī)制,數(shù)據(jù)的統(tǒng)計(jì)方式等。雖然輸出帶寬存在較大抖動(dòng),但是長(zhǎng)時(shí)間內(nèi)軟件處理節(jié)點(diǎn)輸入帶寬與預(yù)期基本相符,節(jié)點(diǎn)基本不存在任務(wù)堆積,處理節(jié)點(diǎn)不存在資源緊張問(wèn)題,且產(chǎn)生的事例文件速率與預(yù)期差別不大,因此,可以認(rèn)為軟件并沒(méi)有呈現(xiàn)出性能不足的問(wèn)題。表2為所有處理節(jié)點(diǎn)總待處理任務(wù)數(shù)量。從表2可以看出,大部分觀測(cè)時(shí)間點(diǎn)所有節(jié)點(diǎn)都沒(méi)有待處理任務(wù)堆積,某個(gè)別時(shí)間點(diǎn),可能存在少量的待處理任務(wù)堆積,但是隨即被節(jié)點(diǎn)內(nèi)部消化掉了,沒(méi)有造成后續(xù)影響。
圖11 總處理節(jié)點(diǎn)輸入帶寬Fig.11 Input bandwidth of all processing nodes
圖12 總處理節(jié)點(diǎn)輸出帶寬Fig.12 Output bandwidth of all processing nodes
表2 某處理節(jié)點(diǎn)待處理任務(wù)數(shù)量Table 2 Amount of buffered packs in one processing node
圖13為此次觀測(cè)時(shí)間段內(nèi)產(chǎn)生的某一個(gè)事例數(shù)據(jù)文件的文件頭部分。軟件實(shí)際運(yùn)行產(chǎn)生的數(shù)據(jù)與模擬運(yùn)行產(chǎn)生的數(shù)據(jù)格式?jīng)]有區(qū)別。因此,可以套用§4.1中對(duì)于模擬數(shù)據(jù)的格式分析,對(duì)于圖13的格式進(jìn)行分析檢查。
圖13 事例數(shù)據(jù)文件中數(shù)據(jù)片段Fig.13 Data fragment in event data file
圖14 為通過(guò)離線格式檢查程序?qū)κ吕龜?shù)據(jù)文件進(jìn)行初步檢查。從圖14可以看出,事例數(shù)據(jù)文件通過(guò)了格式檢查,不存在格式錯(cuò)誤問(wèn)題。由圖14可見(jiàn),處理節(jié)點(diǎn)完成了數(shù)據(jù)篩選的功能,且性能足夠滿足需求。
LHAASO地面簇射粒子陣列在線分布式數(shù)據(jù)處理軟件,已經(jīng)作為L(zhǎng)HAASO數(shù)據(jù)流軟件的一個(gè)重要組成部分,集成到了LHAASO數(shù)據(jù)獲取系統(tǒng)中。
圖14 事例數(shù)據(jù)文件檢查Fig.14 Event data file check
2018年,LHAASO數(shù)據(jù)獲取系統(tǒng)已經(jīng)部署到了四川省稻城縣海子山的計(jì)算機(jī)房。從2018年起,LHAASO數(shù)據(jù)獲取系統(tǒng)已經(jīng)配合著地面簇射粒子陣列的擴(kuò)建,邊調(diào)整部署邊運(yùn)行取數(shù)實(shí)驗(yàn)。2019年9月19~20日,LHAASO數(shù)據(jù)獲取系統(tǒng)1/4規(guī)模的鑒定驗(yàn)收會(huì)在LHAASO測(cè)控基地(稻城)召開,會(huì)議針對(duì)數(shù)據(jù)獲取開展了現(xiàn)場(chǎng)測(cè)試。現(xiàn)場(chǎng)測(cè)試表明,數(shù)據(jù)獲取系統(tǒng)各項(xiàng)性能指標(biāo)均達(dá)到LHAASO 1/4實(shí)驗(yàn)要求。專家組一致同意數(shù)據(jù)獲取1/4系統(tǒng)通過(guò)鑒定。這表明數(shù)據(jù)獲取系統(tǒng)數(shù)據(jù)流軟件搭載的本在線分布式數(shù)據(jù)處理軟件功能與性能均達(dá)到了項(xiàng)目的需求,能順利完成軟件的任務(wù)。
截止2020年1月6日,KM2A共計(jì)建成并投入科學(xué)運(yùn)行2 398臺(tái)ED和574臺(tái)MD,達(dá)到了LHAASO實(shí)驗(yàn)1/2的規(guī)模。在此規(guī)模下,分布式在線處理軟件運(yùn)行良好。
本文以LHAASO實(shí)驗(yàn)為項(xiàng)目背景與目標(biāo),設(shè)計(jì)與實(shí)現(xiàn)了一套針對(duì)地面簇射粒子陣列的在線分布式數(shù)據(jù)處理軟件。該軟件提供了無(wú)硬件觸發(fā)的高能物理實(shí)驗(yàn)背景下,一種在線實(shí)時(shí)完成軟件觸發(fā)與數(shù)據(jù)篩選的通用解決方案與解決平臺(tái)。一方面,在線分布式數(shù)據(jù)處理可以保證實(shí)時(shí)得到觸發(fā)結(jié)果,便于掌握實(shí)驗(yàn)狀況進(jìn)行實(shí)驗(yàn)調(diào)整,另一方面,在線完成數(shù)據(jù)處理可以減輕數(shù)據(jù)存儲(chǔ)負(fù)擔(dān),將冗余數(shù)據(jù)在存儲(chǔ)前剔除掉。與此同時(shí),可以掛載不同的觸發(fā)算法并對(duì)觸發(fā)算法的參數(shù)進(jìn)行靈活調(diào)整,也保證了這種通用解決方案與平臺(tái)的高可用性。該在線數(shù)據(jù)處理軟件功能上能夠靈活掛載多種多樣的觸發(fā)算法,性能上充分滿足了LHAASO地面簇射粒子陣列及類似規(guī)模物理實(shí)驗(yàn)的性能需求。此外,軟件設(shè)計(jì)結(jié)構(gòu)簡(jiǎn)潔,模塊劃分合理,還具有高度的可移植性。
軟件目前已集成到數(shù)據(jù)獲取系統(tǒng)。至2020年1月6日,地面簇射粒子陣列1/2規(guī)模已完成建設(shè)并投入科學(xué)運(yùn)行,在此規(guī)模下,軟件運(yùn)行穩(wěn)定,狀態(tài)良好??紤]到1/2規(guī)模下,軟件運(yùn)行壓力適中,且只要增加處理節(jié)點(diǎn)個(gè)數(shù)即可提高軟件性能,因此,當(dāng)實(shí)驗(yàn)規(guī)模繼續(xù)擴(kuò)展時(shí),可以通過(guò)繼續(xù)增添硬件設(shè)備,靈活調(diào)整部署方案,使得軟件也能滿足全陣列規(guī)模的運(yùn)行。下一步,該軟件將繼續(xù)作為數(shù)據(jù)獲取系統(tǒng)數(shù)據(jù)流軟件的一部分,配合項(xiàng)目陣列的擴(kuò)展繼續(xù)調(diào)整部署擴(kuò)展運(yùn)行。同時(shí)還將針對(duì)多陣列聯(lián)合觸發(fā)的需求與實(shí)際情況,對(duì)于多種觸發(fā)算法聯(lián)合掛載開發(fā)更加貼合實(shí)際需求的解決方案。