多处理器多线程软件性能优化

文章描述:-2022年4月14日发(作者:卢炽辉)多处理器多线程软件性能优化——JAWS框架案例分析摘要:随着应用软件日趋复杂,对性能的要求不断提高,多处理器技术成为服务器技术的重要技术支点。然而,多处理器需要有操作系统、编译器以及应用软件架构和工具的支持,否则根本达不到性能提升的目的。本文以JAWS框架为例,首先讨论如何通过通讯模式优化和多处理器优化,提升基于JAWS框架的通讯服务器在多处理器平台下的性能

-

多处理器多线程软件性能优化
2022年4月14日发
(作者:卢炽辉)

多处理器多线程软件性能优化

——JAWS框架案例分析

摘要:随着应用软件日趋复杂,对性能的要求不断提高,多处理器技术成为服务器技术的重

要技术支点。然而,多处理器需要有操作系统、编译器以及应用软件架构和工具的支持,否

则根本达不到性能提升的目的。本文以JAWS框架为例,首先讨论如何通过通讯模式优化和

多处理器优化,提升基于JAWS框架的通讯服务器在多处理器平台下的性能;然后介绍一个

基于JAWS框架开发的多播服务器的性能测试环境,通过对性能测试结果进行分析,研究软

件架构对多处理器平台下软件性能的影响。

关键字:多处理器多线程性能优化JAWS

1引言

回首处理器的发展历程,并行技术从指令级的超标量发展到线程级的超线程或者并发多

线程,再到今天处理器级的多内核,总的趋势都没有改变。随着科学计算、政府的大型数据

库管理系统、数字医疗领域、通讯、金融、大型企业的ERP、CRM等应用软件日趋复杂,

对性能的要求不断提高。如目前的通讯服务器应用,在功能不断增强的同时,还要求更高的

吞吐率和更多的用户容量。无论是需求推动技术,还是技术激发了新的需求,多处理器技术

已经成为服务器技术的重要技术支点。然而,多处理器需要有操作系统、编译器以及应用软

件架构和工具的支持,否则根本达不到性能提升的目的;如果使用多处理器运行单线程软件,

性能方面不会得到提升。

本文以JAWS框架为例,讨论在软件架构层面上的上多处理器优化技术,并建立性能测

试环境,通过对性能测试结果进行分析,研究软件架构对多处理器平台下软件性能的影响。

JAWS是一种高性能和自适配的、实现了HTTP协议的Web服务器。它还是一个平台

无关的应用构架,其他类型的通信服务器可以通过它来构建。

JAWS被构造为

框架的框架

(frameworkofframeworks)。整个JAWS构架含有以下组件

和构架:

并发框架

(ConcurrencyFrameworks)、

事件框架

(EventFrameworks)、I/O

事件

(I/O

Events)、定时事件(TimingEvents)和

协议框架

(ProtocolFrameworks)。各个框架都被构

造为一组使用ACE中的组件实现的协作对象。

本文组织如下:第2节描述JAWS框架的通讯模式优化;第3节描述在通讯模式优化基

础上进行的多处理器优化;第4节描述测试环境及测试结果分析;第5节是结束语。

2通讯模式优化

典型的客户/服务器系统采用简单的同步通讯模式:服务器等待客户端发送一个完整的

请求消息,处理该请求,然后向客户端发送响应消息。当客户端发送完请求消息,但未接收

到服务器的响应消息之前,客户端不会发送下一条请求消息。这种通讯模式容易理解和实现,

然而存在效率低的缺点。当服务器因为某种资源的缺乏而导致消息处理过程被阻塞时,客户

端却不能发送其它服务器可以并发处理的请求。这种典型的客户/服务器系统包括HTTP、

SMTP、POP、FTP等传统的通信系统。

为了提高服务器吞吐量,一些系统支持采用异步通讯模式:发送请求消息之前,客户端

为每一条请求消息设置一个唯一的编号。发送完请求之后,客户端可以不用等待服务器的响

应消息而接着发送下一条请求消息。服务器接收到客户端的请求消息后,可以根据资源的紧

