vdbench

Oracle维护的一个磁盘IO性能工具,用于产生磁盘IO 负载测试磁盘性能和数据完整性。

使用前准备

下载解压即可使用。一般不需要编译,如果运行环境存在,可以直接运行。当在ARM服务器上执行时会遇到一些问题,这里介绍如何解决。

测试运行环境:

#给脚本赋予运行权限
chmod +x vdbench
#执行测试
./vdbench -t
me@ubuntu:~/vdbench50407$ ./vdbench -t
-bash: ./vdbench: /bin/csh: bad interpreter: No such file or directory

如果出现csh找不到的问题,需要安装csh。

  • vdbench 5.04.05的vdbench脚本是c shell script文件。
  • vdbench 5.04.07是bash script。

建议使用5.04.07。

me@ubuntu:~/vdbench50407$ file vdbench
vdbench: Bourne-Again shell script, ASCII text executable

sudo apt install csh

如果缺少jre,安装jre

sudo apt install default-jre

vdbench 5.04.05

出现java版本检测不合法的问题。

me@ubuntu:~/vdbench504$ ./vdbench -t


Vdbench distribution: vdbench504
For documentation, see 'vdbench.pdf'.

*
*
*
* Minimum required Java version for Vdbench is 1.5.0;
* You are currently running 10.0.2
* Vdbench terminated.
*
*
*

CTRL-C requested. vdbench terminating

vdbench 5.04.07

已经移除java版本检测checkJavaVersion();。移除原因作者未说明,详细请参考版本发布说明。


    // Removed as per 50407 because of java 1.10.x
    //checkJavaVersion();

    //....

     private static void checkJavaVersion()
  {
    if (common.get_debug(common.USE_ANY_JAVA))
      return;
    if (!JVMCheck.isJREValid(System.getProperty("java.version"), 1, 7, 0))
    {
      System.out.print("*\n*\n*\n");
      System.out.println("* Minimum required Java version for Vdbench is 1.7.0; \n" +
                         "* You are currently running " + System.getProperty("java.version") +
                         "\n* Vdbench terminated.");
      System.out.println("*\n*\n*\n");

      System.exit(-99);
    }
  } 

版本发布说明oracle vdbench 50407rc29

50407rc29

The check to make sure you are running java 1.7 or higher has been removed.

ARM共享库aarch64.so问题

在ARM服务器上,会出现共享库不匹配的问题。

me@ubuntu:~$ ./vdbench -t


Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Vdbench distribution: vdbench50407 Tue June 05  9:49:29 MDT 2018
For documentation, see 'vdbench.pdf'.

15:11:24.571 Created output directory '/home/me/output'
15:11:24.720 input argument scanned: '-f/tmp/parmfile'
15:11:24.870 Starting slave: /home/me/vdbench SlaveJvm -m localhost -n localhost-10-190124-15.11.24.528 -l localhost-0 -p 5570
15:11:24.892
15:11:24.893 File /home/me/linux/aarch64.so does not exist.
15:11:24.893 This may be an OS that a shared library currently
15:11:24.893 is not available for. You may have to do your own compile.
15:11:24.893 t: java.lang.UnsatisfiedLinkError: Can't load library: /home/me/linux/aarch64.so
15:11:24.893
15:11:24.894 Loading of shared library /home/me/linux/aarch64.so failed.
15:11:24.894 There may be issues related to a cpu type not being
15:11:24.894 acceptable to Vdbench, e.g. MAC PPC vs. X86
15:11:24.894 Contact me at the Oracle Vdbench Forum for support.
15:11:24.894
15:11:25.397
15:11:25.397 Failure loading shared library
15:11:25.398
java.lang.RuntimeException: Failure loading shared library
        at Vdb.common.failure(common.java:350)
        at Vdb.common.get_shared_lib(common.java:1103)
        at Vdb.Native.<clinit>(Native.java:31)
        at Vdb.common.signal_caller(common.java:737)
        at Vdb.ConnectSlaves.connectToSlaves(ConnectSlaves.java:98)
        at Vdb.Vdbmain.masterRun(Vdbmain.java:814)
        at Vdb.Vdbmain.main(Vdbmain.java:628)

原因是vdbench根目录下/linux/linux64.so是为x86编译的,需要重新编译linux64.so

me@ubuntu:~$ file linux/linux64.so
linux/linux64.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=34a31f32956f21153c372a95e73c02e84ddd29f8, not stripped

ARM版本的aarch64.so编译

下载,解压源码包: 下载地址 需要同意license

unzip vdbench50407.src.zip

进入src创建linux目录

cd src/
mkdir linux

进入Jni修改make.linux。主要修改: + 修改vdb为源码包src的路径 + 修改java为jdk路径。一般在/usr/lib/jvm/下 + 去除-m32m64选项

cd Jni/
vim make.linux

修改前:

vdb=$mine/vdbench504
java=/net/sbm-240a.us.oracle.com/export/swat/swat_java/linux/jdk1.5.0_22/
jni=$vdb/Jni

