王英濤,張傳凱,李旻,古衡,黃遠(yuǎn)超,陳真,丁理杰,湯凡
(1.國網(wǎng)電力科學(xué)研究院,北京 100192;2.四川電力科學(xué)研究院,四川 成都 610072)
近年來,基于PMU[1](Phasor Measurement Unit,相量測量單元)的在線應(yīng)用技術(shù)成為電力系統(tǒng)的研發(fā)熱點(diǎn)。PMU基于衛(wèi)星同步時(shí)鐘信號量測電力系統(tǒng)各個(gè)廠站的狀態(tài)量,并通過網(wǎng)絡(luò)將實(shí)時(shí)數(shù)據(jù)傳送到調(diào)度中心主站,這使得電力系統(tǒng)實(shí)時(shí)監(jiān)測、分析、控制成為可能。
筆者課題組于2012年開發(fā)了四川電網(wǎng)失步廣域監(jiān)控系統(tǒng),基于PMU實(shí)時(shí)監(jiān)測電網(wǎng)狀態(tài),對電網(wǎng)功角穩(wěn)定進(jìn)行計(jì)算分析,當(dāng)電網(wǎng)發(fā)生振蕩時(shí),應(yīng)用系統(tǒng)發(fā)出指令,解列電網(wǎng)失步斷面,保證電網(wǎng)恢復(fù)穩(wěn)定。
該系統(tǒng)接入的PMU能夠覆蓋電網(wǎng)主網(wǎng),以一個(gè)典型區(qū)域電網(wǎng)為例,可以接入100臺PMU;計(jì)算周期達(dá)到40 ms,整體延時(shí)不大于100 ms。這對軟件實(shí)時(shí)性、硬件配置冗余性、通信技術(shù)提出了很高要求。
本文提出了軟硬件設(shè)計(jì)方案,綜合運(yùn)用Linux實(shí)時(shí)內(nèi)核技術(shù),高可靠的雙機(jī)熱備集群技術(shù),基于RDMA的高帶寬、低延遲的通信技術(shù),高性能MPI+GPU并行計(jì)算技術(shù),滿足了高實(shí)時(shí)性、高可靠性和高性能的需求。
如圖1所示,整個(gè)系統(tǒng)由2臺通信服務(wù)器、3臺計(jì)算服務(wù)器、2臺監(jiān)控服務(wù)器和4臺監(jiān)控子站組成,應(yīng)用系統(tǒng)通過以太網(wǎng)和InfiniBand網(wǎng)絡(luò)互聯(lián)。
通信服務(wù)器通過以太網(wǎng)接收實(shí)時(shí)PMU數(shù)據(jù),并將PMU數(shù)據(jù)通過高帶寬、低延遲的InfiniBand網(wǎng)絡(luò)傳輸給3臺計(jì)算服務(wù)器進(jìn)行實(shí)時(shí)并行計(jì)算,收集計(jì)算結(jié)果并將其發(fā)送給監(jiān)控服務(wù)器,如果計(jì)算得出電網(wǎng)失步,則通信服務(wù)器將解列命令下發(fā)給監(jiān)控子站,由子站對相應(yīng)斷面進(jìn)行解列。
圖1 系統(tǒng)設(shè)計(jì)框圖Fig.1 System design diagram
應(yīng)用系統(tǒng)采用雙機(jī)熱備高可靠集群技術(shù),2臺通信服務(wù)器采用主-備方式(Active-Standby方式)設(shè)計(jì)。當(dāng)主服務(wù)器故障時(shí),備份服務(wù)器及時(shí)切換過去,自動接管主服務(wù)器的工作,實(shí)現(xiàn)對用戶的不間斷服務(wù)。雙機(jī)熱備工作機(jī)制提供了故障自動恢復(fù)能力。
Corosync和Pacemaker是Linux HA的實(shí)際執(zhí)行標(biāo)準(zhǔn)。Corosync核對群集中所有的節(jié)點(diǎn),確保其可用,Pacemaker負(fù)責(zé)群集中資源的位置。通過安裝配置Corosync和Pacemaker,可以將2臺通信服務(wù)器部署為高可用集群。具體實(shí)現(xiàn)過程為:
1)按照表1設(shè)置2臺通信服務(wù)器的IP地址和主機(jī)名。
表1 IP地址及主機(jī)名設(shè)置Tab.1 IP address and host name settings
2)安裝Corosync 1.4.3和Pacemaker 1.0.11。
3)設(shè)置2臺通信服務(wù)器間的無密鑰訪問。
4)設(shè)置Corosync配置文件corosync.conf。
5)配置集群資源。
6)啟動服務(wù)。
Linux內(nèi)核2.4及以前版本,用戶空間可以被搶占,但內(nèi)核空間不能被搶占,因此實(shí)時(shí)性很差。2.6版本以后,大部分內(nèi)核代碼可以被搶占,但是由自旋鎖保護(hù)的代碼和中斷處理函數(shù)不能被高優(yōu)先級的內(nèi)核線程搶占,Linux內(nèi)核實(shí)時(shí)性有了一定的提高,可以達(dá)到幾個(gè)ms的量級。由Ingo Molnar和Thomas Gleixner維護(hù)的內(nèi)核補(bǔ)丁(CONFIG_PREEMPT_RT)進(jìn)一步提高了Linux的實(shí)時(shí)性,達(dá)到了小于100 μs的程度。它所做的修改是:
1)通過rtmutexes的重新實(shí)現(xiàn)使內(nèi)核里的鎖源語(使用自旋鎖)可被搶占。
2)以前被如spinlock_t和rwlock_t保護(hù)的臨界區(qū)現(xiàn)在變得可以被搶占了。使用raw_spinloc_t創(chuàng)建不可搶占區(qū)域(在內(nèi)核中)依舊是可能的(類似spinlock_t的相同API)。
3)為內(nèi)核里的自旋鎖和信號量實(shí)現(xiàn)優(yōu)先級繼承。
4)把中斷處理器變?yōu)榭杀粨屨嫉膬?nèi)核線程(RT-Preempt patch在內(nèi)核線程上下文中處理軟中斷處理器)。
5)把老的Linux計(jì)時(shí)器API變成分別的幾個(gè)基本結(jié)構(gòu),有針對高精度內(nèi)核計(jì)時(shí)器的還有一個(gè)是針對超時(shí)的,這使得用戶空間的POSIX計(jì)時(shí)器具有高精度。
內(nèi)核升級的具體做法為:
1)解壓內(nèi)核源代碼linux-2.6.33.9.tar.bz2和補(bǔ)丁文件patch-2.6.33.9-rt31.bz2;進(jìn)入到內(nèi)核源碼目錄,給內(nèi)核打補(bǔ)丁。
2)配置和編譯內(nèi)核。
3)將initrd-2.6.33.9-rt31.img、System.map-2.6.33.9-rt31和vmlinuz-2.6.33.9-rt31復(fù)制到/boot/目錄下。
4)將實(shí)時(shí)內(nèi)核驅(qū)動模塊復(fù)制到/lib/modules目錄下。
5)編輯/boot/grub/目錄下的menu.lst文件,添加實(shí)時(shí)內(nèi)核啟動項(xiàng)。
RDMA技術(shù)通過網(wǎng)絡(luò)把資料直接傳入計(jì)算機(jī)的內(nèi)存中,消除了外部存儲器復(fù)制和文本交換操作,騰出總線空間和CPU周期用于改進(jìn)應(yīng)用系統(tǒng)性能。RDMA工作過程如下:
1)當(dāng)一個(gè)應(yīng)用執(zhí)行RDMA讀或?qū)懻埱髸r(shí),不執(zhí)行任何數(shù)據(jù)復(fù)制。在不需要任何內(nèi)核內(nèi)存參與的條件下,RDMA請求從運(yùn)行在用戶空間中的應(yīng)用中發(fā)送到本地NIC(網(wǎng)卡)。
2)NIC讀取緩沖的內(nèi)容,并通過網(wǎng)絡(luò)傳送到遠(yuǎn)程N(yùn)IC。
3)在網(wǎng)絡(luò)上傳輸?shù)腞DMA信息包含目標(biāo)虛擬地址、內(nèi)存鑰匙和數(shù)據(jù)本身。請求完成既可以完全在用戶空間中處理,或者在應(yīng)用一直睡眠到請求完成時(shí)的情況下通過內(nèi)核內(nèi)存處理。RDMA操作使應(yīng)用可以從一個(gè)遠(yuǎn)程應(yīng)用的內(nèi)存中讀數(shù)據(jù)或向這個(gè)內(nèi)存寫數(shù)據(jù)。
4)目標(biāo)NIC確認(rèn)內(nèi)存鑰匙,直接將數(shù)據(jù)寫人應(yīng)用緩存中。用于操作的遠(yuǎn)程虛擬內(nèi)存地址包含在RDMA信息中。
零拷貝網(wǎng)絡(luò)技術(shù)使NIC可以直接與應(yīng)用內(nèi)存相互傳輸數(shù)據(jù),從而消除了在應(yīng)用內(nèi)存與內(nèi)核內(nèi)存之間復(fù)制數(shù)據(jù)的需要。內(nèi)核內(nèi)存旁路使應(yīng)用無需執(zhí)行內(nèi)核內(nèi)存調(diào)用就可向NIC發(fā)送命令。在不需要任何內(nèi)核內(nèi)存參與的條件下,RDMA請求從用戶空間發(fā)送到本地NIC,并通過網(wǎng)絡(luò)發(fā)送給遠(yuǎn)程N(yùn)IC,這就減少了在處理網(wǎng)絡(luò)傳輸流時(shí)內(nèi)核內(nèi)存空間與用戶空間之間環(huán)境切換的次數(shù)。
1.4MPI及GPU計(jì)算技術(shù)
MPI(Massage Passing Interface,消息傳遞接口)[2]是消息傳遞函數(shù)庫的標(biāo)準(zhǔn)規(guī)范,消息傳遞并行程序設(shè)計(jì)指用戶必須通過顯式地發(fā)送和接收消息,來實(shí)現(xiàn)處理機(jī)間的數(shù)據(jù)交換。在這種并行編程中,每個(gè)并行進(jìn)程均有自己獨(dú)立的地址空間,相互之間訪問不能直接進(jìn)行,必須通過顯式的消息傳遞來實(shí)現(xiàn)。這種編程方式是大規(guī)模并行處理機(jī)(MPP)和機(jī)群(Cluster)采用的主要編程方式。MPI支持Fortran、C和C++語言。使用MPI技術(shù)構(gòu)建的計(jì)算集群節(jié)點(diǎn)數(shù)在理論上不存在上限的限制,但在實(shí)際中我們要考慮增加計(jì)算節(jié)點(diǎn)所帶來的硬件成本,空間占用等問題,另外,隨著節(jié)點(diǎn)數(shù)的增多,MPI在通訊上的開銷也越大。
CUDA是基于GPU[3]的并行計(jì)算架構(gòu),采用C語言進(jìn)行程序開發(fā),能夠直接訪問GPU硬件資源。在CUDA架構(gòu)中,GPU線程以網(wǎng)格(Grid)的方式組織,而每個(gè)網(wǎng)格中又包含若干個(gè)線程塊(Block),某些GPU的線程塊支持高達(dá)1536個(gè)線程。同一線程塊中的眾多線程能夠并行執(zhí)行,能夠通過共享存儲器(Shared memory)和柵欄(Barrier)通信。同一網(wǎng)格內(nèi)不同塊之間存在不需要通信的粗粒度并行,而一個(gè)塊內(nèi)的線程之間又形成了允許通信的細(xì)粒度并行。
MPI+GPU多粒度混合編程模型,充分發(fā)揮集群節(jié)點(diǎn)間分布式存儲和節(jié)點(diǎn)內(nèi)共享存儲的優(yōu)勢,節(jié)點(diǎn)間使用MPI進(jìn)行通信,系統(tǒng)主體結(jié)構(gòu)基于經(jīng)典的主從模式,采用MPI進(jìn)程-pthread線程-CUDA線程3個(gè)層次的并行架構(gòu),以及CPU/GPU協(xié)同計(jì)算并行架構(gòu)[4]和策略來設(shè)計(jì)實(shí)現(xiàn)。
PMU在線應(yīng)用系統(tǒng)由4個(gè)計(jì)算節(jié)點(diǎn)組成,每個(gè)計(jì)算節(jié)點(diǎn)由1個(gè)多核CPU和多個(gè)GPU設(shè)備組成。輸入數(shù)據(jù)在主節(jié)點(diǎn)上載入,平均分配到從節(jié)點(diǎn)上,存儲到相應(yīng)的內(nèi)存空間內(nèi),并根據(jù)各節(jié)點(diǎn)的可用資源將數(shù)據(jù)劃分為多塊。每個(gè)從節(jié)點(diǎn)分別接收主節(jié)點(diǎn)發(fā)送的數(shù)據(jù)并存儲到內(nèi)存中。根據(jù)檢測到的可用GPU設(shè)備數(shù),每個(gè)從節(jié)點(diǎn)上創(chuàng)建同樣數(shù)目的線程來一對一控制各個(gè)GPU。各從節(jié)點(diǎn)上每個(gè)數(shù)據(jù)塊再進(jìn)一步劃分為大小相等的塊一一分配給各個(gè)線程,由每個(gè)線程逐道在CPU上預(yù)處理后傳送到GPU上處理,道內(nèi)的各數(shù)據(jù)窗分別由各CUDA線程并行處理。每個(gè)數(shù)據(jù)塊偏移由每個(gè)線程內(nèi)的相關(guān)道累加計(jì)算而得,結(jié)果返回到主節(jié)點(diǎn)上進(jìn)行集中。在實(shí)現(xiàn)過程中,采用CPU/GPU協(xié)同計(jì)算以及線性插值走時(shí)的方式來進(jìn)一步提高性能。
節(jié)點(diǎn)0主要負(fù)責(zé)和PMU及監(jiān)控服務(wù)器之間的數(shù)據(jù)通信,其他節(jié)點(diǎn)用來計(jì)算不同配置算法,如節(jié)點(diǎn)1進(jìn)行電壓穩(wěn)定性計(jì)算,節(jié)點(diǎn)2進(jìn)行功角穩(wěn)定性計(jì)算,節(jié)點(diǎn)3進(jìn)行設(shè)備安全計(jì)算,實(shí)現(xiàn)粗粒度并行,節(jié)點(diǎn)內(nèi)針對某一類算法,如功角穩(wěn)定計(jì)算,使用CUDA架構(gòu)實(shí)現(xiàn)細(xì)粒度的數(shù)據(jù)并行和線程并行。各個(gè)節(jié)點(diǎn)的GPU計(jì)算完成后,通過MPI將計(jì)算結(jié)果匯總到通信服務(wù)器?;贛PI+GPU的混合并行計(jì)算程序流程圖如圖2所示。
CUDA有效結(jié)合了CPU+GPU編程,串行部分代碼在CPU(Host)上運(yùn)行,并行部分代碼在GPU(Device)上運(yùn)行。CUDA中并行執(zhí)行的塊稱為Kernel,Kernel使用__global__限定符聲明,表示該段代碼在CPU上調(diào)用,在GPU上執(zhí)行。使用__device__聲明的代碼從GPU上調(diào)用,在GPU上執(zhí)行,使用__host__聲明的代碼從CPU上調(diào)用,在CPU上執(zhí)行。以二維傅里葉變換的計(jì)算為例,測試GPU的加速性能,關(guān)鍵代碼如下:
圖2MPI+GPU并行計(jì)算程序流程圖Fig.2 MPI+GPU parallel computing program flow chart
#include
#define NX 1024
#define NY 1024
cufftDoubleComplex*idata,*odata;
cudaMalloc((void**)&idata,sizeof(cufftDoubleComplex)*NX*NY);
cudaMalloc((void**)&odata,sizeof(cufftDoubleComplex)*NX*NY);
cufftHandle plan;
cufftPlan2d(&plan,NX,NY,CUFFT_Z2Z);
cufftExecZ2Z(plan,idata,odata,CUFFT_FORWARD);
cufftDestroy(plan);
cudaFree(idata);
cudaFree(odata);
系統(tǒng)性能在一典型異構(gòu) GPU集群上測試,每個(gè)節(jié)點(diǎn)由1個(gè)配置32GB內(nèi)存的六核CPU,以及配置6GB顯存的C2050型號的GPU組成。對于不同的規(guī)模和積分計(jì)算模式,在該平臺上的測試結(jié)果表明,本文實(shí)現(xiàn)的系統(tǒng)的性能對于包含相同計(jì)算節(jié)點(diǎn)數(shù)、每個(gè)節(jié)點(diǎn)上6個(gè)線程并行計(jì)算的MPI版本,可以達(dá)到平均5~10倍的加速。
硬件測試平臺為:CPU,2*INTEL XEON 5650;GPU,NVIDIA Tesla C2050。二維FFT在CPU和GPU上的運(yùn)算時(shí)間如圖3所示。
圖3 二維FFT在CPU和GPU上的運(yùn)行時(shí)間Fig.3 The run time of 2D FFT on CPU and GPU
從測試結(jié)果可以看出,隨著計(jì)算量的增大,CPU運(yùn)算時(shí)間大幅增加,GPU相對于CPU的運(yùn)算加速比也在增加,在1024×1024情況下的加速比為58.40。
筆者課題組開發(fā)的基于PMU的失步廣域監(jiān)控系統(tǒng),在全數(shù)字仿真系統(tǒng)上[5]進(jìn)行了測試。應(yīng)用系統(tǒng)接收數(shù)據(jù)包括:同步相量數(shù)據(jù)(三相基波電壓、三相基波電流及基波正序相量)、頻率和開關(guān)量信號;發(fā)電機(jī)內(nèi)電勢和發(fā)電機(jī)功角。
每幀數(shù)據(jù)量:96路相量;16路模擬量;48路開關(guān)量;共422字節(jié)/幀。
省級電網(wǎng):按20~60臺PMU計(jì)算,數(shù)據(jù)流速為3.8~11.4 Mbp/s。
區(qū)域電網(wǎng):按30~120臺PMU計(jì)算,數(shù)據(jù)流速為5.7~22.8 Mbp/s。
全國電網(wǎng):按1000~2000臺PMU計(jì)算,數(shù)據(jù)流速為190~380 Mbp/s。
測試案例中,PMU量測范圍覆蓋華北-華中電網(wǎng)500 kV廠站共322個(gè),量測點(diǎn)12985個(gè),包括線路電壓、電流相量、有功功率、無功功率、頻率等狀態(tài)量,實(shí)時(shí)數(shù)據(jù)刷新周期為40 ms。
經(jīng)過測試,基于MPI+GPU的計(jì)算平臺整組工作時(shí)間在40 ms以內(nèi)。其中實(shí)時(shí)計(jì)算分析時(shí)間在10 ms以內(nèi),數(shù)據(jù)上行和命令下行的耗時(shí)在20~30 ms,系統(tǒng)的整體性能滿足了廣域控制的要求[6]。
隨著廣域監(jiān)測技術(shù)[7-8]的發(fā)展,越來越多的PMU接入系統(tǒng)中,筆者及課題組根據(jù)四川電網(wǎng)失步廣域監(jiān)控的技術(shù)需求,提出了在線計(jì)算分析平臺的架構(gòu)體系,包括MPI+GPU的混合式高速并行計(jì)算方案,該方案充分考慮了系統(tǒng)在實(shí)時(shí)性及可擴(kuò)展性方面的需求。
為驗(yàn)證在線計(jì)算平臺的實(shí)時(shí)性,基于實(shí)時(shí)仿真技術(shù)構(gòu)建了以四川電網(wǎng)為實(shí)例的測試系統(tǒng)。仿真系統(tǒng)模擬各種嚴(yán)重故障,以與現(xiàn)場PMU/WAMS相似的通信特性給廣域控制系統(tǒng)發(fā)送相量數(shù)據(jù)、接受緊急控制信號。試驗(yàn)證明,在線計(jì)算平臺滿足了PMU大量數(shù)據(jù)、在線分析的需求。
目前該技術(shù)正在現(xiàn)場安裝、應(yīng)用,這將有力提高大電網(wǎng)運(yùn)行的安全穩(wěn)定性。
[1] 張文濤,邱宇峰,鄭旭軍,等.GPS及其在電力系統(tǒng)中的應(yīng)用[J].電網(wǎng)技術(shù),1996,20(5):38-40.ZHANG Wen-tao,QIU Yu-feng,ZHENG Xu-jun.GPS and its application in power system[J].Power System Technology,1996,20(5):38-40.
[2]MICHAEL J,QUINN.MPI與OpenMP并行程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2004.
[3]JASON SANDERS,EDWARD KANDROT.CUDA by Example:An Introduction to General-Purpose GPU Programming[M].清華大學(xué)出版社,2010.
[4]BENEDICT R,GASTER,LEE HOWES,et al,Dana Schaa.OpenCL異構(gòu)計(jì)算[M].清華大學(xué)出版社,2012.
[5] 李戰(zhàn)鷹,張建設(shè).南方電網(wǎng)失步解列特性RTDS仿真試驗(yàn)研究[J].南方電網(wǎng)技術(shù),2008,2(1):31-35.LI Zhan-ying,ZHANG Jian-she.RTDS simulation study on the performance of out-of-step splitting systems in China southern power grid[J].Southern Power System Technology.2008,2(1):31-35(in Chinese).
[6]湯涌,王英濤.大電網(wǎng)安全分析、預(yù)警及控制系統(tǒng)研制系列報(bào)告[R].北京:中國電力科學(xué)研究院,2011.
[7]黨杰,董明齊.基于WAMS錄波數(shù)據(jù)的華中電網(wǎng)低頻振蕩事件仿真復(fù)現(xiàn)分析[J].電力科學(xué)與工程,2012,28(4):19-23.DANG Jie,DONG Ming-qi.Central China grid low frequency oscillation simulation recurrence analysis based on WAMS measured data[J].Electric Power Science and Engineering,2012,28(4):19-23(in Chinese).
[8] 常勇,吳靖,王超.基于廣域信號的區(qū)域間低頻振蕩監(jiān)視[J].電網(wǎng)與清潔能源,2011,27(5):16-21.CHANG Yong,WU Jing,WANG Chao.Monitoring of interarea oscillation based on wide area measurement signal,power system and clean energy,2011,27(5):16-21(in Chinese)