急情况,合理调度请求消息的处理顺序。当完成一条请求消息的处理之后,在响应消息中设

置相应的消息唯一编号,然后发送给客户端。一些现代的通讯系统(如IMAP、SIP等)都

支持类似的机制。

如果换个角度(程序的应用层与I/O层之间的交互)分析同步通讯模式和异步通讯模式,

则它们之间的区别表现在:(1)对于同步通讯模式,任意时刻应用层与I/O层之间最多存在

一个读或写的I/O调用;(2)对于异步通讯模式,同一时刻应用层与I/O层之间可能同时出

现读和写操作的I/O调用。

JAWS框架支持多种I/O模式,包括SynchI/O,ReactiveI/O和AsynchI/O。其中Reactive

I/O是最常用的I/O模式。ReactiveI/O模式(如图1)采用ACE_Reactor单件来注册、处理

所有的I/O事件,而ACE的Reactor模式实现限制:同一个句柄在同一个时刻只能注册一个

事件处理器(ACE_Event_Handler)。对于JAWS框架来讲,意味着同一时刻,协议状态机

只能发起一个I/O操作(读或写)。这些限制导致基于JAWS开发的通讯服务器无法实现异

步的通讯模式。

{一个句柄(ACE_HADLE)最多同时注册

一个事件处理器(ACE_Event_Handler)}

<>

ACE_Reactor

注册

ACE_Event_Handler

注册

ACE_HADLE

JAWS_IO_Reactive_Handler

JAWS_IO_Reactive_Read_StreamJAWS_IO_Reactive_Write_Dgram

图1JAWS框架ReactiveI/O模式

解决JAWS框架上述问题的办法是分别实例化一个用于读操作的ACE_Reactor对象

readReactor和一个用于写操作的ACE_Reactor对象writeReactor(如图2)。所有的读操作都

注册到readReactor;而所有的写操作都注册到writeReactor。通过上述优化,我们实现了基

于JAWS框架的异步通讯模式。

ACE_Reactor

ACE_Event_HandlerACE_HADLE

JAWS_IO_Reactive_Handler

JAWS_Reactor_Manager

+readReactor()

+writeReactor()

JAWS_IO_Reactive_Read_Stream

注册

JAWS_IO_Reactive_Write_Dgram

注册

readReactor:ACE_ReactorwriteReactor:ACE_Reactor

图2JAWS框架通讯模式优化

通过在双CPU平台下的性能测试,我们发现经过优化的JAWS框架比未优化以前的

JAWS框架提升性能10%左右。

3多处理器优化

对于传统的通讯软件,服务器端应用层逻辑通常是循环在所有的TCP连接上接收客户

端请求消息,然后处理该请求,返回响应消息。还有一类通讯软件(如应用层多播软件、会

议服务器及应用网关等)的应用层逻辑则更加复杂,通常在一个TCP连接上接收消息后,

服务器需要进一步将处理后的消息转发到多个其它的TCP连接。这类的通讯软件往往存在

读操作与写操作频率相差悬殊的特点。这种情况下,如果为负责读操作和写操作的Reactor

对象分配同等数量的CPU,则无法充分利用多CPU硬件平台。容易出现部分CPU非常繁

忙,而其它CPU经常出现空闲的状况(如图3)。

处理写事

件的线程

处理读事

件的线程

空闲处理

CPU

占用

100%

CPU

占用

50%

CPU

占用

0%

空闲处理

CPU

占用

0%

总线

共享内存

I/O

图3多处理器平台CPU占用示例

解决上述问题的办法是设计读和写Reactor对象池,每个Reactor对象拥有独立的线程。

根据读/写操作的频率以及CPU的数量确定Reactor对象池中读Reactor对象和写Reactor对

象的个数。同时读/些操作按某种规则均衡地分配到特定的Reactor对象。如图4所示,如果

某通讯服务器的读/写操作频率比是1:3,该服务器在一个4CPU的硬件平台上运行,则可以

初始化3个负责写事件的Reactor对象和1个负责读事件的Reactor对象,从而充分利用了

所有的CPU。

处理写事

件的线程

处理写事

件的线程

