简介

手册主要介绍服务器POC测试过程中所用测试工具,主要包括CPU,内存、磁盘性能和网络几方面测试。本文主要介绍CPU和内存测试工具使用和调试,所有的bios参数调优,以联想SR650为例

CPU测试工具

BIOS设置

bios设置 ,确保要求服务器处于超频稳定状态下进行,除非用户有特殊要求.

BIOS Setting

image.png

禁止selinux和防火墙

systemctl stop firewalld

vi /etc/selinux/config

将SELINUX=enforcing改为SELINUX=disabled

cpupower 设置

cpupower frequency-set -g performance

tune模式设置

tuned-adm profile throughput-performance

重启系统

reboot

unixbench

安装步骤

1、yum install perl gcc

2、tar -xzvf byte-unixbench-5.1.3.tar.gz

3、cd Unixbench-5.1.2 执./Run

使用方法

./Run -q -c 1 -c 32

对于多cpu系统的性能测试策略,需要统计单任务,多任务及其并行的性能增强。以32核cpu的PC为例,需要测试两次,32核CPU就是要并行执行32个copies

c后的参数表示参与测试的CPU核数 表示执行两次,第一次单个copies, 第二次32个copies的测试任务

显示结果分析及相关项说明

8 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables 33444509.7 lps (10.0 s, 7 samples)

Double-Precision Whetstone 2702.2 MWIPS (10.0 s, 7 samples)

Execl Throughput 4647.2 lps (29.9 s, 2 samples)

File Copy 1024 bufsize 2000 maxblocks 1131210.2 KBps (30.0 s, 2 samples)

File Copy 256 bufsize 500 maxblocks 306139.4 KBps (30.0 s, 2 samples)

File Copy 4096 bufsize 8000 maxblocks 3477545.6 KBps (30.0 s, 2 samples)

Pipe Throughput 2197189.4 lps (10.0 s, 7 samples)

Pipe-based Context Switching 159896.2 lps (10.0 s, 7 samples)

Process Creation 11912.9 lps (30.0 s, 2 samples)

Shell Scripts (1 concurrent) 12619.4 lpm (60.0 s, 2 samples)

Shell Scripts (8 concurrent) 5086.8 lpm (60.0 s, 2 samples)

System Call Overhead 3928781.6 lps (10.0 s, 7 samples)

System Benchmarks Index Values BASELINE RESULT INDEX

Dhrystone 2 using register variables 116700.0 33444509.7 2865.9

Double-Precision Whetstone 55.0 2702.2 491.3

Execl Throughput 43.0 4647.2 1080.7

File Copy 1024 bufsize 2000 maxblocks 3960.0 1131210.2 2856.6

File Copy 256 bufsize 500 maxblocks 1655.0 306139.4 1849.8

File Copy 4096 bufsize 8000 maxblocks 5800.0 3477545.6 5995.8

Pipe Throughput 12440.0 2197189.4 1766.2

Pipe-based Context Switching 4000.0 159896.2 399.7

Process Creation 126.0 11912.9 945.5

Shell Scripts (1 concurrent) 42.4 12619.4 2976.3

Shell Scripts (8 concurrent) 6.0 5086.8 8478.1

System Call Overhead 15000.0 3928781.6 2619.2

System Benchmarks Index Score 1893.7


Benchmark Run: Mon Apr 16 2018 11:55:17 - 12:23:39

8 CPUs in system; running 8 parallel copies of tests

Dhrystone 2 using register variables 263391605.6 lps (10.0 s, 7 samples)

Double-Precision Whetstone 21623.4 MWIPS (10.0 s, 7 samples)

Execl Throughput 32726.1 lps (29.9 s, 2 samples)

File Copy 1024 bufsize 2000 maxblocks 1117467.1 KBps (30.0 s, 2 samples)

File Copy 256 bufsize 500 maxblocks 304340.2 KBps (30.0 s, 2 samples)

File Copy 4096 bufsize 8000 maxblocks 3570594.5 KBps (30.0 s, 2 samples)

Pipe Throughput 17497194.7 lps (10.0 s, 7 samples)

Pipe-based Context Switching 1783119.9 lps (10.0 s, 7 samples)

Process Creation 58313.8 lps (30.0 s, 2 samples)

Shell Scripts (1 concurrent) 60188.9 lpm (60.2 s, 2 samples)

Shell Scripts (8 concurrent) 8246.3 lpm (60.2 s, 2 samples)

System Call Overhead 6898602.7 lps (10.0 s, 7 samples)

System Benchmarks Index Values BASELINE RESULT INDEX

Dhrystone 2 using register variables 116700.0 263391605.6 22570.0

Double-Precision Whetstone 55.0 21623.4 3931.5

Execl Throughput 43.0 32726.1 7610.7

File Copy 1024 bufsize 2000 maxblocks 3960.0 1117467.1 2821.9

File Copy 256 bufsize 500 maxblocks 1655.0 304340.2 1838.9

File Copy 4096 bufsize 8000 maxblocks 5800.0 3570594.5 6156.2

