APP下载

通用非对称多核方案设计①

2021-08-02

计算机系统应用 2021年7期
关键词:网络通信总线内存

陈 彬

(南京国电南自电网自动化有限公司,南京 211153)

随着摩尔定律的终结,多核处理器和并行计算得到大量关注,多核并行计算技术因为能充分利用当前计算机系统的计算能力,同时降低成本和功耗[1–3],提升产品竞争力,是当前的热点应用技术.但目前多核处理器较少应用于实时系统,这是因为实时系统要求任务的执行时间不能超过截止期,而相对于单核处理器而言,多核处理器在访问硬件共享资源(如Cache、内部互联总线、内存等)时产生竞争干扰,很难获得任务安全、准确的最坏情况执行时间,这就要求处理器体系结构设计能给出确定性的实时性预估结果[4].

微机保护测控装置是对电力系统内一次设备进行监察、测量、控制、保护、调节的辅助设备[5],其中电气量采集分析、保护控制信号响应等功能有硬实时性要求,而屏幕显示、键盘输入、打印、网络通信等功能对实时性要求不高,但希望软件功能丰富,硬件覆盖全面[6,7].为满足这些需求,微机保护测控装置多采用分布式多板卡多处理器硬件设计方案[8–10],使用不同的板卡或处理器来分别执行实时任务和非实时任务.这种分布式硬件方案可扩展性高,实时功能和非实时功能的隔离性好,但是系统方案复杂,软件开发难度大,设备功耗大,成本高.而多核处理器的出现,通过非对称多处理(Asymmetric MultiProcessing,AMP),在一个或多个处理器核心上运行通用操作系统,如Linux,获得完善的硬件生态支持和丰富功能,在另外一个或多个处理器核心上运行实时操作系统或裸程序,满足装置的实时计算和控制要求.相比于传统的分布式硬件设计方案,AMP 方案利用一个多核处理器实现了多个板卡或处理器的功能,对成本敏感的低压保护等装置,能带来较大竞争优势.

现有的AMP 硬件设计方案中,以异构处理器和Xilinx Zynq-7000 处理器为主.异构处理器多是CPU+DSP 结构[11–13],其中CPU 运行非实时任务,DSP 运行实时任务.Xilinx Zynq-7000是一款双核CPU+FPGA结构的SoC 芯片,其中CPU0 运行非实时任务,CPU1运行实时任务[14–16].Xilinx Zynq-7000 针对AMP 应用场景做了诸多芯片设计优化,并开发了OpenAMP 软件开发框架[17].

现有的AMP 软件设计方案中,以MCAPI (Multicore Communications API)和OpenAMP 框架为主.MCAPI是一个轻量级开源多核通信框架,支持基于消息传递形式的嵌入式多核通信核同步编程[18];OpenAMP是Xilinx 与Mentor Graphics 公司共同开发的一个标准化的嵌入式多核框架,支持IPC 消息管理、共享内存管理、从核CPU的生命周期管理和资源管理等功能[19].MCAPI 缺少从核CPU的生命周期管理功能;OpenAMP有硬件依赖层,目前只支持Xilinx Zynq 处理器.同时,两者实现相对复杂,不支持核间网络通信机制,支持的实时操作系统种类也有限.

MCAPI 缺少从核CPU的生命周期管理功能,OpenAMP 缺少对通用处理器的支持.针对上述问题,本文提出一种基于通用多核处理器的AMP 解决方案,并重点讨论了AMP 软件总体设计、共享资源管理方法和核心模块设计.

1 AMP 软件总体设计

AMP 软件总体模块框图如图1所示,分为AMP启动和AMP 通信两个子系统.AMP 启动子系统由用户态模块amprun和内核态模块amproc 实现,负责AMP 从核的程序加载、启动、停止、重启等功能.AMP通信子系统由用户态模块ampcomm和内核态模块ampeth 实现,负责AMP 核间网络通信.内核态模块

图1 AMP 软件模块框图