处理写事

件的线程

处理读事

件的线程

CPU

占用

100%

CPU

占用

100%

CPU

占用

100%

CPU

占用

100%

总线

共享内存

I/O

图4

JAWS框架的多处理器优化实现如图5所示,在第2节优化的基础上,修改

JAWS_Reactor_Manager类,使之维护一个ACE_Reactor对象池。同时修改readReactor()和

writeReactor()方法,使之根据Socket句柄返回相应的ACE_Reactor对象。

ACE_Reactor

ACE_Event_HandlerACE_HADLE

JAWS_IO_Reactive_Handler

JAWS_Reactor_Manager

+readReactor(inhandle:ACE_HADLE)

+writeReactor(inhandle:ACE_HADLE)

JAWS_IO_Reactive_Read_Stream

注册

JAWS_IO_Reactive_Write_Dgram

注册

aReadReactor:ACE_ReactoraWriteReactor:ACE_Reactor

图5JAWS框架多处理器优化

4性能测试与结果分析

4.1测试环境

为了验证上述的优化方案,我们设计了如图6所示的测试环境。其中多播服务器实现了

应用层消息多播的功能,即从一个客户端接收到消息后,将消息进一步转发到多个目标客户

端。其中多播服务器与多播客户端部署在同一个100Mbit局域网内。

多播服务器

100MbitLA

多播客户端多播客户端多播客户端多播客户端多播客户端

图6多播服务器测试环境

为了观察优化前JAWS框架(称为JAWS-B)与优化后JAWS框架(称为JAWS-O)在

不同硬件平台下的性能表现,本测试环境采用了3种不同配置的机器用于运行多播服务器,

如下表所示:

表格1多播服务器硬件与软件平台

测试环境

CPU-1-JAWS-B

多播服务器硬件配置

处理器:P43.0

内存:512M

网卡:100Mbit

处理器:P43.0

内存:512M

网卡:100Mbit

处理器:P43.0*2

内存:512M

网卡:100Mbit

处理器:P43.0*2

内存:512M

网卡:100Mbit

处理器:P43.0*4

内存:4G

网卡:100Mbit

处理器:P43.0*4

内存:4G

多播服务器软件配置

操作系统:LinuxRedHatAS4.0

应用软件:基于JAWS-B框架的

多播服务器

操作系统:LinuxRedHatAS4.0

应用软件:基于JAWS-O框架的

多播服务器

操作系统:LinuxRedHatAS4.0

应用软件:基于JAWS-B框架的

多播服务器

操作系统:LinuxRedHatAS4.0

应用软件:基于JAWS-O框架的

多播服务器

操作系统:LinuxRedHatAS4.0

应用软件:基于JAWS-B框架的

多播服务器

操作系统:LinuxRedHatAS4.0

应用软件:基于JAWS-O框架的

CPU-1-JAWS-O

CPU-2-JAWS-B

CPU-2-JAWS-O

CPU-4-JAWS-B

CPU-4-JAWS-O

网卡:100Mbit多播服务器

测试客户端使用5台PC:硬件配置是处理器:P43.0,内存:512M,网卡:100Mbit;软

件配置是运行LinuxRedHatAS4.0操作系统以及基于Mstone

[4]

框架开发的多播客户端压力

测试程序。

所有的服务器与客户端测试机器都部署在一个100Mbit局域网内。

4.2测试方法

我们使用多播客户端测试程序在5台客户端测试机器上模拟不同并发数量的多播客户

端,其中每10个模拟客户端构成一个多播组。所有的客户端持续向服务器发送消息,并接

收服务器转发过来的消息。多播服务器接收到客户端发送的消息后,立刻将消息转发给同一

个多播组的其它9个客户端。

4.3测试结果分析

我们通过两种技术来分析性能测试结果:黑盒和白盒分析。黑盒分析衡量多播服务器外

部可见的性能指标(如可以通过客户端观察的吞吐量、响应时间等性能指标)。这些性能指

标通过基于Mstone

[4]

框架开发的多播客户端搜集和统计。

为了研究框架优化对多播服务器性能的影响,我们通过白盒分析确定多播服务器的性能