Pipe Throughput 12440.0 17497194.7 14065.3

Pipe-based Context Switching 4000.0 1783119.9 4457.8

Process Creation 126.0 58313.8 4628.1

Shell Scripts (1 concurrent) 42.4 60188.9 14195.5

Shell Scripts (8 concurrent) 6.0 8246.3 13743.8

System Call Overhead 15000.0 6898602.7 4599.1

System Benchmarks Index Score 6493.2

Dhrystone测试

测试聚焦在字符串处理,没有浮点运算操作。这个测试用于测试链接器编译、代码优化、内存缓存、等待状态、整数数据类型等,硬件和软件设计都会非常大的影响测试结果。

Whetstone 测试

这项测试项目用于测试浮点运算效率和速度。这项测试项目包含若干个科学计算的典型性能模块,包含大量的C语言函数,sin cos sqrt exp和日志以及使用整数和浮点的数学操作。包含数组访问、条件分支和过程调用。

Execl Throughput(execl 吞吐,这里的execl是类unix系统非常重要的函数,非办公软件的execl)测试

这项测试测试每秒execl函数调用次数。execl是 exec函数家族的一部分,使用新的图形处理代替当前的图形处理。有许多命令和前端的execve()函数命令非常相似。

File Copy测试

这项测试衡量文件数据从一个文件被传输到另外一个,使用大量的缓存。包括文件的读、写、复制测试,测试指标是一定时间内(默认是10秒)被重写、读、复制的字符数量。

Pipe Throughput(管道吞吐)测试

pipe是简单的进程之间的通讯。管道吞吐测试是测试在一秒钟一个进程写512比特到一个管道中并且读回来的次数。管道吞吐测试和实际编程有差距。

Pipe-based Context Switching (基于管道的上下文交互)测试

这项测试衡量两个进程通过管道交换和整数倍的增加吞吐的次数。基于管道的上下文切换和真实程序很类似。测试程序产生一个双向管道通讯的子线程。

Process Creation(进程创建)测试

这项测试衡量一个进程能产生子线程并且立即退出的次数。新进程真的创建进程阻塞和内存占用,所以测试程序直接使用内存带宽。这项测试用于典型的比较大量的操作系统进程创建操作。

Shell Scripts测试

shell脚本测试用于衡量在一分钟内,一个进程可以启动并停止shell脚本的次数,通常会测试1,2, 3, 4, 8 个shell脚本的共同拷贝,shell脚本是一套转化数据文件的脚本。

System Call Overhead (系统调用消耗)测试

这项测试衡量进入和离开系统内核的消耗,例如,系统调用的消耗。程序简单重复的执行getpid调用(返回调用的进程id)。消耗的指标是调用进入和离开内核的执行时间。

Graphical Tests(图形)测试

由”ubgears”程序组成,测试非常粗的2D和3D图形性能,尤其是3D测试非常有限。测试结果和硬件

SpecCPU

安装步骤

挂载cpu2006-1.2.iso

mount -o loop cpu2006.iso /mnt

运行安装脚步进行安装

本次测试是把/mnt 内容拷贝到/root/tools/jdtool/spec\_cpu2006-avx-jd\_test/source\_tools 目录下

cp /mnt/speccpu2006-1.2 /root/tools/jdtool/spec\_cpu2006-avx-jd\_test/source\_tools

cd /root/tools/jdtool/spec\_cpu2006-avx-jd\_test/source\_tools/speccpu2006-1.2

./install.sh

提示安装完成

请输入图片描述

验证是否安装完成:

image.png

找出shrc文件位置

image.pngsource /root/tools/jdtool/spec_cpu2006-avx-jd_test/source_tools/speccpu2006-1.2/shrc

runspec –help

如果有选项的提示,则表示安装完成。

请输入图片描述

Config编辑更改

cp /root/tools/jdtool/spec\_cpu2006-avx-jd\_test/source\_tools/speccpu2006-1.2/config/Example-linux64-

amd64-gcc43+.cfg /root/tools/jdtool/spec\_cpu2006-avx-jd\_test/source\_tools/speccpu2006-1.2/config

/myspec.cfg

lscpu 查看CPU 信息

Cpu信息在config文件配置中需要用到

image.png

编辑myspec.cfg

ignore\_errors = yes

tune = base

ext = loongson.3a2000

output\_format = asc, Screen, html

reportable = 0

teeout = yes

teerunout = yes

hw\_avail = Feb-2015

sw\_avail = Feb-2015

license\_num =

company\_name = Loongson

prepared\_by = Loongson

tester\_name = isoft

test\_date = July-2016

verbose = 9

default=default=default=default:

Compiler selection

makeflags = -j 4

CC = mips64el-loongson-linux-gcc

CXX = mips64el-loongson-linux-g++

FC = mips64el-loongson-linux-gfortran

HW config

hw\_cpu\_name = Loongson

hw\_model = 3A2000

hw\_cpu\_mhz = 1000

hw\_fpu = Integrated

hw\_nchips = 1

hw\_ncores = 4

hw\_ncoresperchip= 4

hw\_nthreads = 4