amproc 主要实现AMP 从核的控制管理,通过sysfs 导出用户态访问接口给用户态模块amprun 使用;内核态模块ampeth 在Linux 网络子系统和Linux 核间中断子系统之上,基于共享内存和核间中断,实现一个虚拟网口,提供给用户态模块ampcomm 实现AMP 核间的套接字网络通信.

与OpenAMP 相比,本方案对操作系统组件依赖少,没有硬件依赖,为快速适配到不同的通用处理器和操作系统创造了有利条件.与MCAPI 相比,本方案增加了从核CPU的生命周期管理功能,功能更加全面.本方案的核间通信采用网络通信机制,是OpenAMP和MCAPI 都不支持的.核间网络通信的缺点是实时精度不高,但满足继电保护装置的分布式板卡通信性能要求,而且有丰富的网络应用服务支撑和兼容当前基于网络通信的分布式系统架构等优点.

2 共享资源管理

多核处理器中,除了CPU 核心、L1 Cache、TLB、MMU 等少数模块是每个CPU的私有资源外,其他硬件资源都是CPU 共享资源,如Last Level Cache、片内互联总线、内存、外设等.当硬实时任务在同时访问这些共享资源时,就会发生资源访问冲突,给硬实时任务带来不可预测的额外执行时间.为了避免访问冲突,需要对所有共享资源进行划分和管理.

2.1 内存

在各类共享资源中,对系统性能影响最大的是共享内存和Cache,为了缓解这一问题,除了增加可用共享资源外,公平高效地管理和利用共享内存资源至关重要[20].基于通用考虑,AMP 通信功能基于共享内存实现.内存划分为3 部分,即共享内存区、Linux内存区和RTOS内存区,如图2所示.

图2 内存划分图

共享内存区位于内存头部,方便Linux内存区和RTOS内存区的扩展.共享内存由Linux 初始化,Linux和RTOS 共同使用.共享内存区内部划分为多个段,在AMP 驱动加载时按需动态申请,段信息由共享内存区头header 维护,其中包括RTOS的环境变量env、RTOS的启动参数段cmdline、AMP 从核运行状态amproc.stat、AMP 核间通信网络状态ampeth.stat、AMP 核间通信网络发送缓存ampeth.tx、AMP 核间通信网络接收缓存ampeth.rx 等.

不同的内存区设置不同的内存属性,其中共享内存的内存属性设置为non-cacheable,避免单次数据占用缓存资源;Linux内存区和RTOS内存区的内存属性设置为non-shareable,避免cache/TLB 一致性维护在核间广播,挤占内部互连总线带宽资源,影响CPU 性能.

2.2 外设

根据AMP 主核和从核的不同功能定位,将除内存之外的所有外设分别分配给AMP 主核或从核使用,尽量保证主核和从核上的外设在不同的总线上,避免外设总线访问竞争.

2.3 处理器

AMP 从核工作模式设置为AMP 模式,保证AMP从核不会发送和接受cache/TLB的一致性维护广播,有利于提升AMP 从核的实时性.

2.4 Cache 缓存

AMP 从核关闭Last Level Cache,保证AMP 从核能获得可靠的任务最坏情况执行时间,避免因为AMP主核任务污染Last Level Cache 而造成AMP 从核任务执行时间的抖动和恶化.Last Level Cache 由AMP 主核控制和使用.如果AMP 从核希望对L2 Cache 进行刷新、无效等操作,需要通知AMP 主核,由主核进行操作.

2.5 片内总线

多核处理器大都在互联结构中集成了控制多核之间优先级的总线仲裁功能,可以在启动AMP 从核的同时设置相应优先级.

如果处理器缺少控制多核之间优先级的总线仲裁功能,为了保证实时任务的实时计算,AMP 主核上的软件需要精心设计,避免长时间的总线访问风暴,大量的总线冲突导致访问队列迅速增长,延迟加剧,造成AMP 从核实时任务超时.

3 AMP 软件功能设计

3.1 AMP 从核镜像加载

AMP 从核运行实时系统需要加载的镜像文件包括RTOS 镜像、配置文件config、环境变量env和启动参数cmdline 四部分.