INCLUDES32="-w -m32 -DLINUX -I$java/include -I/$java/include/linux -I/usr/include/ -fPIC"
INCLUDES64="-w -m64 -DLINUX -I$java/include -I/$java/include/linux -I/usr/include/ -fPIC"

gcc  -o   $vdb/linux/linux32.so vdbjni.o vdblinux.o vdb_dv.o vdb.o chmod.o -lm -shared  -m32 -lrt

gcc  -o   $vdb/linux/linux64.so vdbjni.o vdblinux.o vdb_dv.o vdb.o chmod.o -lm -shared -m64 -lrt

修改后:


vdb=/home/me/vdbench50407src/src/
java=/usr/lib/jvm/java-11-openjdk-arm64/
jni=$vdb/Jni

INCLUDES32="-w -DLINUX -I$java/include -I/$java/include/linux -I/usr/include/ -fPIC"
INCLUDES64="-w -DLINUX -I$java/include -I/$java/include/linux -I/usr/include/ -fPIC"


gcc  -o   $vdb/linux/linux32.so vdbjni.o vdblinux.o vdb_dv.o vdb.o chmod.o -lm -shared -lrt

gcc  -o   $vdb/linux/linux64.so vdbjni.o vdblinux.o vdb_dv.o vdb.o chmod.o -lm -shared -lrt

执行make.linux,会在src/linux/下生成linux32.so和linux64.so文件,这里我们只需要使用到64位的文件。重命名linux64.so并复制到二进制包(注意不是源码包)的linux/目录下即可。

me@ubuntu:~/vdbench50407src/src/Jni$ ./make.linux
target directory: /home/me/vdbench50407src/src/
Compiling 32 bit
Linking 32 bit

Compiling 64 bit
Linking 64 bit

mv linux64.so aarch64.so
cp linux64.so ~/vdbench50407/linux/

执行测试

me@ubuntu:~/vdbench50407$ ./vdbench -t


Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Vdbench distribution: vdbench50407 Tue June 05  9:49:29 MDT 2018
For documentation, see 'vdbench.pdf'.

16:24:23.960 input argument scanned: '-f/tmp/parmfile'
16:24:24.062 Starting slave: /home/me/vdbench50407/vdbench SlaveJvm -m localhost -n localhost-10-190124-16.24.23.859 -l localhost-0 -p 5570
16:24:25.470 All slaves are now connected
16:24:25.710 Vdbench will attempt to expand a disk file if the requested file size is a multiple of 1mb
16:24:25.710 lun=/tmp/quick_vdbench_test does not exist or is too small. host=localhost
16:24:29.004 Starting RD=SD_format; I/O rate: Uncontrolled MAX; elapsed=(none); For loops: threads=2 iorate=max
16:24:29.552 All sequential workloads on all slaves are done.
16:24:29.553 This triggers end of run inspite of possibly some non-sequential workloads that are still running.

Jan 24, 2019    interval        i/o   MB/sec   bytes   read     resp     read    write     read    write     resp  queue  cpu%  cpu%
                               rate  1024**2     i/o    pct     time     resp     resp      max      max   stddev  depth sys+u   sys
16:24:30.156           1      320.0    40.00  131072   0.00    0.739    0.000    0.739     0.00    32.50    2.466    0.2  36.5  25.0
16:24:30.181     avg_2-1        0.0     0.00       0   0.00    0.000    0.000    0.000     0.00     0.00    0.000    0.0   NaN   NaN
16:24:31.001 Starting RD=rd1; I/O rate: 100; elapsed=5; For loops: None

Jan 24, 2019    interval        i/o   MB/sec   bytes   read     resp     read    write     read    write     resp  queue  cpu%  cpu%
                               rate  1024**2     i/o    pct     time     resp     resp      max      max   stddev  depth sys+u   sys
16:24:32.018           1       84.0     0.08    1024  53.57    0.013    0.010    0.015     0.03     0.05    0.006    0.0  19.2   1.5
16:24:33.011           2      103.0     0.10    1024  52.43    0.012    0.010    0.014     0.05     0.02    0.005    0.0   5.0   0.5
16:24:34.011           3      103.0     0.10    1024  51.46    0.012    0.011    0.013     0.02     0.02    0.004    0.0   3.5   1.0
16:24:35.009           4      106.0     0.10    1024  50.94    0.013    0.009    0.017     0.02     0.12    0.012    0.0   4.5   1.0
16:24:36.013           5      106.0     0.10    1024  48.11    0.012    0.011    0.013     0.04     0.02    0.005    0.0   5.5   1.0
16:24:36.053     avg_2-5      104.5     0.10    1024  50.72    0.012    0.010    0.015     0.05     0.12    0.007    0.0   4.6   0.9
16:24:37.008 Vdbench execution completed successfully. Output directory: /home/me/vdbench50407/output

me@ubuntu:~/vdbench50407$

环境准备完毕

至此环境准备完毕,vdbench可以在ARM服务器上运行测试。