hw\_ncpuorder = 1

hw\_parallel = yes

hw\_pcache = 64KB I + 64KB D

hw\_scache = 4096KB(I + D)

hw\_memory = 2 x 4GB DDR1066

hw\_vendor = Loongson

SW config

sw\_os = iSoft

sw\_file = ext4

sw\_state = runlevel 3

sw\_compiler = gcc , g++ & gfortran 4.8

Optimization

Base is low opt

default=default=default=default:

For this data model, -m32 needs to be here, as one of the lines below

OPTIMIZE = -static -march=loongson3a

PORTABILITY =

COPTIMIZE = -flto -Ofast

CXXOPTIMIZE = -flto -Ofast

FOPTIMIZE = -flto -Ofast

notes0100= C/C++ base flags: -flto -Ofast

notes0110= Fortran base flags: -flto -Ofast

32/64 bit Portability Flags - all

default=base=default=default:

notes25=

default=peak=default=default:

notes25=

Portability Flags - INT

400.perlbench=default=default=default:

notes35 = 400.perlbench: -DSPEC\_CPU\_LINUX\_IA32

CPORTABILITY= -DSPEC\_CPU\_LINUX\_IA32 -fno-strict-aliasing

\#notes35 = 400.perlbench: -DSPEC\_CPU\_LINUX

\#CPORTABILITY= -DSPEC\_CPU\_LINUX -DSPEC\_CPU\_LITTLEENDIAN

\#COPTIMIZE = -O2

使用方法

./runspec -c myspec.cfg -i ref -n 3 -I -r cpu\_cores all

启动过程中报错

image.png

image.png

解决办法:安装gcc-gfortran.x86_64和gcc-c++ 依赖包

[root@centos1 speccpu]# yum install gcc-gfortran.x86\_64

[root@centos1 speccpu]# yum install gcc-c++

报错

ERROR: Run for 416.gamess test base gcc43-64bit default FAILED (exit code 1)

解决办法:更改配置myspec.cfg

COPTIMIZE = -O2 -fno-strict-aliasing

CXXOPTIMIZE = -O2 -fno-strict-aliasing

FOPTIMIZE = -O2 -fno-strict-aliasing

改为:

COPTIMIZE = -O0 -fno-strict-aliasing

CXXOPTIMIZE = -O0 -fno-strict-aliasing

FOPTIMIZE = -O0 -fno-strict-aliasing

image.png

报错

image.png

解决办法

Yum install numactl

参数说明:

runspec: 表示执行SPEC CPU2000基准程序开始进行测试;

-c:读取测试配置文件;

myspec.cfg: 位于SPEC CPU2000安装目录的config目录下;

-i:输入测试数据集的大小,ref代表最大测试数据集,test代表最小测试数据集;

-n:运行的次数,如果需要SPEC CPU2000自动计算测试分值,需要指定运行次数等于或大于3,即n>=3;

-I:测试过程中如果某个用例发生错误,则跳过错误用例,继续执行其他用例,如果不加该参数,程序运行过程出现错误时,SPEC CPU2000将停止测试;

-r:测试rate,rate数据指多核CPU情况下运行多个相同进程的分值;

all:表示SPEC CPU2000将运行基准测试程序中的所有测试项目;

int:表示SPEC CPU2000将运行基准测试程序中的12个定点测试项目;

fp: 表示SPEC CPU2000将运行基准测试程序中的14个浮点测试项目;

164:表示SPEC CPU2000将运行基准测试程序中164.gzip这个程序;

举例说明SPEC CPU2000常用测试命令组合

1.runspec -c test.cfg -i test -I all

基于最小测试数据集快速执行所有的测试,测试过程中如果某个用例发生错误,则跳过错误用例,继续执行其他用例。

2.runspec -c test.cfg -i ref -n 3 -I all

基于最大测试数据集全面执行所有的测试,用于测试单核CPU,测试过程中如果某个用例发生错误,则跳过错误用例,继续执行其他用例。

3.runspec -c test.cfg -i ref -n 3 -r 4 -I all

基于最大测试数据集全面执行所有的测试,用于测试4核CPU,测试过程中如果某个用例发生错误,则跳过错误用例,继续执行其他用例。

4.runspec -c test.cfg -i ref -n 3 -r 8 -I all

基于最大测试数据集全面执行所有的测试,用于测试8核CPU,测试过程中如果某个用例发生错误,则跳过错误用例,继续执行其他用例。

5.runspec -c test.cfg -i ref -n 3 -r 8 -I int

基于最大测试数据集执行12个定点的测试,用于测试8核CPU,测试过程中如果某个用例发生错误,则跳过错误用例,继续执行其他用例。

6.runspec -c test.cfg -i ref -n 3 -r 8 -I 164

基于最大测试数据集只执行164单个测试,用于测试8核CPU,测试过程中如果某个用例发生错误,则跳过错误用例,继续执行其他用例。

结果分析

测试结束后在result目录下,查看测试结果,测试结果一般以测试类型和测试次序进行区别,并且会按照整点和浮点进行划分。如果是按照正式reportable的模式进行测试的话,会出一份网页版的正式测试结果,参见下图: 非正式结果可以去asc或txt文档查看,格式例如下文:

