介绍了 VxWorks 653 应用性能监控与分析工具的整体架构和各功能模块的设计与实现方法,其中重点阐述了目标机端时间资源监控、空间资源监控、系统事件监控、数据通信监控的实现方法。该工具能够在航电应用软件集成验证阶段提供应用运行过程中资源使用情况监控和性能分析评估,可以大幅提高航电软件的开发和集成效率。
[关键词]
VxWorks 653; 航电应用; 性能监控
VxWorks 653 应用性能监控与分析工具基于VxWorks 653 操作系统实现应用运行过程中系统的时间资源、空间资源、系统事件、数据通信等相关信息的采集,同时在宿主机端实现对监控信息数据的存储、显示、解析和分析,以确定应用对系统性能的影响。具体包括以下几个方面:
(1)时间资源:包括各分区运行时间监控和分析、各分区时间余量监控和分析、系统任务运行时间监控和分析
(2)空间资源:包括分区内存使用情况监控和分析、内核内存使用情况监控和分析
(3)系统事件:包括健康监控、异常事件等的监控和分析
(4)数据通信:包括分区间输入输出接口(I/O:Input/Output)端口收发数据的监控和分析
1 架构设计
VxWorks 653 应用性能监控与分析工具分为目标机端监控信息记录软件(简称目标机记录软件)和宿主机端信息处理软件(简称为宿主机处理软件)两个部分。目标机记录软件由目标机数据通信模块、命令解析模块、空间数据获取模块、故障记录信息获取模块、同步信息获取模块、记录信息管理模块、系统监控信息配置模块、信息采集接口适配层、通信数据封装及解析模块。宿主机处理软件主要包括宿主机数据通信模块、采集数据接收模块、原始数据管理模块、数据检索解析模块、数据分析处理模块、接口控制文件(ICD:Interface Control Document)解析模块和数据显示模块。宿主机和目标机之间通过以太网进行通信。目标机记录软件主要按照从宿主机接收的指令完成对系统运行事件的监控和相关信息的采集,宿主机处理软件主要完成对采集项、采集指令的管理并通过网络完成对采集数据的收集、显示、解析和分析。VxWorks 653 应用性能监控与分析工具总体架构如图 1 所示。
图 1 VxWorks 653 应用性能监控与分析工具总体架构
2 功能设计与实现
2.1 目标机记录软件设计与实现
2.1.1 目标机数据通信模块
目标机数据通信模块与宿主机数据通信模块使用用户数据协议(UDP:User Datagram Protocol)进行数据通信,同时支持其它协议扩展。目标机数据通信模块向命令解析模块提供宿主机下发的命令,并将空间数据获取模块、故障记录信息获取模块、同步信息获取模块、记录信息管理模块提供的数据发送到宿主机端。目标机数据通信模块具有心跳包机制、失败重传机制并提供数据收发控制功能,数据收发控制完成对发送数据的分包和对接收数据的重组。
2.1.2 命令解析和信息回送
目标机数据通信模块将宿主机下发的配置命令或控制命令传递给命令解析模块。命令解析模块调用通信数据封装及解析模块的数据解析服务完成对命令的解析,解析后的命令分为以下三类:
(1)控制命令:包括启动采集命令和停止采集命令
(2)配置命令:包括数据采集配置命令和信息管理配置命令
(3)获取命令:包括空间数据获取命令、时间戳获取命令、故障信息获取命令
控制命令被转发到信息采集接口适配层,由采集控制接口处理,控制目标机事件采集的启动和停止。
数据采集配置命令由系统监控信息配置模块处理,完成对目标机上事件采集项的配置。信息管理配置命令由记录信息管理模块处理,完成对采集项相关的缓冲区大小、缓冲区使用模式、数据上传模式等的配置。
同步信息获取模块接收时间戳获取命令,将获取到的时间戳信息封装后通过目标机数据通信模块发送给宿主机,宿主机将目标机时间戳信息和本机接收时间绑定,达到目标机和宿主机时间同步的目的。
空间数据获取模块接收空间数据获取命令,空间数据获取模块会根据命令获取指定任务的任务控制块(TCB:Task Control Block)数据,对应的内存镜像会被封装成指定格式传递给宿主机。
故障记录信息获取模块接收的故障信息获取命令,获取指定分区的健康监控(HM:Health Monitoring)记录信息,经过封装后发送给宿主机。
记录信息管理模块负责事件信息的存储、管理及上传。记录信息管理模块初始化时会创建缓冲区管理任务、缓冲区上传任务和缓冲区管理结构,分配最小数量的内存空间,用于存储记录事件,随着事件记录数据量增加,内存空间将被扩充。缓冲区的结构分为环形缓冲区和线性缓冲区,其存储单元数量、大小、类型均由命令解析模块指定。
2.1.3 系统监控信息配置模块
该模块接收来自命令解析模块的配置命令,完成对目标机采集项、事件采集周期等的配置,并调用信息采集接口适配层提供的接口完成对各类采集项的事件记录,记录的信息包括事件发生的时间,事件类型和事件特有属性,这些记录信息将写入记录信息管理模块的缓冲区中。事件发生时间的记录使用目标机上的时间获取函数(精度一般在微秒级),时间信息获取的时机是在事件发生时间点。采集项的事件分为四类:时间资源、空间资源、系统事件和数据通信。
2.1.3.1 时间资源监控
时间资源监控包括对任务调度时间和分区调度时间的监控。在 VxWorks 653 操作系统中,时间资源监控功能包括监控分区和分区内任务的有效时间,记录分区及分区内各个任务的调度情况和分区运行时间余量。因此,除了需要在任务切换点记录相关信息(包括任务所在的分区信息),还需要在分区切换点记录分区切换的时间戳和切换前后的分区信息。
分区相关的时间资源监控可以通过挂接主框架(major frame)切换的钩子函数、分区切换的钩子函数和任务切换的钩子函数,获取分区切换及分区内的任务切换信息,同时记录切换操作的时间戳。使用以上记录的数据,加上对应的 VxWorks 653 配置信息,即可对各个分区内任务运行的有效时间和分区运行的时间余量进行分析。
分区切换回调函数(partitionSwitchHook)可以记录分区切换的时间点,切换前后的分区信息,下面举例说明如何获取一段时间内指定分区的有效运行时间。
图 2 VxWorks653 2.2/2.4 分区切换图
图 2 为 VxWorks 653 2.2/2.4 分区切换图。假设需要计算T1 - T7时间段内分区 A 的有效运行时间,则方法如下:
(1)由 T1时刻的记录点可知分区 A 开始运行,由 T2 时间的记录点可知分区 A 运行结束
(2)由 T4时刻的记录点可知分区 A 开始运行, 由T5时间的记录点可知分区 A 运行结束
(3)由 T6 时刻的记录点可知分区 A 开始运行, 由 T7时间的记录点可知分区 A 运行结束
(4)由上面的分析可知分区 A 在 T1 - T7时间段内的有效运行时间为: t = (T2-T1) + (T5-T4) + (T7-T6)
分区内任务有效运行时间和分区有效运行时间的计算方法一致,可以根据任务切换点的时间信息和切换前后的任务信息和分区信息,得知一段时间内任务的有效运行时间。
由图 3 可知,任务 a 在 T1 - T7 时间段的有效运行时间为 t = (T2 - T1) + (T7 - T6)。如果指定的时间段中分区 A 运行了多次,那么 a 任务的有效运行时间是这些分区中 a 任务运行时间的总和。
图 3 VxWorks653 2.2/2.4 分区内任务切换图
2.3.1.2 空间资源监控
对 VxWorks 653 操作系统中空间资源的占用情况进行监控时,需要监控内核中任务的创建和删除操作、I/O 创建和关闭操作,检测内核中任务的特定函数对内存资源的影响,监控各分区中各个任务调用 Task 的创建和删除操作,监控各分区中各个任务的特定函数对内存资源的影响,在任务调度点监控任务堆栈的使用情况,在分区调度点监控分区对内存资源的使用情况,并记录获取的监控信息,需要分别记录分区和内核中各个监控时刻的已分配和未分配的内存信息。
为了周期性地监控整个系统的内存资源情况,目标机记录软件创建一个定时器,并在定时器中断处理函数中记录系统内存资源的使用情况。用户可通过宿主机配置界面完成对采集周期的配置,目标机根据配置命令中的采集周期完成对目标机定时器周期的设置,内存资源监控运行流程如图 4 所示。
图 4 周期性监控内存资源任务的执行流程
到定时周期时,便触发一个定时器中断,定时器中断处理函数获取内存资源使用情况,并写入到记录信息管理模块。当用户需要停止采集时,目标机根据宿主机发来的停止命令取消定时器。监控任务调度点上任务堆栈的使用情况,需要在任务切换的钩子函数上挂载相应的处理函数,记录当前任务的堆栈使用情况。监控对空间资源的使用情况,目标机只记录相关空间操作的次数,由宿主机根据相关资源操作对内存的影响公式,计算空间资源被使用的情况。
2.3.1.3 系统事件监控
系统事件监控包括异常事件和中断事件,该类事件的采集方式和普通任务创建事件的采集方式相同。中断事件和异常事件在事件映射表(evtMap)中均有对应的事件采集项。在中断发生和结束时均有对应的记录事件,因此在 evtMap 中有两项中断事件的采集项。中断事件记录的内容有:中断事件标识号(ID:Identity)、中断向量号、中断事件发生的时间戳;异常事件记录的内容有:异常事件 ID、异常向量号、异常事件发生的时间戳。
目标机记录软件可获取故障记录信息,流程如下:
(1)接收来自宿主机的信息采集指令
(2)调用对应的故障记录信息获取接口获取错误检测上报(ED&R:Error Detection and Reporting)记录缓冲区或 HM 记录缓冲区中的记录信息
(3)通过目标机数据通信模块将故障信息发送到宿主机端
ED&R 支持的事件类型包括:系统初始化(INIT)、 系 统 冷 重 启(BOOT)、 系 统 热 启 动(REBOOT)、内核事件(KERNEL)、中断事件(INTERRUPT)和用户自定义事件(USER)。
HM 事件记录信息支持使用特定函数(如 hmLogEntriesGet ())获取系统记录的 HM 日志内容。HM 支持记录的错误类型包括:APPLICATION_ERROR、DEADLINE_MISSED、HARDWARE_FAULT 、ILEGAL_REQUEST 、MEMORY_VIOLATION、NUMERIC_ERROR、POWER_FAIL 和STACK_OVERFLOW。
当故障记录信息获取模块接收到故障记录信息获取命令后,会根据传递进来的参数(如类型是ED&R 还是 HM、获取的内容是头部信息还是日志信息、起始条目数、需要获取的条目数、获取记录所属分区 ID),获取指定数量、指定类型的故障记录事件。
2.3.1.4 数据通信监控
数据通信监控主要是对系统数据通信进行监控,包括消息队列(MessageQueue)的收发。对于 VxWorks 653 2.2/2.4 操作系统,需要监控分区间 / 内的消息通信。分区消息通信监控的对象包括MessageQueue,BLACKBOARD、BUFFER、SAMPLING_PORT、QUEUING_PORT。上述监控对象数据由分区中的函数进行记录并通过系统调用传递给内核中的处理函数。分区中事件采集函数记录的内容包括收发时间、对象类型、对象 ID、消息内容以及调用时所在的分区信息,所收集的信息会被写入内核中记录信息管理模块的记录缓冲区中。
分区中调用采样端口发送函数,该函数会调用VxWorks 653 中 SystemView 挂接的采集函数,该采集函数内部会通过系统调用将采集信息传递给内核处理函数。目标机记录软件在内核中挂接相应的处理函数,完成对分区采集信息的处理。内核处理函数完成对采集数据的封装并将封装后的数据写入到记录信息管理模块的记录缓冲区中。
(1)信息采集接口适配层
信息采集接口适配层完成对各种事件信息采集接口的适配,包括同步信息获取接口、故障记录信息获取接口、空间数据获取接口、任务创建事件采集接口、任务删除事件采集接口等。本适配层只被系统监控信息配置模块调用,用来获取目标机操作系统运行时发生的各种记录事件。信息采集接口适配层通过 evtMap 表的方式为不同的检测事件挂接不同的信息采集接口。不同的操作系统使用不同的evtMap 表,调用不同的信息采集接口。
信息采集接口的 evtMap 表的内容包括事件ID、该事件在内核中的信息采集接口、该事件在分区中的信息采集接口、该事件使用的配置函数。信息采集接口的 evtMap 如表 1 所示。
当事件发生时,目标机检测信息记录软件挂接的回调函数会被调用,该回调函数执行时会根据事件的类型 ID 从 evtMap 表中查找对应的信息采集接口。为了能够快速查找到对应的信息采集接口,使用 Hash 表的方式构建信息采集接口适配层的 map表。
(2)数据封装及解析模块
通信数据封装及解析模块向目标机记录软件提供数据封装和数据解析接口,对接口的封装和解析采用 nanopb 的序列化和反序列化的功能完成。通信数据封装及解析模块完成对目标机上各种采集记录信息的封装。采集记录信息经过该模块的数据封装接口序列化后存储到缓存区中,宿主机发来的配置控制命令信息经过该模块的数据解析接口对接收到的数据进行反序列化处理,解析出消息的内容。
2.2 宿主机处理软件设计
宿主机处理软件设计相对简单,包括数据通信、数据接收、数据管理、数据检索与解析、数据分析和数据显示几个功能模块。
宿主机数据通信模块使用 UDP 实现与目标机之间的数据通信,对上层模块提供统一的收发接口。宿主机数据通信模块对外提供了数据收发接口,对内提供数据收发控制、心跳包机制和失败重传机制,保证宿主机和目标机之间数据传输的可靠性。
用户可以通过数据显示模块完成对目标机端事件采集的指令配置和控制。数据显示模块接收来自数据检索模块的检索数据、数据分析处理模块的分析结果,并将上述信息以列表的方式进行显示,数据显示模块支持对上述显示数据的保存和回看。
用户通过宿主机下发的指令配置包括目标机配置、采集任务配置,指令控制包括启动采集、停止采集和数据分析。
用户通过采集任务配置在采集项列表中勾选需要采集的采集项,形成一张采集任务表,限定本次采集事件的范围和相应参数。图 5 显示了采集任务配置 UI 界面。
图 5 采集任务配置
采集任务配置完成后,通过“执行采集”功能按钮向目标机下发采集指令。宿主机将该任务表作为配置指令下发给目标机。目标机接收到采集指令后根据任务表进行数据采集,并将采集数据上传到宿主机端,宿主机端数据接收模块将这些数据添加监控标识信息后,写入到原始数据管理模块中。
数据分析模块完成对指定数据的分析和处理。在完成分析配置后,数据分析处理模块将调用数据检索解析模块对原始数据管理模块中的特定数据进行分析和处理,如基于分区调度表和采集的分区运行信息对分区运行的时间余量进行分析,或对镜像文件的配置段空间分析。同时,可通过控件对采集数据的变化趋势进行可视化分析,图 6 是对两个指定端口在指定时间段内通信数据的分析图例。
图 6 端口通信数据分析
图 6 用两个折线图控件分析了两个指定的接收端口在指定时间内收到的数据,每个点表示一个数据, X 轴表示收到数据的时间, Y 轴表示数据的值。可视化分析中的控件样式可配置,支持折线图、柱状图、饼图等多种样式,控件中 X 轴和 Y 轴所表示的数据也可由用户根据宿主机数据库中的数据任意指定。
3 结论
VxWorks 653 应用性能监控与分析工具基于VxWorks 653 操作系统实现了应用运行过程中时间资源、空间资源、系统事件和分区通信相关的事件监控,记录系统运行过程中任务及分区的调度执行情况、系统函数调用情况、系统内存变化情况以及异常等相关资源信息,并能够根据这些信息对系统性能进行分析和评估,为航电应用软件在集成验证阶段的故障分析和应用优化提供依据,提高应用集成验证效率。
参考文献
- [1] 李江红 , 刘炳锋 , 陈玉春 , 黄兴 , 许松 . VxWorks 和 RTlinux 的性能测试分析 [J]. 计算机测量与控制 , 2008, 16(10): 1409-1411,1432.
- [2] 董艳铃 , 常扬 . Vxworks 嵌入式实时操作系统任务调度方法研究 [J]. 计算机与网络 , 2014(10): 55-58.
- [3] 罗修波 . 实时操作系统 VxWorks 的内核任务调度研究[J]. 电脑应用技术 , 2006(1): 10-14.
- [4] 万柳 . 嵌入式实时操作系统 VxWorks 内核调度机制分析 [J]. 计算机应用与软件 , 2004, 21(6): 51-52.
- [5] 李慧 , 李涛 , 杨占华 , 万玮 . VxWorks 下基于多任务调度的分析和研究 [J]. 微机发展 , 2005, 15(6): 30-32.
(中国航空无线电电子研究所 , 上海 200233)