多核架构在电力故障录波装置IEC61850过程层处理中应用
2021-03-24王长清赵天恩
王长清,周 强,赵天恩
(南京南瑞继保电气有限公司,江苏 南京 211102)
0 引言
在数字化智能变电站中,故障录波装置对于电力系统故障定位和选相等方面起着至关重要的作用。其过程层通信普遍采用IEC61850 标准GOOSE、SMV 协议报文[1-3]。借助装置对过程层报文实时记录和分析,可以快速发现故障原因并恢复供电[4-5]。随着计算机技术快速发展,多核处理架构在处理大流量和突发性报文方面具有显著优势,并应用到网络分析装置、故障录波装置和二次运维平台等高级功能应用[6-15]。
对于一个报文接收端口,过程层报文按照时间先后顺序达到,普遍使用单个线程对接收的报文进行解析。当单个端口流量较大时,若单个线程解析能力不足,会导致过程层报文丢失,录波波形畸变,进而误报故障或者故障信息记录不完整[16-20]。本文提出的在多核架构中基于链路标识报文负荷均分的过程层处理和报文解析结构,使用多个线程解析同一个端口或多个端口接收的报文,可以充分利用多核多线程并行的优势。
1 故障录波装置过程层架构设计
本文涉及的电力故障录波装置软件上主要由过程层报文处理、故障录波、写盘记录、信息展示等功能组成。其中,过程层报文处理架构如图1所示,包括接收模块、前置模块和解析模块3 部分。物理端口使用百兆或千兆以太网。接收模块处理硬件缓存的报文,之后交由前置模块预处理后,再调用解析模块解析报文。一般地,接收模块数目与物理端口数目保持一致;解析模块的数目与过程层处理使用的处理器内核数目一致。
图1 过程层报文处理架构图Fig.1 Architecture diagram of process layer message processing
2 故障录波装置过程层软件设计
过程层软件设计包括接收模块、前置模块和解析模块的软件设计。解析模块由GOOSE 和SMV 报文处理模块组成。
2.1 接收模块软件设计
接收模块主要负责管理报文共享内存和共享指针池,通知后续的前置模块、写盘记录模块等进一步处理报文[21],如图2所示。
图2 接收模块与共享内存管理示意图Fig.2 Schematic diagram of receiving module and shared memory management
接收模块初始化时,从系统保留内存中开辟报文共享内存和共享指针池内存。链路上报文在进入物理端口时,由硬件打上接收时刻的时标,并直接收取到报文共享内存中。接收模块获取每帧报文的指针,并形成共享指针池,将指针池首指针通过消息队列通知前置模块进行处理。此外,接收模块还对每个端口和每种类型的报文进行报文帧数、字节数汇总统计,并计算接收报文速率。
2.2 前置模块软件设计
前置模块主要有接收模块消息处理、共享指针池处理、报文预处理和多核负荷均分功能。
2.2.1 前置模块处理流程
前置模块的报文处理流程如图3所示。当有新的指针池形成时,前置模块会收到接收模块发来的消息,该消息包括待解析报文对应指针池起始地址、端口号等信息。
图3 前置模块的报文处理流程图Fig.3 Message processing flow chart of the front-end module
处理指针池第一帧报文前需要对指针池起始地址和端口号的合法性进行判断。每完成一帧的解析,判断指针池中报文是否处理完毕、指针池报文数目是否超限,指针池处理时间是否超时。当异常时,记录日志退出该报文指针池的处理。当指针池处理结束时,通知接收模块释放该指针池对应内存。
报文预处理是在调用解析模块前先对报文做初步处理,例如报文长度和报文校验合法性判断等。若报文长度过长或者过短均为非法;报文校验是对报文帧校验序列和实际计算的一致性进行判断,之后对报文进行负荷均分和解析。
2.2.2 多核负荷均分设计
对于流量大的端口需要将报文分散到多核多个线程进行解析,进行负荷均分,防止单核负荷过重导致报文丢失。前置模块对不同报文类型报文采用不同机制。GOOSE 报文链路比较多,但报文流量小,只有部分突发流量,每个解析模块对应处理一个端口的报文。SMV 报文链路数目适中,但报文流量大,流量比较固定,需要根据内核数目进行负荷均分[22]。
前置模块首先判断报文类型,根据链路标识识别链路,按照负荷均分的原则,通知对应的解析模块。
1)如果报文对应一个新的链路,前置模块对所有解析该类型报文的解析模块负荷进行评估,找出一个负荷最低的解析模块,通知该解析模块负责解析。负荷评估可以依据解析模块关联链路数目或单位时间内解析报文的数目。
2)如果报文对应的链路为已经存在的链路,前置模块通知同一个解析模块负责解析。在定时管理时,超过一定时间前置模块没有收到对应链路的报文,则将该链路置为无效,并移出管理范围,再次捕获到该链路的报文时,按照新出现的链路处理。
3)当一段时间内没有收到新链路对应报文,同时最大负荷和最小负荷解析模块对应链路数目差别大于一定值时,前置模块选取最大负荷解析模块中链路标识号最小的链路均分到最小负荷解析模块。
2.3 报文解析软件流程
以GOOSE 报文为例,如图4 所示,首先检查GOOSE 报文头部是否正确,根据APP_ID 寻找GOOSE控制块,端口没有发生改变时,之后对该链路的报文帧和字节数目等进行统计,再进行GOOSE 风暴判别,对报文各字段进行解析,将解析结果填充到录波缓冲区,并生成解析告警信息。特别地,当GOOSE报文在链路生存时间内端口发生改变时,被认为无效报文直接丢弃;在链路生存时间外端口发生改变时,当作新的链路进行处理。SMV 报文解析流程与GOOSE 报文解析流程基本类似,不再赘述。
图4 GOOSE报文解析流程图Fig.4 Flow chart of GOOSE message parsing
3 系统测试
测试采用的故障录波装置主要功能在一个多核处理器完成。该处理器为10 核对称架构,核1~核8 共8个核用于过程层处理。故障录波装置报文采集端口支持百兆和千兆两种端口。下面基于两种典型工况,依据关联链路数目作为负荷评价指标,针对多核报文负荷均分效果进行测试,具体效果如下。
1)8 个解析模块,1 个千兆端口施加42 个SMV 链路,如图5所示,8个内核对应链路数目基本相近。
图5 千兆端口多核负荷均分效果Fig.5 Load sharing effect of multi-core on 1 000 Mbps port
2)8 个解析模块,8 个百兆端口共施加53 个SMV链路,如图6所示,8个内核对应链路数目基本相近。
图6 百兆端口多核负荷均分效果Fig.6 Load sharing effect of multi-core on 100 Mbps port
4 结语
本文提出了一种基于链路标识报文负荷均分的过程层处理和报文解析结构,应用于电力故障录波装置过程层处理,充分发挥了多核并行解析的优势,解决了单线程报文解析能力不足的瓶颈。使用该设计的电力故障录波装置也已经在多个工程现场运行。该设计具有较高的工程实用性,对多核并行处理的应用具有一定的参考价值。