Benchmarks Ref. Run Time Ratio Ref. Run Time Ratio

400.perlbench 9770 430 22.7 S 9770 339 28.8 S

400.perlbench 9770 429 22.8 * 9770 338 28.9 S

400.perlbench 9770 429 22.8 S 9770 339 28.8 *

401.bzip2 9650 559 17.3 * 9650 552 17.5 *

401.bzip2 9650 559 17.3 S 9650 553 17.5 S

401.bzip2 9650 560 17.2 S 9650 552 17.5 S

……

400.perlbench 9770 429 22.8 * 9770 339 28.8 *

401.bzip2 9650 559 17.3 * 9650 552 17.5 *

403.gcc 8050 367 22.0 * 8050 337 23.9 *

429.mcf 9120 188 48.6 * 9120 188 48.6 *

445.gobmk 10490 559 18.8 * 10490 542 19.4 *

456.hmmer 9330 214 43.5 * 9330 213 43.7 *

458.sjeng 12100 616 19.6 * 12100 574 21.1 *

462.libquantum 20720 14.2 1460 * 20720 14.2 1460 *

464.h264ref 22130 578 38.3 * 22130 526 42.0 *

471.omnetpp 6250 348 17.9 * 6250 288 21.7 *

473.astar 7020 311 22.6 * 7020 311 22.6 *

483.xalancbmk 6900 174 39.7 * 6900 170 40.6 *

SPECint(R)\_base2006 36.7

SPECint2006 39.1

结果显示为int运算的12个实例,其实每个实例运行3次的测试结果,最终结果取SPECint(R)\_base2006和SPECint2006,其值是所有base Ratio和peak Ratio的结果的几何平均值。

SPECint(R)\_base2006 36.7

SPECint2006 39.1

Sysbench

安装步骤

yum -y install make automake libtool pkgconfig libaio-devel vim-common

进入到sysbench源码目录

cd /home/sysbench-master

执行autogen.sh来生成configure文件

./autogen.sh

执行configure && make && make install 完成sysbench安装

./configure --prefix=/usr/local/sysbench/ --with-mysql --with-mysql-includes=/usr/local/mysql

/include --with-mysql-libs=/usr/local/mysql/lib

其中--with-mysql-includes= 需要为mysql的安装目录

make

make install

测试安装是否成功

usr/local/sysbench/bin/sysbench --version

使用方法

sysbench 中的测试类型大致可以分成内置的,lua脚本自定义的测试

内置测试:

fileio 、cpu 、memory 、threads 、 mutex

使用lua脚本自定义型测试:

sysbench 自身内涵了一些测试脚本放在了安装目录下share/sysbench下

ll share/sysbench

-rwxr-xr-x. 1 root root 1452 10月 17 15:18 bulk\_insert.lua

-rw-r--r--. 1 root root 13918 10月 17 15:18 oltp\_common.lua

-rwxr-xr-x. 1 root root 1290 10月 17 15:18 oltp\_delete.lua

-rwxr-xr-x. 1 root root 2415 10月 17 15:18 oltp\_insert.lua

-rwxr-xr-x. 1 root root 1265 10月 17 15:18 oltp\_point\_select.lua

-rwxr-xr-x. 1 root root 1649 10月 17 15:18 oltp\_read\_only.lua

-rwxr-xr-x. 1 root root 1824 10月 17 15:18 oltp\_read\_write.lua

-rwxr-xr-x. 1 root root 1118 10月 17 15:18 oltp\_update\_index.lua

-rwxr-xr-x. 1 root root 1127 10月 17 15:18 oltp\_update\_non\_index.lua

-rwxr-xr-x. 1 root root 1440 10月 17 15:18 oltp\_write\_only.lua

-rwxr-xr-x. 1 root root 1919 10月 17 15:18 select\_random\_points.lua

-rwxr-xr-x. 1 root root 2118 10月 17 15:18 select\_random\_ranges.lua

drwxr-xr-x. 4 root root 46 10月 17 15:18 tests

通过sysbench进行cpu性能测试

sysbench的cpu测试是在指定时间内,循环进行素数计算

默认参数,素数上限10000,时间10秒,单线程

\#sysbench cpu run

--cpu-max-prime: 素数生成数量的上限

--threads: 线程数

--time: 运行时长,单位秒

--events: event上限次数

举例说明:

素数上限2万,默认10秒,2个线程

sysbench cpu --cpu-max-prime=20000 --threads=2 run

sysbench 1.0.9 (using system LuaJIT 2.0.4)

Running the test with following options:

Number of threads: 2 // 指定线程数为2

Initializing random number generator from current time

Prime numbers limit: 20000 // 每个线程产生的素数上限均为2万个

Initializing worker threads...

Threads started! CPU speed:

events per second: 650.74 // 所有线程每秒完成了650.74次event

General statistics:

total time: 10.0017s // 共耗时10秒

total number of events: 6510 // 10秒内所有线程一共完成了6510次event

