张海涛,龚龙庆(西安微电子技术研究所陕西西安710075)1引言嵌入式计算机的设计不同于通用的计算机设计,它的设计过程较复杂。对于嵌人式计算机的设计,是针对具体的应用问题,通过对问题的描述、建模,分解嵌入式计算的任务需求后,在建立的计算模型上,进一步地向设计的领域转换,即:将需要完成的计算任务向可以有效地解决该问题的嵌入式计算机系统结构与组成映射。嵌人式计算机的设计,涉及到软件和硬件的分别设计。硬件的设计
张海涛,龚龙庆
(西安微电子技术研究所 陕西西安 710075)
1引言
嵌入式计算机的设计不同于通用的计算机设计,它的设计过程较复杂。对于嵌人式计算机的设计,是针对具体的应用问题,通过对问题的描述、建模,分解嵌入式计算的任务需求后,在建立的计算模型上,进一步地向设计的领域转换,即:将需要完成的计算任务向可以有效地解决该问题的嵌入式计算机系统结构与组成映射。
嵌人式计算机的设计,涉及到软件和硬件的分别设计。硬件的设计,主要是需要考虑处理器的类型及数量,系统组成部件(包括处理器、存储器、专用部件及可编程部件、I/O部件等)之间的互联拓扑结构(即选择通信部件,以什么样的总线协议进行系统各组成部件的互联)。嵌入式计算机,由于其设计时间要求、应用环境的限制,对它的设计成本、设计性能都有特殊的要求。
嵌入式计算机的设计评价指标,可以是多种指标的综合,例如:处理速度(主要以任务的计算时间度量)、设计体积、设计成本、实时反应能力、系统的功耗、可靠性与可信度等。由于嵌入式计算机设计本身的复杂性及特殊性,不同的设计要求,评价的方式方法对不同的设计过程各不相同,同时,对这些评价指标的偏好程度及侧重点也不相同。有的环境要求很苛刻的实时性,有的应用场合要求很小的设计体积,有的要求在较小的设计成本下获得尽可能快的处理速度等。因此,嵌入式计算机的设计评价与测量是复杂的。
本文主要就嵌入式计算机的设计评价指标、评价方法,使用到的评测技术及用于设计过程中的评测基准方法进行分析,并对未来的嵌入式计算机设计中用到的评测基准技术进行探讨。
2嵌入式计算机的设计性能测试指标
对于嵌入式计算机的设计性能进行评价,需要对构成嵌入式计算机系统的组成部件,如嵌入式微处理器、编译器、运行库等关键的系统构件的评价性能特征,定义一系列的性能指标。用于嵌入式计算机设计性能评测的常用指标有以下几种:
(1)系统的执行时间(Execution Time)和加速比(Speed Up)
嵌入式计算机设计对于运行的应用程序执行时间衡量,是嵌入式计算机系统设计性能测试中最重要的性能指标。用于评测的基准程序运行时间,即基准程序的运行速度,直接反映了嵌入式系统的性能。这一性能指标,主要由嵌入式微处理器、存储系统的层次结构和I/O系统的整体性能决定,同时,也与应用程序向嵌入式计算机目标处理器编译过程有关。编译器的优化能力、支持程序运行的运行库性能对应用程序的运行时间,有着密切的关系,同时,也受操作系统的开销和同时运行的其他用户任务的影响。这一性能指标,通常会选择系统对应用测试程序的最大峰值速度作为为度量的指标。
通过对比测试,可以评测2个嵌入式系统及构成系统的关键构件设计的改进加速比:
(2)代码尺寸(Code Size)
代码尺寸是指将应用程序的源程序,由编译器编译后生成的二进制代码大小。嵌入式系统是资源受限的系统,它的内存资源往往受应用需求与成本的限制,要求应用程序的目标代码在达到一定性能的条件下,尽可能降低代码尺寸,以减少对有限内存资源的占用量。通过编译后的基准测试程序代码尺寸,可以反映微处理器的代码压缩性能和用于这种微处理器上编译器的存储优化性能。
(3)系统功耗(Energy Consumption)
目前的嵌入式系统,对于电源的要求也较为苛刻。由电池供电的嵌入式系统,一般都尽可能节省电源的要求。低功耗的嵌入式系统设计,不仅节省了系统的电源耗费成本,而且在很程度上可以有效地延长系统使用寿命。因此,对于系统的功耗评价,也是嵌入式系统的一项重要性能指标。嵌入式系统的能量消耗主要由各芯片的工艺属性和电路规模决定,受芯片电源管理控制。进一步的系统设计,进入片上系统(System-on-a-Chip,SoC)的设计时代后,系统的功耗就将会有硬件本身维持运行所消耗的静态功耗及进行软件任务的计算所表现出的系统芯片逻辑门翻转而引起的动态功耗。在目前普通的嵌入式计算机中,硬件芯片的功耗管理,可以最终通过指令序列和软件编程控制,分别由编译器指令调度和操作系统功耗管理模块完成。嵌入式系统的功耗指标,表征着嵌入式系统硬件、操作系统和编译系统的省电属性。
(4)执行的指令数(Instructions Executed)
执行的指令数是应用程序在一个时钟周期或者机器周期中,嵌入式处理器可以执行的指令个数。目前的嵌入式微处理器,可以使用基于RISC核的处理器,也可以是用于数字信号处理的DSP处理器,也可能是多种异构处理器组成的处理单元(Process Element)。RISC结构的嵌入微处理器,大多数指令为单周期指令,在一个机器周期都可以处理完成。使用运行于嵌入式系统中的测试基准程序执行的指令数,可以表征嵌入式系统中编译器的速度优化能力及微处理器完成指令运算的运行性能。
这些指标,可以是每指令平均时钟周期CPI(Cycles Per Instruction)、每时钟执行的平均指令数IPC(Instructions Per Cycle)、每秒执行的百万指令数MIPS(Millions of Instructions Per Second)等。这3个性能指标的定义分别如下:
其中,Cycles是执行应用程序经历的时钟节拍数。3种性能指标都可以用于描述应用程序的执行效率,反映编译器的速度优化性能及嵌入式计算机的处理器核心的指令处理能力。
(5)高速缓存未命中率(Cache Miss Rate)
其中Cache Miss为Cache未命中数,Cache Access为Cache总的访问次数。缓存未命中率(Cache MissRate)表示在应用程序执行过程中,访问存储器的性能,以及存储器对处理器所需要使用到的指令、数据的高速支持能力,可以用来表征表示编译器的数据分布、存储器系统的组织和访问优化能力。
在以上5种性能指标中,前3种可用于描述整个嵌入式系统、微处理器、编译器、运行库的性能评测指标,后2种主要用于评测编译器的优化性能。除此以外,某些嵌入式应用还需要使用其他性能指标,如总线/网络带宽(MBps)和浮点运算速度(MFLOPS)等。
3嵌入式计算机设计中的常用测试方法
嵌入式计算机系统设计中常用到的测试方法,可以是基于静态分析的解析方法,也可以是进行模拟仿真的方法,也可以是直接运行应用程序进行测量的方法。
3.1 解析法
采用分析技术,假定计算机系统参数与性能指标参数之间存在某种关系,按工作负载的驱动条件列出方程,用数学方法求解直接得出系统的性能。解析法采用的公式还是很完善,需要假设系统处于一系列理想状态,一般用在系统的设计阶段,结论的正确性需要经过测量方法的验证。使用解析法,进行系统的性能评价,需要完备的性能评价模型。这方面,由于设计的层次(板级设计、芯片级设计、系统级SoC设计等)不同,需要建立的评测模型也各不相同。往往会有面积的评测模型、功耗的评测模型等。
3.2模拟法
按照被评价的系统的运行特性建立一个系统模型,按照系统可能有的工作负载特性,建立工作负载模型并编制出模拟程序,在被评价系统上运行模拟程序,并通过在其他的系统上运行这一模拟程序,通过程序在不同系统运行获得的性能参数对比,就可以得出设计的优劣。模拟法也用于系统的设计阶段。软件模拟的方法,往往会带来的误差,建立的工作负载模型不可能对结果具有相接的影响,使得这一方法得到的结果往往不能如实地反应系统设计的真实性能。
3.3 测量方法
测量技术是对投入运行的现有嵌入系统进行直接测量,因此它的结论是真实、精确和可信的。分析、模拟技术是基于对以前的测量结果积累归纳得来的,所以说测量是最基本的评价技术。测量方法需要相应的系统测试环境与工具,这样的测试组成,可能是专门的测试硬件设备、软件及相应的计算机检测系统。
测量方法要求得出精确的数值,就需要从概念上和具体的结构上对待测系统进行大量的分析,设计专门的测量工具,根据需要考虑的因素和环境,进行多次的反复测量并统计分析测量的结果,因此这一方法也是比较耗时的。
4嵌入式计算机的性能测试原理及测试环境构成
4.1 性能测试原理
嵌入式系统由硬件子系统和软件子系统2部分组成。硬件子系统包括微处理器内核、高速缓存、存储器、外设接口等,这些逻辑功能部件通常集成在一个嵌入式处理器(Embedded Processor)中。软件子系统包括嵌入式操作系统(RTOS)、中间件(Middle Ware)、嵌入式编译器(Compiler)和运行库(Runtime Library)等。嵌入式应用程序的可执行代码通常包括3部分:编译应用程序生成的目标代码、链接程序从运行库中提取的库例程代码和操作系统功能调用。一个嵌入式应用程序(Application)的执行时间(Execution Time)受上述多种因素的影响,可用以下函数描述:
Execution Time(Application)=f(EProcessor,RTOS,MiddleWare,Compiler,Library)
上述函数的5个参数中,改变其中1个参数,保持其余4个参数不变,进行性能测试,收集测试结果并进行对比分析,可实现整个嵌入式系统和关键构件的性能测试。主要测试项目的测试方法如下:
(1)改变Embedded Processor,保持其他参数不变,并比较测试结果,可以评测不同嵌入式微处理器的性能差异;
(2)改变RTOS,保持Processor不变,以评测不同RTOS的性能差异;
(3)改变Compiler,保持其他参数不变,可评测嵌入式编译系统编译优化能力;
(4)改变Library,保持其他参数不变,可以评测不同运行库的性能;
(5)比较两个个嵌入式平台的性能指标,可以评测二者的性能差异;
(6)将执行测试基准程序获得的性能指标与嵌入式应用要求的性能指标进行比较,可以评测嵌入式系统性能是否满足应用需求。
4.2性能评测环境
嵌入式系统性能评测环境,通常包括用于嵌入式系统评测的测试主机和将要被测评的嵌入式系统,基本结构如图1所示。
测试主机运行测试管理控制程序,控制性能测试过程的执行,编译、加载和启动性能测试基准程序,收集性能数据,分析测试结果,生成测试报告。被测评的嵌入式系统则运行下载的测试基准程序,测定和采集性能数据,并通过测试代理反馈给测试主机。两者之间通过某种连接(如串口、以太网等)方式,进行数据的通信与交互。
4.3性能测试过程
建立好测试环境后,性能测试过程描述如下:
(1)用户确定测试项目、选择性能测试基准和被测嵌入式平台,测试管理控制程序建立测试主机与被测嵌入式系统之间的通信连接、启动测试;
(2)测试管理控制程序选择,设置编译优化选项,选择测试环境构件,调用嵌入式编译器编译基准测试程序;
(3)通过测试代理,将测试基准程序下载到被测嵌入式系统,并控制完成基准测试程序的运行;
(4)性能数据采集代理监视基准测试程序的执行,测试和采集与性能指标相关的性能数据;
(5)测试代理将测试结果和性能数据发回测试主机;
(6)测试管理控制程序调用性能分析程序,分析和处理测试结果和性能数据,生成测试报告。
5性能基准程序测试方法
在计算机设计中用到的性能基准程序,是以单个某一领域典型的一个计算任务或者一组计算任务采用某种语言编写的程序的形式出现,它可以用来度量计算机系统或构件性能的在某一领域的典型计算性能。用来进行性能评测的基准程序,可以称为工作负载。在基准程序中,必须明确规定所选用的基准程序及其特性、运行方式,并规定评估指标体系。一般需要重复多次运行基准程序,对获取的性能指标进行统计分析后,才能获得有意义的评测结果。
性能基准程序评价法是采用软件的方法评测系统的性能,其较高的灵活性、较低成本加上易于在线实现的特性,使这一方法成为普遍流行的评测方法。但是通过软件得到的测量结果精度较低,并且执行基准程序会影响系统的性能,进而影响结果的可靠性。基于软件任务的软件方法,进行测试时,不可避免地占用到系统上的有限资源,所以干扰度大、精度低、分辨率低,但是同时,具有灵活性高、成本低、安装使用方便的特点。这一方法,不适用于测量精度要求很高的系统参数。在构建测量工具环境时,应发挥软件测量的优势,注重于功能的测试,考虑选用实际的应用程序或与它们功能相同的专用测试程序。这样,可以弥补硬件方法所不能解决的问题缺点。
性能基准程序测试系统性能的常见方法有:时钟频率、指令执行速度、等效指令速度方法、核心程序法、综合程序法、应用程序法等。时钟频率、指令执行速度、等效指令速度法属于计算机发展初期阶段常用的手段,随着计算机系统复杂性的提高,这几类方法不能反映系统的整体性能;核心程序法、综合程序法占用内存空间较小,在有Cache的系统中只能测量系统的CPIJ性能。
用于计算机性能评测的基准程序法可以分为两种:测量系统级参数(如响应时间、上下文切换时间等)的微观基准程序,以计算任务提供的工作负载、通过工作负载的运行得到待测系统宏观方面参数(如任务执行时间)的宏观基准程序。以被测试对象来对基准程序分类,经常把性能基准程序分为通用性能基准程序与实时性能基准程序,通用性基准程序针对一般的计算机系统,实时性能基准程序针对实时系统,测量系统的实时性能。
从系统角度看,一个嵌入式系统的主要构件是微处理机、操作系统和应用软件(包括开发工具)。这样,嵌入式系统的性能基准程序可分为如下3类:
(1)面向微处理机的基准程序,主要是为了帮助设计人员合理地选择嵌入式微控制器、通用微处理机或DSP;
(2)面向操作系统的基准程序,帮助设计人员了解操作系统的量化性能指标;
(3)面向专门应用的基准程序,帮助设计人员确定最终目标系统的性能。在嵌入式系统中,由于面向微处理机的基准程序和面向操作系统的基准程序极大地依赖于应用领域,因此,面向专门应用的基准程序相对来讲用的就比较少。这一方面,在嵌入式系统的应用与设计越来越成熟的情况下,会在不久的将来有所改变。
5.1通用性能基准程序
5.1.1 SPEC
SPEC(the Standard Performance Evaluation Corporation)是为了建立、维护并许可一组被标准化的相关的性能基准程序的非盈利性组织,该组性能基准程序主要用于评测最新的高性能计算机,以对VAX11/780机的测试结果作为基数,其他计算机的测试结果以相对于这个基数的比率来表示。SPEC性能基准程序分为CPU、高性能计算、图形应用、Java客户/服务器、邮件服务器、网络文件系统、网站服务器几大类。
CPU2000是SPEC中测量CPU功能的最新版性能基准程序组,目的是为不同计算机系统计算密集型的工作负载提供性能评估的测量工具,SPEC CPU 2000包含2组性能基准程序:CINT2000测量比较计算密集型定点运算,CFP2000测量比较计算密集型浮点运算。最新版本为CPU2000 V1.3。CPU2000为被测系统提供性能参数,主要测量系统的处理器、内存以及编译器性能。
5.1.2 TPC
TPC(Transaction Processing Council)成立于1988年,已有40多个成员,TPC系列基准是现在流行的商业基准组,主要服务器和数据库企业都派代表加入了这一组织,用于评测计算机的事务处理、数据库处理、企业管理与决策支持等方面的性能。TPC不给出基准程序的代码,而只给出基准程序的标准规范(Standard Specification)。任何厂家或其他测试者都可以根据规范,最优地构造出自己的系统(测试平台和测试程序)。1989年以来相继发表的TPC基准测试程序包括TPC-A,TPC-B,TPC-C,TPC-D,TPC-W,TPC-R和TPC-H等。其中TPC-A用于在线事务处理下更新密集的数据库环境下的性能测试,TPC-B用于数据库系统及运行它的操作系统的核心性能测试,TPC-C则用于在线事务处理测试。有2种评价指标:吞吐率(Throughput,tpmC)、性价比(Price/Perform-ance,Price/tpmC)。tpmC定义:TPC-C的吞吐量,按有效TPC-C配置期间每分钟处理的平均交易次数测量,至少要运行12 min。TPC-D用于决策支持系统测试,TPC-H是基于TPC-D基础上决策支持基准测试,TPC-W是用于电子商务应用软件测试。
5.1.3 Whetstone
它是用FORTRAN语言编写的综合性测试程序,主要包括浮点运算、整数算术运算、功能调用、数组变址、条件转移、超越函数,测试结果用单位Kwips表示,1Kwips表示机器每秒钟能执行1 000条Whetstone指令。在实时性能基准程序Hartstone中被调用。
5.1.4 Lmbench
Lmbench性能基准程序通过运行大量的程序,测试大多数公认的有可能成为性能瓶颈的重要参数,这些参数通过几组微观性能基准程序加以识别、分辨,而且是可重现的。Lmbench中主要测量的参数是处理器、内存、网络、文件系统与硬盘之间的系统延时与数据通路带宽。Lmbench仅测量处理器、内存、网络、文件系统与硬盘之间传送数据的能力,清楚地描述时间延时与数据通路带宽方面的各种参数,Lmbench中的各个性能基准程序组作为测量系统性能的补充常用于测量系统相应的延时与带宽。
5.2嵌入式系统设计中的实时性能测试基准程序
5.2.1 Rhealstone
Rhealstone性能基准程序是一组由6个C语言程序组成的程序集,通过这6个程序测量实时操作系统的7个微观参数:上下文切换、抢占时间、中断延迟、信号量混洗时间、死锁解除时间、信息传递延迟、数据报吞吐时间。Rhealstone性能基准程序有2个缺点,一是它测量的是平均时间,而不是最坏值;二是其最后的结论是加权平均值,但没有给出确定权值的依据。
5.2.2 EEMBC
EEMBC(Embedded Microprocessor BenchmarkConsortiurn)性能基准程序采用具有代表性的真实应用中的基本算法与功能函数,目的是为不同嵌入式计算机提供评价性能的参数。最新的EEMBC性能基准程序涵盖7类应用领域:电信、电子产品、网络、办公自动化、自动化与工业控制、数字娱乐、车载系统与Java,后两类是新加入的。EEMBC性能基准程序属于商用性能基准程序,参照EEMBC的设计思路,源代码公开的Mibench分为6类,较多的用于学术研究领域。
5.2.3 Hartstone
Hartstone性能基准程序由美国Carnegie Mellon大学用Ada语言编写,是依据需求构成的一组合成应用,选用Whetstone性能基准程序作为合成工作负载,目的是测量硬实时系统。Hartstone性能基准程序需要不同测试序列,每个测试序列中的测试结果只有2种情况:满足或者不满足时间限制。若任一个程序不满足时限,那么测试结论就是“不通过”。共有5种测试序列:任务周期有规律的周期性任务、任务周期无规律的周期性任务、任务周期有规律但非周期性处理的周期性任务、任务周期有规律有同步的周期性任务、任务周期有规律有同步但非周期性处理的周期性任务。
现有的性能基准程序从构建方法上来看,有的通过应用类别选取典型应用构建工作负载(如SPEC,EEMBC,Mibench),这类性能基准程序可进行功能测试,也可根据系统表现计算系统的性能,该类性能基准程序属于宏观性能基准程序,随着应用领域的增多,需要不断扩充;有的通过测量影响系统性能的重要参数(如Rhealstone,Lanbench等),该类性能基准程序属于微观性能基准程序,但是现阶段影响系统性能的重要参数数量多,相互影响的程度,对系统性能影响的程度,很难给出量化的指标,所以该类性能基准程序很难对测量结果给出合理的解释;有的针对典型应用,不仅选用典型的工作负载还是用根据程序被调用的频度,模拟真实的工作负载,(如TPC,Hartstone等),该类性能基准程序能够从宏观上观察系统在模拟工作负载下的表现,具有较高的实用价值,构建该类性能基准程序的难点在于如何真实地反应系统的实际工作负载。
5.3嵌入式系统的系统级高层次设计测试基准程序
随着电子系统设计的自动化程度提高,应对嵌入式系统设计复杂性增加,并加快系统设计的速度,采用一系列的设计技术,如基于IP复用的设计技术、软硬件协同设计技术、高层次的系统级建模与设计技术等。随着嵌入式计算机的设计进入到SoC的设计时代,将一个嵌入式系统的软件、硬件子系统在系统级的体系结构优化、划分后,使用硬件描述语言和软件开发语言分别设计出嵌入式系统的硬件组成部分和软件组成部分。嵌入式计算机设计到了SoC设计时,同时意味着嵌入式计算机的设计进入到了系统级的设计时代。对于SoC这种系统级的嵌入式系统设计,涉及到系统软/硬件结构组成结构的优化、系统在总体设计体系结构上的优化,在不同设计目标(成本、面积、功耗、性能等)方面的总体折中平衡。在系统级设计的早期阶段,也出现了一些相应的测试基准程序,以辅助系统设计在系统级能确定出一个相对较优的系统结构。
E3S就是Princeton大学的CAD研究项目中用于进行嵌入式系统级设计过程中,进行系统级综合(System Level Synthesis)的设计测试基准程序。E3S,依据嵌入式微处理器测试基准(Embedded Microprocessor Benchmark Consortium,EEMBC)中对嵌入式微处理器和用来测试的计算任务信息的测试基准程序而设计的用于系统级综合设计测试基准。它主要用于在嵌入式计算机系统的系统级设计中,对系统级综合设计所涉及到的3个过程:系统级任务的分配(Allocation)、指派(Assignment)、调度(Scheduling),提供测试的基准。目前的最新版本是V0.9版,可以对17种微处理器,像AMD ElanSC520,Analog Devices 21065L,Motorola MPC555,TI TMS320C6203等进行测试。测试的数据,像处理器的性能以47个典型计算任务的执行时间度量,功耗数据则参照处理器的设计文档(Datasheets),另外,提供给系统级综合工具的附加测试信息,如硅片尺寸以及其他用于系统级综合评估(Estimated)的数据和价格(Prices),则通过咨询多个处理器提供商取得。另外,E3S包含着相应的系统级通信模型,用于系统级设计过程中的测试基准程序对多种不同总线,如CAN,IEEE1394,PCI,USB 2.0,VME等进行建模和评测。
6结 语
随着嵌入式计算机设计技术的发展,可复用IP核与基于平台的设计技术应用于当今的嵌入式计算机设计中,需要在早期的设计阶段就要对嵌入式计算机的硬件子系统、软件子系统与软硬件集成后的系统原型进行早期的性能评价,目前在国外,已经应用于早期设计阶段的系统级性能评测技术与方法出现。测试的技术与设计技术的成熟度同比发展,随着设计技术的发展,相应的测试技术也需要有相应成熟的测试例程、特定应用领域的测试基准程序来作测试评测的标准。可以预见,在未来几年里,测试基准程序和针对嵌入式计算机设计的性能测试基准程序,将会在系统设计过程中的更早阶段——系统级构架优化与性能测度方面,取得很大的发展。