王長清,周 強,趙天恩
(南京南瑞繼保電氣有限公司,江蘇 南京 211102)
在數(shù)字化智能變電站中,故障錄波裝置對于電力系統(tǒng)故障定位和選相等方面起著至關重要的作用。其過程層通信普遍采用IEC61850 標準GOOSE、SMV 協(xié)議報文[1-3]。借助裝置對過程層報文實時記錄和分析,可以快速發(fā)現(xiàn)故障原因并恢復供電[4-5]。隨著計算機技術快速發(fā)展,多核處理架構(gòu)在處理大流量和突發(fā)性報文方面具有顯著優(yōu)勢,并應用到網(wǎng)絡分析裝置、故障錄波裝置和二次運維平臺等高級功能應用[6-15]。
對于一個報文接收端口,過程層報文按照時間先后順序達到,普遍使用單個線程對接收的報文進行解析。當單個端口流量較大時,若單個線程解析能力不足,會導致過程層報文丟失,錄波波形畸變,進而誤報故障或者故障信息記錄不完整[16-20]。本文提出的在多核架構(gòu)中基于鏈路標識報文負荷均分的過程層處理和報文解析結(jié)構(gòu),使用多個線程解析同一個端口或多個端口接收的報文,可以充分利用多核多線程并行的優(yōu)勢。
本文涉及的電力故障錄波裝置軟件上主要由過程層報文處理、故障錄波、寫盤記錄、信息展示等功能組成。其中,過程層報文處理架構(gòu)如圖1所示,包括接收模塊、前置模塊和解析模塊3 部分。物理端口使用百兆或千兆以太網(wǎng)。接收模塊處理硬件緩存的報文,之后交由前置模塊預處理后,再調(diào)用解析模塊解析報文。一般地,接收模塊數(shù)目與物理端口數(shù)目保持一致;解析模塊的數(shù)目與過程層處理使用的處理器內(nèi)核數(shù)目一致。
圖1 過程層報文處理架構(gòu)圖Fig.1 Architecture diagram of process layer message processing
過程層軟件設計包括接收模塊、前置模塊和解析模塊的軟件設計。解析模塊由GOOSE 和SMV 報文處理模塊組成。
接收模塊主要負責管理報文共享內(nèi)存和共享指針池,通知后續(xù)的前置模塊、寫盤記錄模塊等進一步處理報文[21],如圖2所示。
圖2 接收模塊與共享內(nèi)存管理示意圖Fig.2 Schematic diagram of receiving module and shared memory management
接收模塊初始化時,從系統(tǒng)保留內(nèi)存中開辟報文共享內(nèi)存和共享指針池內(nèi)存。鏈路上報文在進入物理端口時,由硬件打上接收時刻的時標,并直接收取到報文共享內(nèi)存中。接收模塊獲取每幀報文的指針,并形成共享指針池,將指針池首指針通過消息隊列通知前置模塊進行處理。此外,接收模塊還對每個端口和每種類型的報文進行報文幀數(shù)、字節(jié)數(shù)匯總統(tǒng)計,并計算接收報文速率。
前置模塊主要有接收模塊消息處理、共享指針池處理、報文預處理和多核負荷均分功能。
2.2.1 前置模塊處理流程
前置模塊的報文處理流程如圖3所示。當有新的指針池形成時,前置模塊會收到接收模塊發(fā)來的消息,該消息包括待解析報文對應指針池起始地址、端口號等信息。
圖3 前置模塊的報文處理流程圖Fig.3 Message processing flow chart of the front-end module
處理指針池第一幀報文前需要對指針池起始地址和端口號的合法性進行判斷。每完成一幀的解析,判斷指針池中報文是否處理完畢、指針池報文數(shù)目是否超限,指針池處理時間是否超時。當異常時,記錄日志退出該報文指針池的處理。當指針池處理結(jié)束時,通知接收模塊釋放該指針池對應內(nèi)存。
報文預處理是在調(diào)用解析模塊前先對報文做初步處理,例如報文長度和報文校驗合法性判斷等。若報文長度過長或者過短均為非法;報文校驗是對報文幀校驗序列和實際計算的一致性進行判斷,之后對報文進行負荷均分和解析。
2.2.2 多核負荷均分設計
對于流量大的端口需要將報文分散到多核多個線程進行解析,進行負荷均分,防止單核負荷過重導致報文丟失。前置模塊對不同報文類型報文采用不同機制。GOOSE 報文鏈路比較多,但報文流量小,只有部分突發(fā)流量,每個解析模塊對應處理一個端口的報文。SMV 報文鏈路數(shù)目適中,但報文流量大,流量比較固定,需要根據(jù)內(nèi)核數(shù)目進行負荷均分[22]。
前置模塊首先判斷報文類型,根據(jù)鏈路標識識別鏈路,按照負荷均分的原則,通知對應的解析模塊。
1)如果報文對應一個新的鏈路,前置模塊對所有解析該類型報文的解析模塊負荷進行評估,找出一個負荷最低的解析模塊,通知該解析模塊負責解析。負荷評估可以依據(jù)解析模塊關聯(lián)鏈路數(shù)目或單位時間內(nèi)解析報文的數(shù)目。
2)如果報文對應的鏈路為已經(jīng)存在的鏈路,前置模塊通知同一個解析模塊負責解析。在定時管理時,超過一定時間前置模塊沒有收到對應鏈路的報文,則將該鏈路置為無效,并移出管理范圍,再次捕獲到該鏈路的報文時,按照新出現(xiàn)的鏈路處理。
3)當一段時間內(nèi)沒有收到新鏈路對應報文,同時最大負荷和最小負荷解析模塊對應鏈路數(shù)目差別大于一定值時,前置模塊選取最大負荷解析模塊中鏈路標識號最小的鏈路均分到最小負荷解析模塊。
以GOOSE 報文為例,如圖4 所示,首先檢查GOOSE 報文頭部是否正確,根據(jù)APP_ID 尋找GOOSE控制塊,端口沒有發(fā)生改變時,之后對該鏈路的報文幀和字節(jié)數(shù)目等進行統(tǒng)計,再進行GOOSE 風暴判別,對報文各字段進行解析,將解析結(jié)果填充到錄波緩沖區(qū),并生成解析告警信息。特別地,當GOOSE報文在鏈路生存時間內(nèi)端口發(fā)生改變時,被認為無效報文直接丟棄;在鏈路生存時間外端口發(fā)生改變時,當作新的鏈路進行處理。SMV 報文解析流程與GOOSE 報文解析流程基本類似,不再贅述。
圖4 GOOSE報文解析流程圖Fig.4 Flow chart of GOOSE message parsing
測試采用的故障錄波裝置主要功能在一個多核處理器完成。該處理器為10 核對稱架構(gòu),核1~核8 共8個核用于過程層處理。故障錄波裝置報文采集端口支持百兆和千兆兩種端口。下面基于兩種典型工況,依據(jù)關聯(lián)鏈路數(shù)目作為負荷評價指標,針對多核報文負荷均分效果進行測試,具體效果如下。
1)8 個解析模塊,1 個千兆端口施加42 個SMV 鏈路,如圖5所示,8個內(nèi)核對應鏈路數(shù)目基本相近。
圖5 千兆端口多核負荷均分效果Fig.5 Load sharing effect of multi-core on 1 000 Mbps port
2)8 個解析模塊,8 個百兆端口共施加53 個SMV鏈路,如圖6所示,8個內(nèi)核對應鏈路數(shù)目基本相近。
圖6 百兆端口多核負荷均分效果Fig.6 Load sharing effect of multi-core on 100 Mbps port
本文提出了一種基于鏈路標識報文負荷均分的過程層處理和報文解析結(jié)構(gòu),應用于電力故障錄波裝置過程層處理,充分發(fā)揮了多核并行解析的優(yōu)勢,解決了單線程報文解析能力不足的瓶頸。使用該設計的電力故障錄波裝置也已經(jīng)在多個工程現(xiàn)場運行。該設計具有較高的工程實用性,對多核并行處理的應用具有一定的參考價值。