vdbench在ARM服务器上出现共享库aarch64.so问题

在ARM服务器上,运行vdbench出现共享库不匹配的解决方法 #

报错如下:

[root@axing 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'.  

00:17:40.900 Created output directory '/vdbench50407/output'  
00:17:41.008 input argument scanned: '-f/tmp/parmfile'  
00:17:41.072 Starting slave: /vdbench50407/vdbench SlaveJvm -m localhost -n localhost-10-210914-00.17.40.873 -l   localhost-0 -p 5570     
00:17:41.094   
00:17:41.094 File /vdbench50407/linux/aarch64.so does not exist.  
00:17:41.094 This may be an OS that a shared library currently   
00:17:41.094 is not available for. You may have to do your own compile.  
00:17:41.094 t: java.lang.UnsatisfiedLinkError: Can't load library: /vdbench50407/linux/aarch64.so  
00:17:41.094   
00:17:41.094 Loading of shared library /vdbench50407/linux/aarch64.so failed.  
00:17:41.094 There may be issues related to a cpu type not being   
00:17:41.094 acceptable to Vdbench, e.g. MAC PPC vs. X86  
00:17:41.094 Contact me at the Oracle Vdbench Forum for support.  
00:17:41.094  
00:17:41.595  
00:17:41.595 Failure loading shared library  
00:17:41.595  
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)  
[root@axing vdbench50407]#   

原因

是vdbench根目录下linux/linux64.so是为x86编译的,需要重新编译linux64.so为ARM版本;

[root@axing linux]# pwd  
/vdbench50407/linux  
[root@axing linux]# ls  
config.sh  linux32.so  linux64.so  sparc64.so  
[root@axing linux]# file linux64.so   
linux64.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]  =34a31f32956f21153c372a95e73c02e84ddd29f8, not stripped  
[root@axing linux]#   

解决办法 —— ARM版本的aarch64.so编译(仅适用于vdbench50407版本)

下载vdbench源码包:下载地址
解压后进入vdbench目录,创建linux目录;

// 解压源码包,-d:指定解压到指定目录  
[root@axing ~]# ls  
vdbench50407.src.zip  vdbench50407.zip  
[root@axing ~]# unzip vdbench50407.src.zip -d /vdbench  

// 进入解压后源码包目录  
[root@axing ~]# cd /vdbench  

// 创建存放aarch64.so的目录  
[root@axing vdbench]# mkdir linux  

进入Jni修改make.linux
主要修改点:
1、vdbench源码目录;
2、java路径;
3、去除-m32和m64选项;

[root@axing vdbench]# cd src/Jni/  
[root@axing Jni]# pwd  
/vdbench/src/Jni  
[root@axing Jni]# vim make.linux  

示例如下:

vdb=/vdbench  
java=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-1.h5.ky10.aarch64/  
jni=$vdb/src/Jni  

echo target directory: $vdb  

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"  

cd /tmp
rm *.o 2>/dev/null

echo Compiling 32 bit

rm $vdb/linux/linux32.so 2>/dev/null
gcc ${INCLUDES32} -c $jni/vdbjni.c
gcc ${INCLUDES32} -c $jni/vdblinux.c
gcc ${INCLUDES32} -c $jni/vdb_dv.c
gcc ${INCLUDES32} -c $jni/vdb.c
gcc ${INCLUDES32} -c $jni/chmod.c

echo Linking 32 bit
echo

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

chmod 777 $vdb/linux/linux32.so

cd /tmp
rm *.o 2>/dev/null

echo Compiling 64 bit
rm $vdb/linux/linux64.so 2>/dev/null
gcc ${INCLUDES64} -c $jni/vdbjni.c
gcc ${INCLUDES64} -c $jni/vdblinux.c
gcc ${INCLUDES64} -c $jni/vdb_dv.c
gcc ${INCLUDES64} -c $jni/vdb.c
gcc ${INCLUDES64} -c $jni/chmod.c

echo Linking 64 bit
echo

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

chmod 777 $vdb/linux/linux64.so 2>/dev/null

执行make.linux,会在/vdbench/linux/下生成linux32.so和linux64.so文件。

[root@axing Jni]# ./make.linux
target directory: /vdbench
Compiling 32 bit
Linking 32 bit

Compiling 64 bit
Linking 64 bit

[root@axing Jni]# cd /vdbench/linux/
[root@axing linux]# ls
linux32.so  linux64.so

如果执行’./make/linux’后有如下报错’gcc: error: /vdbench504/src/Jni/vdbjni.c: No such file or directory’。是因为JAVA安装不完全,可以使用’yum install java-1.8.0-openjdk*’安装后解决

这里我们只需要使用到64位的文件。重命名linux64.so并复制到二进制包(注意不是源码包)的linux/目录下即可。

// 重命名并拷贝编译后的linux64.so到vdbench二进制包目录下
[root@axing linux]# cp linux64.so aarch64.so
[root@axing linux]# ls
aarch64.so  linux32.so  linux64.so
[root@axing linux]# cp aarch64.so /vdbench50407/linux/
[root@axing linux]# ls /vdbench50407/linux/
aarch64.so  config.sh  linux32.so  linux64.so  sparc64.so
[root@axing linux]# 

执行测试:

// 执行vdbench脚本需要用到csh,如果没有需要先安装
[root@axing vdbench50407]# csh
-bash: csh: command not found
[root@axing vdbench50407]# yum install -y csh

// 执行vdbench脚本测试,-t:测试一下工具能不能用
[root@axing 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'.

00:28:42.406 input argument scanned: '-f/tmp/parmfile'
00:28:42.454 Starting slave: /vdbench50407/vdbench SlaveJvm -m localhost -n localhost-10-210914-00.28.42.310 -l localhost-0 -p 5570   
00:28:42.685 All slaves are now connected
00:28:44.001 Starting RD=rd1; I/O rate: 100; elapsed=5; For loops: None

Sep 14, 2021    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
00:28:45.037           1       51.0     0.05    1024  43.14    0.003    0.003    0.003     0.01     0.01    0.002    0.0  10.0   0.9
00:28:46.006           2       88.0     0.09    1024  57.95    0.003    0.003    0.003     0.01     0.01    0.001    0.0   3.5   1.0
00:28:47.006           3      108.0     0.11    1024  48.15    0.003    0.003    0.003     0.01     0.01    0.001    0.0   1.5   0.0
00:28:48.006           4      101.0     0.10    1024  53.47    0.003    0.002    0.003     0.01     0.01    0.001    0.0   1.0   0.0
00:28:49.009           5       88.0     0.09    1024  56.82    0.002    0.002    0.003     0.01     0.01    0.001    0.0   0.5   0.0
00:28:49.025     avg_2-5       96.3     0.09    1024  53.77    0.003    0.002    0.003     0.01     0.01    0.001    0.0   1.6   0.3
00:28:49.867 Vdbench execution completed successfully. Output directory: /vdbench50407/output 
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
LinuxOps工具

vdbench基础使用指南

2025-4-3 11:43:58

LinuxOps工具

Gitlab自定义机器人

2025-4-3 11:56:35

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
Index