本发明涉及服务器性能测试技术领域,更具体的说是涉及一种基于服务器性能测试的性能调优方法。
背景技术:
随着云计算、大数据等新型技术的发展,对服务器的处理器、内存、数据存储的带宽和容量等性能要求越来越高,如何高效地评估服务器各项基本性能对服务器厂商、服务器用户有十分重大的意义。传统服务器性能测试通过自动运行测试进程来实现,因测试效率较高,被测试人员普通采用。
但是,在对硬盘的读写能力测试过程中,常常出现性能不达标的情况,可以通过绑定内核的方法调优。可以通过将一个进程绑定到一个内核上的方法,直到测试完成。但这种方法的问题是不够机动,如果绑定的内核利用率过高,测试的结果也会出现不达标的情况。
技术实现要素:
针对以上问题,本发明的目的在于提供一种基于服务器性能测试的性能调优方法,通过周期性采集内核利用率,将测试进程自动绑定在利用率最低的内核上并用于测试。
本发明为实现上述目的,通过以下技术方案实现:一种基于服务器性能测试的性能调优方法,包括如下步骤:
步骤1:获取内核数量和测试程序的进程号;
步骤2:实时获取cpu进程的状态;
步骤3:将每个cpu内核的使用状态分别记录;
步骤4:分别累加每个cpu内核的使用率;
步骤5:将cpu内核使用率最低的内核找出来;
步骤6:将测试进程重新绑定到利用率最低的内核上。
进一步,步骤2包括:采用实时系统监控工具mpstat每2秒抓取一次cpu的使用状态信息。
进一步,所述步骤2还包括:将cpu的使用状态信息中保护cpu各内核利用率的部分写入buffer文档中。
进一步,所述步骤3包括:循环筛选buffer文档中的信息,并按照内核名字将每个内核的使用率进行保存。
进一步,所述步骤3还包括:定义循环次数j,如果在循环过程中j大于cpu内核数,则跳出循环。
进一步,所述步骤4包括:循环抓取每个内核的利用率,将每个内核的实时内核利用率$k与内核使用率累加值"$k"_1相加,并重新放入"$k"_1中。
进一步,所述步骤4还包括:定义循环次数k,如果在循环过程中k大于cpu内核数,则跳出循环。
进一步,所述步骤4还包括:如果内核的使用率累加值"$k"_1不存在,则将"$k"_1的值初始化为0。
进一步,所述步骤5具体包括:定义内核使用率最小值,并设定初始值;循环遍历每个内核使用率的累加值"$k"_1,如果"$k"_1小于当前的内核使用率最小值,则将当前内核使用率的累加值"$k"_1设为内核使用率最小值,并将当前内核的序号写入关键字key中。
进一步,所述步骤6具体为:将测试进程重新绑定到序号为key的内核上。
对比现有技术,本发明有益效果在于:
1.通过重新绑定内核,来实现性能调优的目的。
2.通过动态重新绑定内核的方式,避免过度依赖单一内核。
3.通过抓取实时的内核利用率,并将各个内核的利用率累加,避免突发事件造成某个内核利用率飙升造成的偏差。
4.重新绑定内核的时间可控,避免频繁重新绑定和内核切换的时候命令延迟。
5.使用冒泡比较法,能够快速准确的找出利用率最小的内核。
本发明可以用在服务器性能测试中,通过自动化的调优方式,将测试进程绑定利用率最低的内核,提高测试性能。同时,在测试时使用本发明也直观的反映出cpu对测试结果的影响。有效的提高了测试效率。
由此可见,本发明与现有技术相比,具有突出的实质性特点和显著的进步,其实施的有益效果也是显而易见的。
附图说明
附图1是本发明实施例一的方法流程图。
附图2是本发明实施例二的方法流程图。
具体实施方式
下面结合附图对本发明的具体实施方式做出说明。
实施例一:
如图1所示的一种基于服务器性能测试的性能调优方法,包括如下步骤:
步骤1:获取内核数量和测试程序的进程号。
步骤2:实时获取cpu进程的状态。
步骤3:将每个cpu内核的使用状态分别记录。
步骤4:分别累加每个cpu内核的使用率。
步骤5:将cpu内核使用率最低的内核找出来。
步骤6:将测试进程重新绑定到利用率最低的内核上。
本实施例提出的一种基于服务器性能测试的性能调优方法,通过执行脚本,实现自动化的调优方式,将测试进程绑定利用率最低的内核,提高测试性能。同时,在测试时使用能够直观的反映出cpu对测试结果的影响。有效的提高了测试效率。
实施例二:
如图2所示的一种基于服务器性能测试的性能调优方法,包括如下步骤:
步骤1:获取内核数量和测试程序的进程号。
步骤2:采用实时系统监控工具mpstat每2秒抓取一次cpu的使用状态信息。将cpu的使用状态信息中保护cpu各内核利用率的部分写入buffer文档中。
步骤3:循环筛选buffer文档中的信息,并按照内核名字将每个内核的使用率进行保存。定义循环次数j,如果在循环过程中j大于cpu内核数,则跳出循环。
步骤4:循环抓取每个内核的利用率,将每个内核的实时内核利用率$k与内核使用率累加值"$k"_1相加,并重新放入"$k"_1中。定义循环次数k,如果在循环过程中k大于cpu内核数,则跳出循环。如果内核的使用率累加值"$k"_1不存在,则将"$k"_1的值初始化为0。
步骤5:定义内核使用率最小值,并设定初始值;循环遍历每个内核使用率的累加值"$k"_1,如果"$k"_1小于当前的内核使用率最小值,则将当前内核使用率的累加值"$k"_1设为内核使用率最小值,并将当前内核的序号写入关键字key中。
步骤6:将测试进程重新绑定到序号为key的内核上。
在上述基础上,具体的脚本内容如下:
1.获取内核数量和测试程序的进程号
cpus=$(grep-cprocessor/proc/cpuinfo)
pids=$(psaux|grep"测试进程"|awk'{print$2}')--测试进程的名字,通常是fio
2.实时获取cpu进程的状态
mpstat–a-2>1.txt&--这条命令在主程序中运行,每2s抓一次cpu使用状态
j=$(($cpus+5))
sed-n"5,"$j"p"1.txt>buffer_sum.txt--mpstat中包含信息较多,这里将包含cpu各内核利用率的部分剪出来放入buffer文档中
3.将每个cpu内核的使用状态分别记录
forjin{1..100}
do
if(($j>$cpus))--自定义的循环数,一般的cpu内核数小于100,如果循环超过内核数,则跳出循环
thenbreak
fi
sed-n""$j"p"buffer_sum.txt|awk'{print$4}'>$j--把buffer文档中的信息进一步筛选,并按照内核名字来命名,分别保存起来,为了找出最小值。
done
4.分时累加cpu内核使用率
forkin{1..100}
do
if(($k>$cpus))--自定义的循环数,一般的cpu内核数小于100,如果循环超过内核数,则跳出循环
thenbreak
fi
iftest–s"$k"_1--定义"$k"_1是每个内核的累加,如果文件"$k"_1已经存在,则可以往下进行
then
l=`cat"$k"_1`
m=`cat$k`
t=`echo$m+$l|bc`
echo$t>""$k"_1"--将当前实时的内核利用率$k,过去个时间点采集的内核利用率累加和$k"_1相加,并重新放入$k"_1
echo$t
else
echo0>"$k"_1--如果$k"_1不存在,则生成$k"_1并写入0来初始化
fi
done
5.将cpu内核使用率最低的内核找出来
min=100--定义一个初始值
forfin{1..100}
do
if(($f>=$cpus))--循环数大于内核数时跳出循环
thenbreak
fi
a=`cat""$f"_1"`
c=`echo"$a<$min"|bc`--累加值遍历,如果当前的累加值小于当前的最小值,则将当前累加值设为最小值
if(($c==1))
then
echo$f>key
min=$a--累加值遍历,如果当前的累加值小于当前的最小值,则将当前累加值设为最小值,并将那个核的数写入关键字key中
echo$min
fi
done
6.重新绑定内核
taskset-c`catkey`-p$pids--将测试进程重新绑定到利用率最低的内核上
本实施例提出的一种基于服务器性能测试的性能调优方法,通过执行脚本重新绑定内核,来实现性能调优的目的。动态重新绑定内核的方式,避免过度依赖单一内核。通过抓取实时的内核利用率,并将各个内核的利用率累加,避免突发事件造成某个内核利用率飙升造成的偏差。重新绑定内核的时间可控,避免频繁重新绑定和内核切换的时候命令延迟。使用了冒泡比较法,能够快速准确的找出利用率最小的内核。
结合附图和具体实施例,对本发明作进一步说明。应理解,这些实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所限定的范围。