Latency (ms):

min: 3.03 // 完成1次event的最少耗时3.03秒

avg: 3.07 // 所有event的平均耗时3.07毫秒

max: 3.27 // 完成1次event的最多耗时3.27毫秒

95th percentile: 3.13 // 95%次event在3.13秒毫秒内完成

sum: 19999.91 // 每个线程耗时10秒,2个线程叠加耗时就是20秒

Threads fairness:

events (avg/stddev): 3255.0000/44.00 // 平均每个线程完成3255次event,标准差为44

execution time (avg/stddev): 10.0000/0.00 // 每个线程平均耗时10秒,标准差为0

event:表示完成了几轮的素数计算
stddev(标准差): 在相同时间内,多个线程分别完成的素数计算次数是否稳定,如果数值越低,则表示多个线程的结果越接近(即越稳定)。该参数对于单线程无意义

结果分析

如果有2台服务器进行CPU性能对比,当素数上限和线程数一致时:

相同时间,比较event

相同event,比较时间

时间和event都相同,比较stddev(标准差)

通过sysbench自带的lua脚本对mysql进行测试:

第一步 prepare

sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=sbtest \

--mysql-password=123456 --mysql-db=tempdb oltp\_insert prepare

第二步 run

sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=sbtest --mysql-password=123456 --mysql-db=tempdb oltp\_insert run

第三步 cleanup

sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=sbtest --mysql-password=123456 --mysql-db=tempdb oltp\_insert cleanup

Linkpack

软件安装

i 安装mpi

tar -xvzf l\_mpi\_2018*.tgz

cd l\_mpi\_2018*

./install.sh

ii 安装配置MKL

tar –xvzf l\_mklb\_p\_2019.4.003.tgz

配置优化

BIOS和操作系统配置

Bios (max performance)保持cpu超频锁屏配置

Disable HT

禁止不必要的系统守护进程去掉 将系统启动到init3,不要进入图形模式

systemctl disable selinux

systemctl disable firewalld

init 3

调整hplmkl配置文件

进入mkl的解压目录

cd l\_mklb\_p\_2019.4.003/benchmarks\_2019/linux/mkl/benchmarks/mp\_linpack

ll

total 32344

-rwxr-xr-x 1 root root 1233 Apr 12 2019 build.sh

-rw-r--r-- 1 root root 3178 Apr 12 2019 COPYRIGHT

-rw-r--r-- 1 root root 1125 Apr 14 09:07 HPL.dat

-rw-r--r-- 1 root root 4171 Apr 12 2019 HPL\_main.c

-rw-r--r-- 1 root root 924300 Apr 12 2019 libhpl\_intel64.a

-rw-r--r-- 1 root root 7502 Apr 12 2019 readme.txt

-rwxr-xr-x 1 root root 3105 Apr 12 2019 runme\_intel64\_dynamic

-rwxr-xr-x 1 root root 1064 Apr 12 2019 runme\_intel64\_prv

-rwxr-xr-x 1 root root 3107 Apr 13 18:50 runme\_intel64\_static

-rwxr-xr-x 1 root root 12833177 Apr 12 2019 xhpl\_intel64\_dynamic

-rwxr-xr-x 1 root root 19207340 Apr 12 2019 xhpl\_intel64\_static

-rw-r--r-- 1 root root 84023 Apr 13 18:56 xhpl\_intel64\_static\_outputs.txt

编辑HPL.dat

N : 126336 //根据memory大小计算 大概=开方(内存*0.9/8)

NB : 384 //这个值可以更改以获取最好的测试 结果,但是针对cascade cpu来说384应该是比较优化的值

PMAP : Column-major process mapping

P : 1 # for 2S P==1, for 4S P==2, for 8S P==2 2路,4路,8路,服务器的配置

Q : 2 # for 2S Q==2, for 4S Q==2, for 8S Q==4 2路,4路,8路,服务器的配置

PFACT : Right

NBMIN : 2

NDIV : 2

RFACT : Crout

BCAST : 1ring

DEPTH : 0

SWAP : Binary-exchange

L1 : no-transposed form

U : no-transposed form

EQUIL : no

ALIGN : 8 double precision words

编辑runme\_intel64\_dynamic文件

Vi runme\_intel64\_dynamic

//4路服务器每节点MPI=4

export MPI\_PROC\_NUM=4

export MPI\_PER\_NODE=4

//2路服务器,每节点MPI=2

export MPI\_PROC\_NUM=2

export MPI\_PER\_NODE=2

//2路和4路通用

export MKL\_ENABLE\_INSTRUCTIONS=AVX2 //测试结果最好avx2 指令集 运行在avx2 指令集情况下应该可以达到基频,AVX512 指令集情况下 cpu要低于基频

\#export MKL\_ENABLE\_INSTRUCTIONS=AVX512

\#export MKL\_ENABLE\_INSTRUCTIONS=AVX

\#export MKL\_ENABLE\_INSTRUCTIONS=SSE4\_2

export HPL\_HOST\_ARCH=9

export OMP\_NUM\_THREADS=64 // 服务器总core数目

