网络性能获取方法及系统
技术领域
本发明涉及性能轮询任务技术领域,具体涉及一种网络性能获取方法及系统。
背景技术
随着通信网络的不断发展,人们对通信网络的性能越来越重视(例如影响传输网络传送质量的误码性能等),所以,在日常工作中需要实时获取各种网络性能(例如固定时长内的误码数量等)。
现有的网络性能获取方法包括:
网络性能计数统计流程:定期读取并累加寄存器中对应的网络性能计数,由于寄存器中的网络性能计数被读取后自动清空数值,因此读取并累加的网络性能计数需要用全局变量进行存储;可知,网络性能计数统计流程实际为对全局变量的累加操作;
网络性能计数获取流程:当上层应用软件需要获取网络性能计数,将全局变量的值输出后清空数值;可知,网络性能计数获取流程实际为对全局变量的减操作。
上述网络性能获取方法存在的缺陷为:
网络性能计数统计流程和获取流程均需要修改全局变量的数值(加和减),而对属于“共享资源”的全局变量进行频繁的修改操作,会极大提升全局变量出错的概率,进而降低全局变量的可靠性,安全存在一定的隐患。
此外,为了避免因多任务(例如网络性能计数统计流程和获取流程)同时对全局变量进行操作,需要通过信号量设置任务优先级或者通过标志位设置占用位的方式,来使得全局变量在同一时刻只被一种任务所操作。
通过信号量设置任务优先级或者通过标志位设置占用位的方式分别存在以下缺陷:
对于信号量:虽然通过信号量设置任务优先级,能够保证所有任务按照优先级顺序依次操作全局变量,但是会出现优先级低的任务可能长时间都无法操作全局变量来获取资源,进而降低了性能获取效率;与此同时,信号量如果没有处理好,很容易造成死锁,从而带来无法挽回的后果。
对于标志位:标志位随着各任务的切换而传递,由于各任务间的切换存在延时,因此标志位可能出现未及时传递到轮询任务,这会在先任务在执行过程中被在后任务插入,进而大幅度降低在先任务的性能获取精度。例如:在先任务为网络性能计数统计流程,在后任务为网络性能计数获取流程:
S1在先任务刚从寄存器读取到数据准备累加时被在后任务抢占优先权;
S2:在后任务此时读取全局变量的数据准备上报,全局变量还未来及做清空,又运行在先任务;
S3:在先任务继续将寄存器的数据累加后,又运行在后任务;
S4:在后任务做了全局变量清空,则导致在先任务在S3中累加的数据直接被清空了,这部分数据就丢失了。
在先任务在执行的过程中,在后任务的标志位传递到,即此时要
与此同时,无论是信号量还是标记位,都需要在获取网络性能计数时进行逻辑判断(信号量的优先级判断、标记位的占用位判断),这必然会降低性能获取效率。
发明内容
针对现有技术中存在的缺陷,本发明解决的技术问题为:如何提高与网络性能对应的全局变量的可靠性;如何提高网络性能的获取效率和获取精度。
为达到以上目的,本发明提供的网络性能获取方法,该方法包括以下步骤:获取网络性能的全局变量计数、并将该计数赋值至一个临时局部变量,每个临时局部变量唯一对应一个需要获取网络性能的任务;判断临时局部变量计数是否溢出,若是,对临时局部变量计数进行反转后形成性能数值;否则根据临时局部变量形成性能数值。
在上述技术方案的基础上,所述判断临时局部变量计数是否溢出的流程包括:将本次临时局部变量计数和上次临时局部变量计数进行比较,若本次临时局部变量计数大于等于上次临时局部变量计数,则确认本次临时局部变量计数没有溢出;若本次临时局部变量计数小于上次临时局部变量计数,则确认本次临时局部变量计数溢出。
在上述技术方案的基础上,所述根据临时局部变量形成性能数值的流程包括:根据临时局部变量C和上次临时局部变量B计算性能数值T,计算公式为:T=C-B;所述对临时局部变量计数进行反转后形成性能数值的流程包括:根据C、B以及全局变量的计数上限K来计算性能数值T,计算公式为:T=K-B+C。
在上述技术方案的基础上,该方法还包括以下步骤:将本次临时局部变量保存为上次临时局部变量。
在上述技术方案的基础上,该方法还包括以下步骤:监测需要获取的网络性能对应的寄存器的计数值,并将该计数值累加至该网络性能对应的全局变量计数。
本发明提供的网络性能获取系统,包括全局变量计数模块和性能数值计算模块;
全局变量计数模块用于:获取网络性能的全局变量计数、并将该计数赋值至一个临时局部变量,每个临时局部变量唯一对应一个需要获取网络性能的任务;
性能数值计算模块用于:判断临时局部变量计数是否溢出,若是,对临时局部变量计数进行反转后形成性能数值;否则根据临时局部变量形成性能数值。
在上述技术方案的基础上,所述性能数值计算模块判断临时局部变量计数是否溢出的流程包括:将本次临时局部变量计数和上次临时局部变量计数进行比较,若本次临时局部变量计数大于等于上次临时局部变量计数,则确认本次临时局部变量计数没有溢出;若本次临时局部变量计数小于上次临时局部变量计数,则确认本次临时局部变量计数溢出。
在上述技术方案的基础上,所述性能数值计算模块根据临时局部变量形成性能数值的流程包括:根据临时局部变量C和上次临时局部变量B计算性能数值T,计算公式为:T=C-B;所述性能数值计算模块对临时局部变量计数进行反转后形成性能数值的流程包括:根据C、B以及全局变量的计数上限K来计算性能数值T,计算公式为:T=K-B+C。
在上述技术方案的基础上,该系统还包括临时局部变量保存模块,其用于:将本次临时局部变量保存为上次临时局部变量。
在上述技术方案的基础上,该系统还包括全局变量计数模块,其用于:监测网络性能对应的寄存器的计数值,并将该计数值累加至该网络性能对应的全局变量计数。
与现有技术相比,本发明的优点在于:
与现有技术中频繁对全局变量的数值进行加或减的修改操作相比,在全局变量进行累加是必然发生的操作的基础上(参见背景技术可知,对网络性能的获取即为对全局变量的累加计数的获取),本发明在获取网络性能时,对全局变量的唯一操作为获取全局变量计数,没有对全局变量进行任何修改操作,进而显著降低了全局变量出错的概率,大幅度提高了全局变量的可靠性,保证了全局变量的使用安全,适用于各种通信设备,非常适于推广。
与此同时,本发明只需通过唯一对应需要获取网络性能的临时局部变量,即可获取网络性能的全局变量计数,即每个需要获取网络性能的任务可并行。在此基础上:
与现有技术中通过信号量设置任务优先级相比,本发明不会存在现有优先级低的任务长时间无法操作全局变量来获取资源的情况,进而提高了性能获取效率;也不会有信号量没有处理好的风险,使用比较安全。
与现有技术中通过标志位设置占用位的方式相比,本发明的每个任务可同时获取网络性能的全局变量计数,每项任务并不会发生干扰,即每项任务的性能获取精度均能够得到保证。
此外,本发明通过临时各任务的局部变量获取网络性能的全局变量计数时,不会有各任务获取顺序的逻辑判断,进行进一步提高了性能获取效率,还进一步降低了出现误差的概率。
附图说明
图1为本发明实施例中整形数溢出后的计数值变化的示意图;
图2为本发明实施例中性能轮询流程图;
图3为本发明实施例中性能获取流程图。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。
本发明实施例中的网络性能获取方法,包括以下步骤:
需要获取网络性能时,获取该网络性能的全局变量计数、并将该计数赋值至一个临时局部变量,每个临时局部变量唯一对应一个需要获取网络性能的任务;判断临时局部变量计数是否溢出,若是,对临时局部变量计数进行反转后形成性能数值、并输出至需要获取网络性能的任务;否则根据临时局部变量形成性能数值、并输出至需要获取网络性能的任务。
由此可知,与现有技术中频繁对全局变量的数值进行加或减的修改操作相比,在全局变量进行累加是必然发生的操作的基础上,本发明在获取网络性能时,对全局变量的唯一操作为获取全局变量计数,没有对全局变量进行任何修改操作,进而显著降低了全局变量出错的概率,大幅度提高了全局变量的可靠性,保证了全局变量的使用安全,适用于各种通信设备,非常适于推广。
与此同时,本发明只需通过唯一对应需要获取网络性能的临时局部变量,即可获取网络性能的全局变量计数,即每个需要获取网络性能的任务可并行。在此基础上:
与现有技术中通过信号量设置任务优先级相比,本发明不会存在现有优先级低的任务长时间无法操作全局变量来获取资源的情况,进而提高了性能获取效率;也不会有信号量没有处理好的风险,使用比较安全。
与现有技术中通过标志位设置占用位的方式相比,本发明的每个任务可同时获取网络性能的全局变量计数,每项任务并不会发生干扰,即每项任务的性能获取精度均能够得到保证。
此外,本发明通过临时各任务的局部变量获取网络性能的全局变量计数时,不会有各任务获取顺序的逻辑判断,进行进一步提高了性能获取效率,还进一步降低了出现误差的概率。
优选的,本发明在输出性能数值前,需要判断获取的全局变量计数是否溢出的原理为:
累加的全局变量性能通常定义为无符号整形,即无论是4字节、8字节或者16字节的全局变量,若始终保持累加则最终肯定会溢出。溢出的处理方式为:计算机中的整数是用有限个字节表示的,例如定义字节上限(即全局变量的计数上限)为28k-1,则当实际全局变量计数大于28k-1时,则全局变量计数溢出,此时全局变量计数会自动与28k-1做模运算后变更计数,而对于溢出后变更的全局变量计数,肯定是需要进行反转还原的,这样才能保证网络性能获取精度。
参见图1所示,上述做模运算后变更计数的演示可以为:用一个圆来模拟无符号整数的输出结果,圆上的刻度按照逆时针顺序从0开始依次递增(1,,,28k/2-1,,,28k/2,,,28k-1),圆上的指针按照逆时针方向跳动一次代表计数加1,参见图1可知,当指针在28k-1处跳动后,指针会跳动至0的位置。
在此基础上,该方法中所述判断临时局部变量计数(即本次临时局部变量计数)是否溢出的流程包括:
将本次临时局部变量计数和上次临时局部变量(即上次形成性能数值所需的临时局部变量)计数进行比较,若本次临时局部变量计数大于等于上次临时局部变量计数,则说明本次临时局部变量计数(即全局变量计数)没有溢出;若本次临时局部变量计数小于上次临时局部变量计数,则说明本次临时局部变量计数溢出(由上文的变更计数的演示可知,溢出的计数会重0开始计算,因此只有溢出的计数才会小于上次临时局部变量)。
优选的,该方法中所述根据临时局部变量形成性能数值的流程包括:根据临时局部变量C和上次临时局部变量B计算性能数值T,计算公式为:T=C-B;所述对临时局部变量计数进行反转后形成性能数值的流程包括:根据C、B以及全局变量的计数上限K(即全局变量字节的上限数值)来计算性能数值T,计算公式为:T=K-B+C。
优选的,该方法还包括以下步骤:将本次临时局部变量保存为上次临时局部变量。
优选的,该方法还包括以下步骤:定期监测需要获取的网络性能对应的寄存器的计数值,并将该计数值累加至该网络性能对应的全局变量计数。
下面通过一个具体实施例说明本发明的方法。
本发明的方法可以分为性能轮询流程和性能获取流程,性能轮询流程在开机运行后自动触发,性能获取流程被需要获取网络性能的任务(例如上层应用软件)。
参见图2所示,性能轮询流程包括:
S101:清空全局变量计数和上次临时局部变量,转到S102。
S102:定期(1s)遍历所有节点,当遍历到的当前节点为被监测节点时,转到S103。
S103:从芯片寄存器读取当前节点的各种性能计数值后,将性能计数值累加至该性能对应的全局变量。
参见图3所示,性能获取流程包括:
S201:为每个网络性能的全局变量A定义一个同类型的全局变量B(初始化为0),全局变量B用于存储上次临时局部变量,转到S202。
S202:需要获取网络性能时,将对应的全局变量A的计数赋值至一个临时局部变量C,转到S203。
S203:判断是否C≥B,若是,则A没有发生溢出,此时性能数值T=C-B,转到S204;否则A发生溢出,此时性能数值T=K-B+C,转到S204。
S204:将临时局部变量C的值赋值给全局变量B。
本发明实施例中的网络性能获取系统,包括全局变量计数模块、性能数值计算模块、临时局部变量保存模块和全局变量计数模块。
全局变量计数模块用于:获取网络性能的全局变量计数、并将该计数赋值至一个临时局部变量,每个临时局部变量唯一对应一个需要获取网络性能的任务。
性能数值计算模块用于:判断临时局部变量计数是否溢出,若是,对临时局部变量计数进行反转后形成性能数值;否则根据临时局部变量形成性能数值。
性能数值计算模块判断临时局部变量计数是否溢出的流程包括:将本次临时局部变量计数和上次临时局部变量计数进行比较,若本次临时局部变量计数大于等于上次临时局部变量计数,则确认本次临时局部变量计数没有溢出;若本次临时局部变量计数小于上次临时局部变量计数,则确认本次临时局部变量计数溢出。
性能数值计算模块根据临时局部变量形成性能数值的流程包括:根据临时局部变量C和上次临时局部变量B计算性能数值T,计算公式为:T=C-B;所述性能数值计算模块对临时局部变量计数进行反转后形成性能数值的流程包括:根据C、B以及全局变量的计数上限K来计算性能数值T,计算公式为:T=K-B+C。
临时局部变量保存模块用于:将本次临时局部变量保存为上次临时局部变量。
全局变量计数模块用于:监测网络性能对应的寄存器的计数值,并将该计数值累加至该网络性能对应的全局变量计数。
需要说明的是:本发明实施例提供的系统在进行模块间通信时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将系统的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
进一步,本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。