RTOS 镜像、配置文件config 采用FIT (Flattened Image Tree)格式打包,amprun 模块根据FIT 镜像中的属性信息如文件列表、压缩格式、校验算法、加载地址等,负责解析、校验、解压、加载到RTOS内存区.

环境变量env 存储在nor flash 上,而nor flash 由AMP 主核控制,所以需要amprun 模块从nor flash中读出环境变量,并写入共享内存区的环境变量env 段,以便AMP 从核启动时使用.

为了灵活控制RTOS的启动模式和功能等,启动参数cmdline 需要根据用户输入动态生成,所以amprun模块根据用户输入动态生成cmdline,并写入共享内存区的启动参数cmdline 段.

3.2 AMP 从核启动

完成AMP 从核镜像加载后,amprun 模块使用amproc 模块提供的接口,完成AMP 从核的启动、停止、重启等生命周期的控制管理.

启动AMP 从核操作过程如下:

1)初始化AMP 从核运行状态amproc.stat;

2)禁止CPU 本地中断;

3)内存屏障;

4)刷新L1和L2 Cache(PoU);

5)通知其他所有SMP CPU 等待AMP 从核完成启动(方法与步骤(11)相同);

6)设置CPU 软件复位启动地址寄存器为AMP 从核RTOS 镜像的入口地址;

7)复位AMP 从核;

8)复位AMP 从核的L1 Cache;

9)禁止AMP 从核的外部调试访问;

10)解复位AMP 从核,AMP 从核启动;

11)循环检查AMP 从核运行状态amproc.stat,等待AMP 从核完成启动.(AMP 从核完成启动后会更新amproc.stat);

12)使能CPU 本地中断;

停止AMP 从核操作过程如下:

1)复位AMP 从核;

2)禁止AMP 从核的外部调试访问;

3)下电AMP 从核;

4)初始化AMP 从核运行状态amproc.stat;

3.3 AMP 核间通信

AMP 核间通信通过虚拟网络接口,其基于共享内存和核间中断实现.共享内存段中的ampeth.stat、ampeth.tx、ampeth.rx 用于AMP 核间通信.ampeth.tx、ampeth.rx 共享内存段结构相同,由64个缓冲区描述符对象(Buffer Descriptor,BD)组成.每个BD 由有效状态valid、帧长len和帧数据区data 三部分组成.ampeth.tx 对于AMP 主核是发送缓冲区,对于AMP 从核是接收缓冲区;ampeth.rx 对于AMP 主核是接收缓冲区,对于AMP从核是发送缓冲区.ampeth.stat 共享内存段由发送缓冲区描述符对象头索引tx_idx和发送缓冲区描述符对象头索引rx_idx 组成,用于tx_idx和rx_idx 在主从核间的同步.

AMP 核间通信虚拟网口的发送流程如图3所示.首先检查当前发送BD是否空闲,如果非空闲,说明整个发送缓存已没有可用的空闲BD,丢弃发送帧并退出.如果当前BD 空闲,检查发送帧长度是否超过BD数据区长度,如果超出,丢弃发送帧并退出.当所有检查都通过后,将发送帧数据拷贝到当前发送BD的数据区,并将当前BD 设置为有效BD,然后更新网络统计计数,移动发送BD的头索引到下一位置,并将新的发送BD 头索引更新到ampeth.stat 段中,最后给AMP核发送一个IPI 收包中断,通知AMP 核可以从共享内存中接收数据了.

图3 核间通信虚拟网口发送流程

AMP 核间通信虚拟网口的接收操作流程如图4所示.当AMP 核接收到IPI 收包中断,进入中断处理函数后,首先关闭核间IPI 收包中断,然后唤醒收包线程进行收包.为了避免大量的网络流量造成中断风暴,从而严重影响系统性能,我们在进行收包前先关闭IPI 收包中断,当有大量数据包进来后,通过收包线程进行轮询收包,收完所有有效包后再打开IPI 收包中断,同时为了避免收包线程长时间收包占用处理器资源,影响其他任务,对轮询收包的个数做了配额限制,收包机制类似于Linux内核NAPI 收包机制[21].