使用方法

./ runme\_intel64\_dynamic

SPECPOWER

image.png

Java安装

Specpower 2008 测试,在SUT侧,可以使用linux也可以使用windows环境,但是在CCS侧一般情况下均使用windows环境,SUT侧和CCS侧JAVA版本也可以不一致,因此JAVA的安装分别为在linux环境下安装和windows环境下安装

SUT(linux)安装

LINUX: 安装java jdk-11.0.3

下载jdk-11.0.3

https://download.oracle.com/otn/java/jdk/11.0.3+12/37f5e150db5247ab9333b11c1dddcd30/jdk-11.0.3\_linux-x64\_bin.tar.gz?AuthParam=1593588015\_5f197119d7ae5f2820c5cbc602418a89

tar xvzf jdk-11.0.3\_linux-x64\_bin.tar.gz

[root@localhost SPECpower\_ssj2008-1.12]# cd jdk-11.0.3/

image.png

mkdir -p /usr/local/java/jdk1103

image.png

cd jdk-11.0.3

cp -rf * /usr/local/java/jdk1103

image.png

编辑/etc/profile

image.png

添加java 环境变量

JAVA\_HOME=/usr/local/java/jdk1103

JRE\_HOME=$JAVA\_HOME/lib

PATH=$JAVA\_HOME/bin:$PATH

export JAVA\_HOME JRE\_HOME PATH

image.png

使环境变量生效

source /etc/profile

image.png

检查java 版本

image.png

安装IBM JAVA(这部分略)

CCS安装

安装java(jdk-7u80-windows-x64)

1、下载链接(需要先注册oracle用户)

https://www.oracle.com/java/technologies/javase/javase7-archive-downloads.html#license-lightbox

IBM JAVA下载(如果运行IBM java做测试建议参与IBM java 测试结果更好)

https://developer.ibm.com/javasdk/downloads/sdk8/(需要先注册IBM账号)

2、直接点击exe文件安装

测试过程中发现安装jdk-7u80-windows-x64,会出现error miss temp1 错误,不能生产最终报告,换成jdk-11.0.7\_windows-x64\_bin,问题解决

请输入图片描述

CCS要用server,不用使用笔记本。

CCS端需要启动的脚本有runpower.bat、runtemp.bat、rundirector.bat、runccs.bat.

SUT端只需要启动runssj.bat或者runssj.sh(因操作系统而定)

如只想测试性能或者缺失功率仪的情况下,可以把CCS端runpower.bat脚本中“set DEVICE=”设置为“0”,即dummy模式。

CCS端没有连接温度计时,把CCS端runtemp.bat脚本中“set DEVICE=”设置为“1000”,即dummy模式。

Bios和操作系统优化设置

Bios 调整

l Operating Mode: Custom Mode

l Memory Power Management: Automatic

l Page Policy: Adaptive

l Intel VT for Directed I/O(VT-d): Disable

l Memory Data Scrambling: Disable

l Turbo Mode: Disable

l Intel Virtualization Technology: Disable

l Hardware Prefetcher: Disable

l Adjacent Cache Prefetch: Disable

l DCU Streamer Prefetcher: Disable

l Patrol Scrub: Disable

l Ethernet over USB interface: Disable

操作系统调整

l Benchmark started via ssh

l Each JVM instance was affinitized to two threads on a single socket

l echo 960000 > /proc/sys/kernel/sched\_rt\_runtime\_us

l echo 16000000 > /proc/sys/kernel/sched\_latency\_ns

l echo 9000000 > /proc/sys/kernel/sched\_min\_granularity\_ns

配置SUT(需要测specpower 的服务器)

注:获取specpower2008 软件包,windows和linux都使用一个包,其中CCS端都采用windows环境,SUT侧可以是linux,也可以是windows,其中区别是:linux更改并使用runssj.sh脚本,windows环境更改并使用runssj.bat

Windows(2016)

编辑runssj.bat

编辑 SPECpower\_ssj.props

仅仅添加:input.load\_level.number\_warehouses=xxx

注释:warehouse就是每个jvm起到warehouse数量,值一般等于logic process或者logic process*2,如果查看测试结果发现cpu 不能压到100%,就提高warehouse数量

Centos 7.6

编辑runssj.sh(主要调优更改地方)

需要更改部分红色注释

[root@localhost ssj]# vi runssj.sh

\#!/bin/sh

This is an example of what a run script might look like

JVMS=48

Set to TRUE if jvm Director is on this host

LOCAL\_DIRECTOR=FALSE

DIRECTOR\_HOST=10.111.79.192

SETID=sut

DIRECTOR\_PROPFILE=SPECpower\_ssj.props

JAVAOPTIONS\_DIRECTOR="-Djava.awt.headless=true -Xms64m -Xmx256m"