瓶颈,以及框架优化方案如何解决该性能瓶颈。白盒分析的方法是通过一些Linux工具观察

系统的CPU、内存、网络带宽占用。

4.3.1黑盒分析

以下黑盒性能指标分析来自性能测试过程中搜集的结果。这些指标是通过在不同测试环

境下(见表格1),使用不同范围的并发连接数(1000,2500,5000,7500,10000)对多播服务

器进行压力测试而得到的。

服务器吞吐量:本指标测量每秒钟多播服务器转发的消息数量。图7显示了性能测试结

果。对于单CPU的压力测试环境(CPU-1-JAWS-B和CPU-1-JAWS-O),服务器吞吐量相差

不大;对于双CPU的压力测试环境(CPU-2-JAWS-B和CPU-2-JAWS-O),基于JAWS-O的

多播服务器吞吐量大约是基于JAWS-B的多播服务器吞吐量的两倍;对于4CPU的压力测试

环境(CPU-4-JAWS-B和CPU-4-JAWS-O),基于JAWS-O的多播服务器吞吐量大约是基于

JAWS-B的多播服务器吞吐量的四倍。

客户端延迟:客户端延迟定义为从一个客户端开始发送消息到其它9个客户端接收到完

整的消息为止的一段时间。图8显示了性能测试结果。

4.3.2白盒分析

白盒分析结果如图10所示,

5结束语

多处理器多线程技术已经成为微处理器发展的趋势,使用多处理器多线程技术可以使微

处理器的性能得到极大的提高。同时,多处理器多线程技术也为很多应用领域性能瓶颈提供

了新的解决方案。然而,多处理器多线程技术并不像提高CPU主频那样,对程序开发人员是

透明的。为了充分发挥多处理器多线程技术的硬件优势,需要从操作系统、编译器和系统的

软件架构等多方面加以改进。本文以JAWS框架为例,讨论在软件架构层面上的上多处理器

优化技术,并建立性能测试环境,通过对性能测试结果进行分析研究软件架构对多处理器平

台下软件性能的影响。

References:

[1]t,“ACE:anObject-OrientedFrameworkforDevelopingDistributed

Applicati,”inProceedingsofthe6thUSEIXC++TechnicalConference,(Cambridge,

Massachusetts),USEIXAssociation,April1994.

[2]t,"JAWS:AFrameworkforHigh-performanceWeb

Servers,"inDomain-SpecificApplicationFrameworks:FrameworksExperienceBy

Industry,n,Eds.:JohnWiley&S,October1999.

[3]t,“Reactor:AnObjectBehavioralPatternforConcurrentEventDemultiplexing

andEventHandlerDispatching,”inPatternLanguagesofProgramDesign(nand

t,eds.),pp.529–545,Reading,MA:Addison-Wesley,1995.

[4]Mstone,Amulti-protocolstressandperformancemeasurementtool,Moreinformationatthe

URL:/

-

多处理器多线程软件性能优化

发布时间:2022-04-14 09:38:56
文章版权声明:除非注明,否则均为IT技术网-学习WEB前端开发等IT技术的网络平台原创文章,转载或复制请以超链接形式并注明出处。

发表评论

评论列表 (有 10 条评论,274人围观)
重庆橙网V铁粉1 minute ago Google Chrome 93.0.4577.82 Windows 10 x64
P43.0
结肠损伤V铁粉25 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
意味着同一时刻
57xxxV铁粉9 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
所有的读操作都注册到readReactor;而所有的写操作都注册到writeReactor
济南伟东新都V铁粉29 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
CRM等应用软件日趋复杂
武汉友好医院怎么样V铁粉15 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
P43.0*2内存
鸡鸡草V铁粉2 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
然后处理该请求
我也不是大无畏V铁粉24 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
编译器和系统的软件架构等多方面加以改进
低迷V铁粉8 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
我们通过白盒分析确定多播服务器的性能瓶颈
治疗不孕不育症V铁粉25 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
如果为负责读操作和写操作的Reactor对象分配同等数量的CPU

最近发表

随便看看

热门文章

标签列表