图4 核间通信虚拟网口接收流程

收包线程唤醒后,首先检查轮询收包的个数是否超出了配额限制,如果轮询收包的个数超过64个,则使能核间IPI中断后等待下次唤醒.如果收包个数未超过配额限制,再检查当前接收BD是否空闲,如果空闲,说明接收缓存中的所有数据已全部接收,使能核间IPI中断后等待下次唤醒.如果BD 非空闲,说明接收BD中有数据,再检查当前接收BD的len 字段是否有效,如果无效则丢弃接收帧,否则将BD的数据拷贝到接收内存空间,并清除BD的valid和len 字段.然后更新网络统计计数,并移动接收BD的头索引到下一位置,将新的接收BD 头索引更新到ampeth.stat 段中.至此,一个BD的收包处理完成.

通过AMP 核间通信虚拟网口,AMP 主核可以借助完善的TCP/IP 网络服务,为从核提供更加丰富复杂的网络服务,如网络文件系统、FTP、ssh 等;另外传统微机保护测控装置采样分布式硬件架构,其板间通信以网络通信为主,使用虚拟网口实现AMP 核间通信,可以很好地兼容现有微机保护测控装置的嵌入式软件架构和通信机制.

4 工程应用

本方案应用于35kV 及以下低压保护测控装置的研制,装置中的CPU 板的核心器件包括四核处理器和FPGA.处理器中的3个CPU 核设置为SMP 模式,运行Linux 操作系统;1个CPU 核设置为AMP 模式,运行实时操作系统.FPGA 用于扩展电力专用网络(如MMS制造报文规范、GOOSE 面向通用对象变电站事件网、SV 采样网等)和总线扩展(如开关量输入输出模块管理总线、快速报文总线、对时总线、人机接口模块通信总线、打印通信总线等).装置保护动作响应时间小于10 ms,遥控传输延时小于1 s,遥信变化响应时间小于1 s,通过保护测控装置的实时性能和功能测试[5,6].在网络报文攻击和故障注入等异常测试中,装置无死机或异常重启,AMP 从核上的保护、采样等实时任务可靠运行.

装置在正常负载情况下,AMP 核间虚拟网口网络通信耗时约50 μs 左右,其中Linux 侧收发包平均耗时约40 μs,RTOS 侧收发包平均耗时约10 μs,而分布式多板卡方案中使用的百兆以太网口网络通信耗时约500 μs 左右.AMP 主从核通过AMP 核间虚拟网口实现的网络文件系统、远程登录、端口转发、网络对时等网络服务功能工作稳定,性能符合装置技术指标要求.

现有继电保护装置的AMP 方案都是采用Zynq SOC芯片或异构处理器,而不支持通用多核处理器.本方案的应用结果表明基于通用多核处理器的AMP 方案是行之有效和稳定可靠的.

5 结语

本文提出一种基于通用多核处理器的AMP 设计方案,支持AMP 核的生命周期管理和基于虚拟网口的核间通信.采用本方案研制的低压保护测控装置已批量发货,现场运行情况表明基于通用多核处理器的AMP方案,能够满足电力二次设备的实时性能要求.总结来说,本方案的优势有如下几点:

(1)简化软硬件设计,节约成本;

(2)扩大处理器选型范围;相对于异构处理器,通用多核处理器的选型范围广,成熟度高;

(3)基于虚拟网口的AMP 核间通信方案,兼容现有的分布式软件架构和网络通信机制.

后续计划在电力二次设备中应用本方案,并适配到更多的多核处理器和实时操作系统中.

猜你喜欢

网络通信总线内存
信息化时代网络通信安全的背景和对策
关于CAN总线的地铁屏蔽门控制思路论述
笔记本内存已经在涨价了,但幅度不大,升级扩容无须等待
“春夏秋冬”的内存
4G系统的新技术和特点
5G网络通信技术应用的前瞻性思考
内存搭配DDR4、DDR3L还是DDR3?
Q&A热线
PCI9030及其PCI总线接口电路设计
上网本为什么只有1GB?