JAVAOPTIONS\_SSJ="-server -Xmx1024m -Xms1024m -Xmn900m -XX:SurvivorRatio=1 -XX:ParallelGCThreads=2 -XX:AllocatePrefetchDistance=256 -XX:AllocatePrefetchLines=4 -XX:LoopUnrollLimit=45 -XX:InitialTenuringThreshold=12 -XX:MaxTenuringThreshold=15 -XX:InlineSmallCode=3900 -XX:MaxInlineSize=270 -XX:FreqInlineSize=2500 -XX:+UseLargePages -XX:+UseParallelOldGC -XX:+UseBiasedLocking -XX:+UseHugeTLBFS -XX:+UseTransparentHugePages"

\#JAVAOPTIONS\_DIRECTOR="-Xms64m -Xmx64m"

JAVA=java

CP="ssj.jar:check.jar:lib/jcommon-1.0.16.jar:lib/jfreechart-1.0.13.jar"

date

$JAVA -version

\#x=1

\#while [ "$x" -le "$JVMS" ]; do

\#echo Starting instance $x

\#$JAVA -cp \$ $JAVAOPTIONS\_SSJ org.spec.power.ssj.SpecPowerSsj -jvmid $x -numJvms $JVMS -director $DIRECTOR\_HOST -seti

d $SETID > ssjOutput.$x &

\#x=\`expr $x + 1\`

\#done

\#if [ "$LOCAL\_DIRECTOR" = "TRUE" ]; then

\#echo Starting Director

\#$JAVA -cp \$ $JAVAOPTIONS\_DIRECTOR org.spec.power.ssj.Director -propfile $DIRECTOR\_PROPFILE

\#else

\#wait

\#fi

\#date

x=1

numactl --physcpubind=0,48 --membind=0 $JAVA -cp ${CP} $JAVAOPTIONS\_SSJ org.spec.power.ssj.SpecPowerSsj -jvmid $x -numJvms $

JVMS -director $DIRECTOR\_HOST -setid $SETID > ssjOutput.$x &

…………………………………………………………….

