RADIUS服务器性能测试软件的设计与实现
2009-10-10
作者:孟小华
摘 要: RADIUS服务器的性能指标及其测试方法,给出了一个RADIUS服务器性能测试软件的设计思想和具体实现技术。
关键词: 性能测试 RADIUS协议 AAA服务器
认证、授权和计费是通信网络的基本功能之一,因此AAA(Authentication,Authorization,Accounting)服务器在电信行业有着广泛的应用,例如窄带IP网、宽带网、固网短信息、移动短信息等。随着电信业务集中化趋势的发展,电信行业出现了百万用户级以至千万用户级的系统,这对AAA系统的性能提出了更高的要求。目前大多数AAA服务器都是基于RADIUS(Remote Authentication Dial In User Service)协议的,因此人们采取很多措施来改进RADIUS系统的性能,或者投入大量人力研制高性能的RADIUS系统。
在AAA系统的建设中,为了选择合适的RADIUS产品和配置适当的硬件设备,人们需要了解RADIUS系统的实际性能。但是对于如何定性和定量地测试及评价RADIUS服务器的性能,至今仍没有一套标准和相应的测试软件。本文中作者对评价RADIUS服务器性能的指标及其测试方法进行了探讨,并实现了一个测试RADIUS服务器性能的工具软件。
1 RADIUS服务器性能测试
1.1 RADIUS协议原理
RADIUS协议是IETF通过的AAA协议标准(RFC 2865),它采用了基本的客户/服务器模式。网络接入服务器NAS(Network Access Server)作为Client向RADIUS服务器提出认证请求,以实现对连接到NAS并请求接入服务的用户(User)进行认证、授权和计费。用户的AAA消息由Client提供给RADIUS服务器,并且根据服务器的授权为用户提供相应权限的服务。RADIUS服务器主要实现对用户的认证并向Client返回必要的配置信息。User与RADIUS服务器之间可以协商采用多种认证方法,RADIUS协议的可扩展性保证了多种认证方法的实现。RADIUS协议通过属性(Attribute)域携带认证、授权以及详细的配置信息可以方便地扩展新的认证方法。在协议中,RADIUS服务器使用Challenge消息与用户实现各种认证过程。RADIUS协议通过代理服务器(Proxy)功能实现漫游接入认证。RADIUS服务器同时兼具Proxy功能,作为前端服务器(Forwarding Server)将来自Client的认证请求转发给远端服务器(Remote Server),然后把来自远端服务器的应答消息回送给Client。每台前端服务器可以有多台远端服务器,同样每台远端服务器也可以有多台前端服务器。远程消息在传输过程中形成一条服务器链,使得远程接入请求得到回应。
1.2 RADIUS服务器性能指标
影响RADIUS服务器性能的因素很多,除RADIUS协议本身的实现技术(如多进程或多线程等)外,还受认证所用的数据库类型(如LDAP、RDBMS、文本文件等)和软硬件平台及网络环境的影响。因此RADIUS服务器性能指标是与运行环境密切相关的。也就是说,给出RADIUS服务器性能指标时,必须给出相应的软硬件配置。下面是从用户角度描述的RADIUS服务器性能指标。
(1)最大吞吐量。即系统每秒能接入的最大用户数量,或者说是每秒钟最多能够成功处理的有效服务请求包的数目。
(2)平均响应时间。即从网络访问服务器NAS发出服务请求到服务器应答包的返回时延。反映了服务品质。
(3)系统稳定性。即在服务请求繁忙时系统的稳定性。有的服务器在系统持续繁忙的时候,性能会急剧下降或者崩溃。稳定性的测试方法就是长时间进行高强度的压力测试。
(4)系统可靠性。测试系统能否对各种服务请求和异常做出正确的处理,包括计费的准确性。
(5)系统可扩展性。因为RADIUS协议是一个开放的协议,在不与标准协议冲突的前提下,允许增强服务器服务功能和提高处理性能。所以,有必要测试RADIUS服务器所声明提供的扩展服务是否有效。
通过调整RADIUS服务器和测试环境,还可测试以下对RADIUS系统设计人员比较有用的性能数据:
(1)用非法用户名进行性能测试,可以得到RADIUS的信令处理能力,即RADIUS服务器内部处理一个请求包所花费的时间和传输信息包的网络时延,体现CPU速度。
(2)用合法用户名(无数据库)进行性能测试,得到的性能报告体现了RADIUS信令处理能力和自动数据库故障备份能力,反映了CPU速度和文件读写速度。
(3)用合法用户名(有数据库)进行性能测试,得到的性能报告体现了RADIUS信令处理能力和数据库处理能力,反映了CPU速度和数据库速度。
(4)用高速的发包速度进行测试,根据丢包情况可以得到RADIUS服务器能够有效进行缓冲处理的应答包的数目等。
1.3 性能测试方法
由于影响RADIUS服务器性能的因素比较多,理论评估其性能非常困难,因此利用软件工具实测RADIUS服务器性能具有十分重要的意义。在AAA系统的建设中,它可以作为选择RADIUS软件产品和配置硬件设备的主要依据;在研制新的RADIUS服务器时,可以作为评估性能和查找性能瓶颈的工具;在RADIUS服务器运营过程中,它可以为系统维护和系统优化提供指导。
根据RADIUS协议的工作原理,网络接入服务器NAS是RADIUS服务器的客户,RADIUS服务器的性能就体现在其对NAS服务请求的响应能力。因此可以用测试软件代替NAS并模拟NAS的行为来测试RADIUS服务器的性能。图1为RADIUS服务器性能测试方案图。其中模拟NAS的测试软件可以严格按照要求发送RADIUS服务器请求包并记录和统计分析RADIUS服务器的响应情况,经分析就可以得出上面讨论的RADIUS服务器的性能指标。
2 测试软件的设计思想
2.1 测试软件的需求
(1)作为性能测试软件其准确性无疑是最重要的。测试软件要在RADIUS服务器高速发送请求包的同时记录和统计分析其应答包,具有强大的实时处理能力才能保证测试的准确性。
(2)保证测试软件发包速度的平滑可调性,才能保证测试软件的精度。
(3)测试过程中需要输入较多的控制参数,要涉及很多操作细节,而且时序性强,全人工操作会很繁琐和复杂,必须提供实时交互能力并具有操作过程记录能力和批处理能力。
(4)测试软件对系统资源,特别是CPU资源和内存资源的要求很高,如果处理不当,很容易引起系统宕机。因此保证测试软件的稳定性和可靠性是难点。
(5)RADIUS服务器的性能参数是通过测试软件和RADIUS服务器的交互运行状态反映出来的,其值是抽象和动态的,所以必须使用直观和易理解的方式加以表现。
(6)支持对RADIUS的扩展能力的测试。因为RADIUS协议可以通过属性(Attribute)域携带认证、授权以及详细配置信息进行扩展支持新的认证方法,所以客观要求测试软件也具备一定的易扩展性。
2.2 测试软件的系统流程图
图2所示是RADIUS服务器性能测试软件的系统流程图。其主要输入是RADIUS属性等协议参数和测试数据,主要的处理是多线程发送请求包和处理应答包以及对测试过程进行全方位的监控。最后输出的是动态实时曲线,根据曲线可以得出RADIUS的性能指标。
2.3 测试软件的系统组成
测试软件的系统主要由六个模块组成,其功能描述如下。
(1)扩展属性录入模块。输入、修改和保存RADIUS的扩展属性数据字典,以便支持各种类型的RADIUS服务器和测试RADIUS服务器的扩展能力。
(2)请求包发送模块。该模块模拟NAS向RADIUS服务器发送请求包。在发送过程中,同时记录或统计包的发送信息,如:发送频率、每个包的发送时间、平均发送时间、已发送的请求包的数量。它包括请求包发送线程池和请求包发送速度控制线程等。
(3)应答包处理模块。①监视UDP端口,排除网络干扰,接收从被测试的RADIUS服务器返回的应答包,并记录包的到达信息,如:每个应答的到达时间,应答包平均到达时间间隔。②处理应答包。该部分分析包的信息,将应答包和已经发送的请求包进行匹配,得出发送接收时延、接收到的应答包的总数、应答包到达平均时间间隔。它包括应答包接收线程、应答包处理线程和缓冲区状态监视处理线程等。
(4)测试数据动态显示模块。在测试过程中以直观的图形方式动态显示测试程序运行状态和RADIUS服务器运行状况的参数。
(5)测试过程参数控制模块。①测试过程的参数初始化部分。对于每一个特定的测试过程,所用的参数都是不一样的,如控制请求包的发送频率的参数、控制包的最大发送数量的参数、包的基础信息、在包发送过程中用来协助程序自动改变请求包内容的参数(如用户名,密码前缀、后缀)。②在测试过程中控制包的发送频率,控制内部参数统计过程。
(6)测试数据准备模块。这是一个独立的程序模块,专门用来批量产生用于测试的RADIUS服务器用户数据,如用户名和密码。用户名和密码是按照一定的规则产生的,如前缀加上变化的序号,在测试程序发送模拟请求包时,按同样的规则随机填入用户资料。用这种方法,可以使得每个RADIUS服务器端的数据库中的用户记录都有相同的概率被RADIUS服务器搜索,使测试结果与实际情况最接近。产生多少用户数据可以根据实际系统而定。
3 测试软件实现技术
本测试软件使用了多线程池技术和缓冲池管理技术,其中线程的同步与互斥、内存的分配与回收比较复杂,是程序成功与否的关键。下面介绍在软件实现中所解决的技术难点。
3.1 发包速度精确控制
为了定量地测量RADIUS服务器的最大吞吐量等性能指标,测试程序必须按给定的速度向RADIUS服务器发送认证请求包,然后记录其应答情况。由于Windows下sleep( )的定时精度只有10ms,因此采用简单的循环发送和sleep( )延时等技术,单线程最多只能得到100包/s的发包速度。假设被测对象每秒可以处理2 000个请求,则需要20个发包线程并发工作才能达到要求。单处理器系统中每个进程中的线程数一般不要超过上限16,而且20个线程也很难控制,因此不能采用循环发送方法。
解决此问题的方法是:设置一个发包速度控制线程CA和一个发包线程池A,由CA定时检查发包线程池A并唤醒其中挂起的发包线程。发包线程被唤醒并发完包后又自行挂起,等待下一次被唤醒。发包速度控制线程CA利用Win32 API保留的低层函数SetTimeEvent可以实现1ms的高精度定时,即可以每毫秒检查一次发包线程池。因此只需要二个发包线程就可以实现2 000包/s的发包速度。
3.2 发包速度的平滑调整
测量RADIUS服务器的最大吞吐量等性能指标时,测试程序的发包速度一般是由低速向高速等步长逐步升高,直到RADIUS服务器不能承受的极限为止。因此必须能平滑调整发包速度。由于此软件的发包速度控制线程CA的最高精度为1ms,即一个发包线程最高能发1 000包/s,要得到较低的发包速度,只能使CA每2ms、3ms、4ms……nms检查一次发包线程池,即只能得到500包/s、333包/s、250包/s的一个非线性的发包速度,相当于对1 000的频率发生器进行分频处理。高频段的速度变化太快,达不到测试的精度要求。
解决此问题方法是:设置二个发包速度控制线程CA、CB,对应二个发包线程池A、B。CA控制的线程池A中的线程用于产生千位数的发包速度,每个线程产生1 000包/s的发包速度;CB控制的线程池B中的线程用于产生剩余的小于1 000包/s的发包速度。其中用0~3个线程产生百位数的发包速度,线程的发包速度可选500包/s、200包/s、100包/s,另外用一个线程产生十位数以下的发包速度,发包速度为用(1 000 div x)对1 000进行分频。总的发包速度最大误差小于5。
例如要求产生一个2970包/s的发包速度,A中设二个线程产生2 000包/s发包速度;B中设四个线程,发包速度分别是(500+200+200)=900和(1000 div 14)=71,与要求的2970包/s仅差1。
3.3 保证测试结果的准确性
引起测试结果不准确的情况有以下几种:(1)丢失RADIUS服务器发送回来的应答包。(2)不能及时记录应答包的接收时间和处理应答包。(3)在计算原始数据从而间接得到RADIUS服务器性能参数的过程中,计算方法不当。
解决方法是将应答包的处理分解为接收和处理,分别由二组不同的线程负责,并设置一个应答包缓冲池暂存应答包。接收线程负责将收到的应答包放入应答包缓冲池并记录下时标,应答包处理线程负责应答包处理,如与请求包匹配计算时延等。接收线程和处理线程组成二个线程池,线程池里有预先建立好的接收线程和处理线程。当接收到应答包时就唤醒一个处理线程。若应答包处理线程池中找不到空闲状态线程,则为应答包建立一个处理线程,并把新建立的线程加到线程池里。处理线程处理完毕就挂起等待下一次调度,减少线程的创建及调度开销。
设置一个“请求包记录池”和“应答包缓冲池”状态监视线程,及时清理其中的过时内容,释放内存空间,同时提高请求包记录的查找速度,减少应答包的处理时间,并可以简化缓冲池的同步与互斥机制。
计算二个时间之间的差值时选择可以精确到毫秒级的时间比较函数MilliSecondsBetween。在计算平均时延时,要控制“除”操作的结果精度。精度过高,耗费过多系统资源,且没有实际意义;精度过低,达不到要求,产生较大误差。
另外,在建立实际测试平台时,提高运行测试程序的机器硬件配置和改善测试网络环境都有助于提高测试结果的准确性。
3.4 测试结果的直观显示
在测试过程中,测试人员动态调整发包速度,使测试结果动态显示。利用Delphi提供的功能强大的Tchart组件,以动态图形的方式显示了RADIUS服务器对测试程序的回应情况。使用了Tchart组件的FastLine曲线图和饼图二种图形显示,它们都可实时反映参数的变化。
第一个FastLine曲线图的纵坐标为包的个数,横坐标为时间。随着测试中时间的推移,请求包的发送数、应答包的接收数、认证通过包的数目、有效应答包的数目及包处理线程等参数共五条曲线都动态显示在同一个坐标系。对比这些曲线,可以得出RADIUS服务器和本测试程序运行情况。例如:代表请求包的线条显示在代表应答包线条的上方,说明在某一时刻请求包总的发送数量比接收到的应答包总的数量要多。对于横坐标上同一个时间点,线条在纵坐标上的差值反映了有多少个请求包在这一时间点没有收到RADIUS服务器的回应。
第二个Fastline曲线图显示了平均发送时延和平均应答时延。通过对比该曲线图中二条曲线的位置,可以知道RADIUS服务器能否跟上测试程序的包发送频率并及时作出应答。
第三个饼图用扇形和百分数来显示应答包、验证通过包、验证失败包、还未收到回应的包的情况。
4 结束语
作者用本文实现的RADIUS服务器性能测试软件对一些免费的和商业的RADIUS服务器软件进行了性能测试,系统运行良好,取得了满意的效果。该测试软件为构建AAA系统时选择合适的RADIUS软件和配置硬件平台提供了科学的依据,对于研制或改进RADIUS服务器时查找性能瓶颈具有重要作用。
参考文献
1 许猛.使用高速缓存提高AAA服务器性能的方法.计算机工程;2003;1(29)
2 朱鲁华,施军,尤晋元.分布式远程认证服务器D_RADIUS的设计与实现.计算机工程,2002;10(28)
3 Rigney C,Willens S,Rubens A et al.Remote Authentication Dial In User Service(RADIUS).RFC2865,2000
4 金敏.RADIUS服务器的模块化及多线程实现.铁路计算机应用,2002;3(60)
5 卫耀军.RADIUS协议及其实现.计算机工程,2000;增刊(26)
6 梁志刚,汪浩.C++ Builder 5开发人员指南.北京:机械工业出版社,2000