摘 要:通用计算机系统由于其价格低廉、高运算功能等特点,已经被广泛应用于工业生产、汽车控制、航天导航等实时领域。但是,通用计算机系统的设计目的是为了取得更高的平均功率;其处理器结构和硬件加速机制会对系统的实时特性造成一定的影响。本文分析了新型NUMA(非均匀存储器访问)结构多处理器系统的配置情况,在此基础上讨论了NUMA结构对于系统实时特性的影响,给出了实时性能的测试方案和测试结果。
关键词:实时性能;多处理器系统;HyperTransport;NUMA;TSC;节点
引言
---近年来,计算机技术不断发展,处理器的性能也不断提高,但是性价比却差强人意,如Xeon处理器,时钟频率每提高7%,相应的价格就要上涨40%。因此许多企业采用多处理器的方式来提高系统性能,作为服务器来支持多任务多线程并行的工作需要,出现了如SMP(对称多处理)、MPP(大规模并行处理)和NUMA等多种多处理器结构,其中NUMA结构以其模块可扩展化正得到越来越广泛的应用。如何将多处理器系统应用于实时系统中,正成为目前研究的热门。本论文基于笔者在德国慕尼黑工业大学实时系统研究中心所从事的德国国家研究中心RECOMS项目,系统地分析了NUMA结构的配置情况,以及其对整个系统实时特性的影响,并给出了相应的测试方案和测试结果,进一步证明了NUMA结构用于实时系统的可行性,开创了实时系统研究的新方法。
1 NUMA结构系统及其配置
1.1 HyperTransport 技术
---随着处理器、存储器、图形技术等不断发展,系统内部大数据流的传输成为一种必然趋势。处理器的性能每18个月就能提高一倍,而I/O总线技术的性能每3年才能提高一倍,由此带来的I/O瓶颈问题大大限制了系统整体性能的提高。鉴于此种情况,AMD和API Networks公司合作开发了HyperTransport总线连接技术来代替传统的PCI、PCI-X等总线模式,提高总线的带宽以达到提高系统整体性能的目的。
---HyperTransport技术由数据路径、控制信号以及时钟信号组成点对点单向链路,每一条数据路径都可以选择2、4、8、16或者32位的带宽;命令、地址和数据共用数据路径,同时由数据路径、控制信号和时钟信号组成链路。HyperTransport采用的是差动式的数据传输方式,即每一位都是由两条传输线之间的压差来确定其值,当A线电压高于B线时为“1”,反之为“0”。 HyperTransport总线的运行电压仅为1.2V,满足了高速数据传输对低工作电压的要求。因此,相对于其他I/O技术,HyperTransport技术极大地提高了总线的带宽,传统的PCI总线的传输速率为133M/s, 扩展的PCI-X的带宽为1G/s,Intel的InfiniBand最高带宽为4G/s;而HyperTransport总线单向传输速率为6.4G/s,是传统PCI的50倍。因此,HyperTransport总线技术被广泛应用于多处理器系统等大数据量传输系统以最大限度地提高带宽和缩短响应时间,如NUMA结构多处理器系统,HyperTransport技术的应用方式如图1所示。
1.2 NUMA结构多处理器系统的实现和配置
1.2.1 NUMA系统的基本结构
---传统的处理器系统采用南北桥机制实现处理器和内存以及外设之间的数据传输。其中,南桥主要负责I/O接口以及IDE设备的控制,南桥通过总线和北桥连接;北桥是主板上离CPU最近的一块芯片,负责CPU与PCI设备、Cache以及内存控制器之间的连接。NUMA结构中采用HyperTransport的Hostbridge和I/O Hub分别代替了传统的北桥和南桥,实现了和南北桥相同的功能,但是却大大提高了数据传输速率。图1中显示了NUMA结构的基本构架;节点是构成NUMA系统的基本单元,所谓节点就是指距离每一个CPU具有相同距离的一片存储区域,节点由CPU以及相应的Hostbridge和存储系统构成,该CPU对于该节点中的存储区域中的每一个字节具有相同的访问权限。图1中显示了具有4个节点的NUMA多处理器结构,每个节点分别由各自的Hostbridge负责节点内部连接和各节点之间的联系。
---4个节点即存在4个不同的数据存储区域,NUMA结构的独特之处就在于对于不同区域的存储器的访问权限;在SMP系统中,各个处理器共享同一块存储区域,各处理器权限相同,这样也就增加了CPU间对共享内存BUS的竞争,降低了系统效率。NUMA结构中每个CPU都带有本节点的独立内存,CPU不但可以访问本地内存(Local Memory)还可以访问其他节点的内存(Remote Memory),这样不但减少了总线竞争,同时提高了大容量数据的存储要求。但是,各CPU对本节点内存具有优先访问权限,对其他节点的访问权限次之。
1.2.2 NUMA结构的配置
---NUMA结构中存在多个节点,操作系统在进行调度的时候是如何区分各节点的CPU和Hstbridge以及存储器呢?在支持NUMA系统的主板BIOS中存在一段固化程序,系统启动时该程序运行,以完成对包括内存、CPU、HyperTransport总线等的配置工作;会为每一个CPU、Memory、Hostbridge指定不同的ID,以便于操作系统调度和应用程序使用。每个节点的Hostbridge中存在若干“存储系统配置寄存器”(Memory System Configuration Register),每个寄存器用来配置一项系统参数。按照其功能可以分为4类寄存器:
---Function 0:HyperTransport technology Configuration;通过设置此类寄存器可以指定该节点的CPU的ID以及Hostbridge的ID。
--Function 1:Address map Configuration; 通过设置此类寄存器可以设置本节点的Memory的范围,这样可以实现整个Memory系统地址的连续性和互异性。
---Function 2:DRAM Configuration;通过此类寄存器可以设置该节点的DRAM的特性,如容量、类型、厂商等。
---Function 3:Miscellaneous Configuration;其余功能的配置寄存器。
---BIOS通过读写两个辅助寄存器来实现对存储系统配置寄存器的读写,第一个辅助寄存器为配置地址寄存器(Configuration Address Register),通过此寄存器来选定欲读写存储系统配置寄存器;
---EnReg: 存储系统配置寄存器访问的使能位;
---BusNum:指定配置地址的总线序号,对于内部节点系统都为Bus 0,对于I/O外设则为Bus 1;
---DevNum:指定配置地址的设备号,其中默认设备号24至31分别对应节点0至节点7;
---FuncNum:指定配置寄存器的分类组别;
---RegNum:指定该组中的一个配置寄存器;
---此地址辅助寄存器的地址为0CF8H,通过设置本寄存器BIOS就选定了一个欲配置的存储系统配置寄存器,然后将要写入该配置寄存器的内容如CPU的ID等放入另一个地址为0CF8H的数据辅助寄存器,即完成了对节点的设置。
1.2.3 多处理器系统的启动过程
---NUMA结构多处理器系统中总有一个CPU通过HyperTransport Link连接到HyperTransport I/O Hub,执行启动时,此CPU被初始化并作为Bootstrap processor(Bsp)使用,而其余处理器被作为Application Processor使用。Bsp从内存地址OXFFFFFFF0处开始执行启动程序,先后完成AP的检测、HyperTransport设备的初始化,带宽和频率的初始化以及所有节点的内存控制器的初始化和内存地址的初始化。在此过程中,AP的请求无效位(Request diable bit)首先被置1,AP的运行请求无效;等Bsp完成了AP探测任务之后将该位清零,AP就跳到OXFFFFFFF0处执行启动代码,直至整个多处理器系统启动完毕。
2 NUMA构架中实时特性影响因素分析
2.1 多处理器结构对于实时特性的影响
---NUMA结构中,一个节点的CPU不但可以访问本地存储器,而且可以访问位于其他节点的远程存储器,但是访问不同存储器的时间不同,所以称为非均匀存储器访问系统。如图1中所示的1、2、3三条存储器访问路径,CPU对于存储器的控制要通过Hostbridge中的内存控制器来完成,然而路径的长短各异,对于远程节点的访问要通过不同节点的Hostbridge之间的通讯来实现;所以在NUMA结构中,当节点1的CPU要访问节点2或3的存储空间时必须通过节点2或3的Hostbridge来完成,当然欲访问更远的节点4的存储空间,更要跨越两个Hostbridge以及相应的总线系统,这样必然会带来一定的延时。所以,当数据或者程序存储在不同的内存区域时,其读写时间各异,这就是NUMA系统多处理器系统本身给系统实时特性带来的影响。
2.2 硬件加速机制的影响
---现代处理器都采用了硬件加速机制来进一步加快系统运行效率,这些机制加快了数据和程序的读取速率,但是也增加了一定的不稳定因素,如Cache、TLB、Pipeline等,其中影响最大的是Cache。Cache是位于CPU与内存之间的临时存储器,容量小于内存但数据交换速度快,Cache中的数据是内存中的一部分,是CPU经常调用的数据和指令;Intel将Cache分成一级缓存(L1 Cache)和二级缓存(L2 Cache),L1 Cache一般集成在CPU中称为片内Cache,并分成I-Cache和D-Cache,分别存放数据和执行这些数据的命令。CPU读取数据或指令时,先从Cache中查找,如果找到就立即读取该数据或指令并执行之,这种情况称为Cache hit;相反,如果在Cache中找不到该数据,就用相对慢的多的速度从内存中读取,同时把这个数据所在的数据块调入Cache中,可使得以后对整块数据的读取都从Cache中进行,以提高速率。显而易见,Cache hit时的访问时间要明显的短于Cache miss时。
---TLB是Translation-Lookside Buffer的缩写,相当于一个页面转换的Cache;在TLB中存储了最近从虚拟地址到物理地址转换过的页表项(Page table entry),系统进行地址转换时会对其进行搜索,如果该表项存在于TLB中,则直接读取之,如不再,则对其进行转换并将转换结果存储在TLB中,所以当TLB有效和无效时会对系统的运行时间产生一定的影响。
---上述的影响是系统硬件结构带来的主要影响;当操作系统运行时也会对实时性能产生一定的软件影响,如程序上、下文切换的时间,中断程序调用的延时,以及系统运行调度时产生的延时。本文主要研究硬件结构对实时特性的影响以及相应的测试方法。
3 测试方案
---图2中显示了实时特性测试方案以及软件流程,其中TSC是“Time Stamp Counter”的缩写,AMD的Opteron中提供这样一个64位用来记录当前的时钟周期数,其值乘以CPU的时钟周期即为处理器所记录的当前时间;每次处理器启动的时候将其清零,然后每个时钟周期TSC的值加1,这样在一段固定代码执行前后分别读取TSC值(测量点1、2)即可得到代码执行的周期数,以便十分精确地计算其代码执行时间:
---T=(TSC1-TSC2)·cycle
---另外,在测试程序中设置测试环境的各种参数,如图2所示的测试程序执行流程。首先做串行化处理,保证代码按照原始设计意图被执行,防止由于Pipeline的存在而打乱执行顺序;接下来读取TSC寄存器的值,然后设置Spinlock,即为经常用到的旋转锁功能,在多处理器系统中当一个CPU执行一段程序时采用旋转锁功能来封锁当前代码,防止被其他CPU读取并改动造成数据不一致性;随后读取TSC的值,并使TLB无效以确保Cache对于实时性能的惟一影响;之后设置Cache的状态,即清空Cache以产生Cache miss状态,或者不对Cache做任何操作,保证Cache hit的可能性;随后进一步做指令串行化,并释放旋转锁解除本代码对其余处理器的封锁;最后记录TSC的值以确定当前时间。
---该测试在Linux操作系统中完成,将测试流程模块插入Linux内核中运行以提高其优先级和测试精确性;同时将每次的测试结果在用户空间保存起来,并用Linux所提高的gnuplot工具将其图形化显示出如图3所示的图表。
4 测试结果分析
---图3.1、3.2、3.3分别显示了本地存储器访问和远程存储器访问时间的测试结果;其中如图1中所示,选择节点1作为本地节点,将节点1的CPU激活,则其对于节点2、3、4的访问即为远程存储器访问;其中,节点2、3的相对位置相同,而节点4则处于最远端,对其存储器的访问路径最长。
---实验中,我们采取了向不同存储区域写入10M相同大小数据量的方法来测试其访问时间,并对每次实验做4000次重复以统计其结果。显而易见,本地存储区域的访问时间最短,平均为5750.6μs;而对于远程存储区域的访问则耗时较长,其中节点2、3的访问时间平均达6488.6μs,而最远的存储区域访问时间更长,达7612.3μs,这些结果显示了NUMA结构多处理器系统本身构架对于系统实时特性的影响。另外,我们在本地存储区域的访问时间测试时,考虑了Cache对于系统响应时间的影响;可以看到,大部分较小的测试结果比较集中,位于5750μs左右,这表示CPU直接从Cache中读取数据(Cache hit)时的响应速度较快;而另外一小部分分散的测试结果显示了Cache中不存在CPU要求的数据,转而从主存中读取数据(Cache miss)的响应时间。
---通过本论文的实验,我们可以看出NUMA结构多处理器系统完全可以适应实时任务的要求,但是不同情况下其响应时间也不尽相同。实际的实时任务其代码都较小,一般情况都是控制各种控制系统的周期开关量;所以当NUMA结构用于实时系统中时最科学的办法是,区分各个处理器的功能,将其分为运行通用操作系统如Linux的处理器以及运行实时进程的处理器。然后,将实时进程的执行代码锁存在实时处理器的Cache中,这样必然会取得最好的实时效果,进一步缩短响应时间,更好地满足系统的实时要求。
5 结束语
---随着控制精度和复杂性的不断提高,对于系统实时特性的要求成为必然趋势。通用计算机系统以其低廉的价格和较好的平均功率而被广泛应用于各个实时领域。NUMA结构多处理器系统以其节点可扩展性,进一步提高了系统的性能,开拓了多处理器系统新的发展方向;同时当NUMA结构多处理器系统应用于实时系统中时,也不可避免地会对系统的实时特性造成一定的影响。本文通过实验分析了NUMA体系结构对于系统实时特性的影响。