x=\`expr $x + 1\`

numactl --physcpubind=47,95 --membind=1 $JAVA -cp ${CP} $JAVAOPTIONS\_SSJ org.spec.power.ssj.SpecPowerSsj -jvmid $x -numJvms

$JVMS -director $DIRECTOR\_HOST -setid $SETID > ssjOutput.$x &

优化要点需要更改部分:

1、JVMS=xxx

指定jvm的数量,一般是2个或者4个logic processor 对应1个jvm

2、DIRECTOR\_HOST=10.111.79.192

指定CCS的ip地址

3、JAVAOPTIONS_DIRECTOR="-Djava.awt.headless=true -Xms64m -Xmx256m"

一般情况下不需要更改

JAVAOPTIONS\_SSJ="-server -Xmx1024m -Xms1024m -Xmn900m -XX:SurvivorRatio=1 -XX:TargetSurvivorRatio=99 -XX:ParallelGCThreads=2 -XX:AllocatePrefetchDistance=256 -XX:AllocatePrefetchLines=4 -XX:LoopUnrollLimit=45 -XX:InitialTenuringThreshold=12 -XX:MaxTenuringThreshold=15 -XX:InlineSmallCode=3900 -XX:MaxInlineSize=270 -XX:FreqInlineSize=2500 -XX:+UseLargePages -XX:+UseParallelOldGC -XX:+UseBiasedLocking -XX:+UseHugeTLBFS -XX:+UseTransparentHugePages -XX:LargePageSizeInBytes=2m"

JAVAOPTIONS\_DIRECTOR="-Xms64m -Xmx64m"设置启动JVM的相关参数,这个值会根据具体服务器配置有更改,还有可能在运行脚本中报错,需要做微调,主要是-Xmx1024m -Xms1024m -Xmn900m 这几个值,可以参考spec.org测试参数,例如

http://spec.org/power\_ssj2008/results/res2019q2/power\_ssj2008-20190313-00934.html,在spec.org 中有参数 -XX:+AggressiveOpts,在runjss.sh中报错,需要删除掉

4、设置java的启动路径,如果已经加入了/etc/profile,这里就直接等于java就ok

JAVA=java

5、通过numactl 做jvm和core的绑定,只需要更改 --physcpubind=0,48 --membind=0 两个参数,一般情况1个JVM instance was affinitized to two threads on a single socket

编辑SPECpower\_ssj.props

仅仅添加

input.load\_level.number\_warehouses=xxx

注释同windows 环境一样

配置CCS(压力服务器)

进入目录cd \SPECpower\_ssj2008-1.12\PTDaemon

编辑runpower.bat

[root@localhost PTDaemon]# more runpower.bat

set NETWORK\_PORT=8888

:: Set DEVICE to the power analyzer device you will use (0=dummy device)

:: use the numeric value found in the help output of the ptd executable

set DEVICE=0

:: Set DEVICE\_PORT to the serial port you will connect your power analyzer to

set DEVICE\_PORT=COM1

可以设置三种功耗仪COM接口功耗仪,USB接口功耗仪和IP接口功耗仪,以及没有功耗仪,输出功耗固定在20W

1)针对COM口功耗仪更改

2)针对USB口功耗仪更改

set DEVICE=49

set DEVICE\_PORT=C2QF19039V

3)针对IP地址的功耗仪更改

set DEVICE=47

set DEVICE\_PORT=xxx.xxx.xxx.xxx 功耗仪IP

编辑runtemp.bat (没有温度要求此文件不需要更改)

进入目录cd \SPECpower\_ssj2008-1.12\ssj

编辑rundirector.bat

:: Number of hosts

set NUM\_HOSTS=1

设置需要测试SUT数量, 比如刀片测试,16把刀片插满测试,NUM­\_HOST=16

:: Set java options for director

set JAVAOPTIONS\_DIRECTOR=-Xms64m -Xmx1024m

设置director内存大小,当接入HOSTs比较多的时候,需要扩大这个值,否则会出现链接不成功,曾经在移动测试时候针对多个HOSTS测试,只能使用oracle JAVA,因为IBM J9VM 对内存支持很低,不能增加。移动测试使用oracle 7u79,使用java版本要慎重,曾经使用oracle JDK 8u60,但是在生产报告时候,在runccs.bat,会报 error miss temp1 错误,导致不能生产报告。更换oracle JDK 7u79,测试正常。本次测试使用oracle JDK 7u80,再生成报告时候也报error miss temp1错误,更换为jdk 11.0.7测试正常

移动测试设置为:

image.png

:: Properties file to be passed to Director

set PROPFILE=SPECpower\_ssj.props

:: Set JAVA to Java.exe path.

set JAVA=java

设置java路径环境变量,如果在cmd或者linux环境 能够直接执行java -version,那此处就不用更改

编辑runccs.bat

编辑SPECpower\_ssj\_config\_sut.props

更改报告中显示数据

image.png

image.png

测试启动步骤

1、 CCS端启动runpower.bat

2、 CCS端启动runtemp.bat

3、 CCS端启动rundirector.bat

4、 在SUT端启动 runjss.sh(linux)/runjss.bat(windows)

5、 CCS端启动runccs.bat

运行完成后,通过显示信息查看测试结果SPECpowerZ主目录下Resultes下

C:\Users\Administrator\Desktop\SPECpower\_ssj2008-1.12\ccs\..\Results\ssj.0016\ssj.0016-main.html

请输入图片描述

查看结果中,100%时候,cpu的实际利用率是不是接近100%,截图中发现实际load 才86.9%,测试结果肯定不会很好

image.png

内存测试

内存性能测试POC,有打开xx和不打开xx的测试结果,用户没有特殊要求,取结果更好的值:

BIOS设置

bios设置 ,确保要求服务器处于超频稳定状态下进行,除非用户有特殊要求.

BIOS Setting

image.png

禁止selinux和防火墙

systemctl stop firewalld

\#vi /etc/selinux/config

将SELINUX=enforcing改为SELINUX=disabled

cpupower 设置

cpupower frequency-set -g performance

tune模式设置

tuned-adm profile throughput-performance

Stream

gcc -O -fopenmp -DSTREAM\_ARRAY\_SIZE=100000000 -DNTIME=20 stream.c -o stream.o

其它更多参数详细见:http://www.cs.virginia.edu/stream/ref.html

1.STREAM\_ARRAY\_SIZE :调节array大小,设置方法100M(注意设置合适的大小,也许你只要10M)的方法:

gcc -O -DSTREAM\_ARRAY\_SIZE=100000000 stream.c -o stream.100M

2.NTIMES :调节stream在每个kernel的运行次数,输出最好的一次。设置7次的方法。

可通过-DNTIMES=7调节。

3.-DOFFSET设置

4.多核情况下,通过 -O -fopenmp 增加多核OpenMP支持

指令编译文件stream benchmark,运行命令./ stream.o。出现内存测试的程序的结果:

If you want to run STREAM on multiple processors, then the situation is not quite so easy.

      gcc -fopenmp -D_OPENMP stream.c -o stream 
      export OMP_NUM_THREADS=2
     ./stream

Sysbench

安装步骤

参照CPU测试中sysbench安装过程

使用方法

Sysbench --test =memory 进行内存测试

参数说明:

--memory-total-size 指定测试内存中传输的数据量大小

--memory-oper 指定内存测试方法,包括read、write和rw

--memory-access-mode 指定内存的访问模式,包括顺序(seq)和随机(rnd)

--memory-block-size 指定测试内存的block大小

--num-threads 指定测试线程数

举例如下:

测试顺序读:

sysbench --test=memory --memory-total-size=10G --memory-oper=read --memory-access-mode=seq run

测试随机读:

sysbench --test=memory --memory-total-size=10G --memory-oper=read --memory-access-mode=rnd run

\#结论:顺序读比随机读快很多

测试顺序写:

sysbench --test=memory --memory-total-size=10G --memory-oper=write --memory-access-mode=seq run

测试随机写

sysbench --test=memory --memory-total-size=10G --memory-oper=write --memory-access-mode=rnd run

\#结论:随机写比有序写速度快,原因为:内存排序需要时间

转载申明

转载请注明出处:365文档

本文二维码
最后修改:2023 年 10 月 24 日
如果觉得我的文章对你有用,请随意赞赏