当前位置: 首页 > news >正文

在国产openEuler ARM服务器上编译运行vdbench 50407,我踩过的那些坑(含完整配置流程)

在国产openEuler ARM服务器上编译运行vdbench 50407的完整实战指南

最近在国产化替代项目中遇到一个典型场景:客户要求使用搭载openEuler 22.03 LTS的ARM服务器对存储系统进行基准测试。作为行业标准的vdbench工具,官方提供的二进制包并不直接支持ARM架构,必须从源码编译。这个过程中踩了不少坑,特别是JNI环境配置和源码兼容性问题。本文将完整记录从环境准备到最终运行的全过程,重点解决那些令人头疼的编译错误。

1. 环境准备与基础配置

1.1 系统与硬件确认

首先确认服务器环境信息:

cat /etc/os-release uname -a

输出应显示类似以下内容:

NAME="openEuler" VERSION="22.03 (LTS-SP4)" Linux 5.10.0-216.0.0.115.oe2203sp4.aarch64

硬件架构必须是aarch64(ARM64),这是后续编译的基础。

1.2 安装必要依赖

openEuler使用dnf作为包管理器,安装Java开发环境:

sudo dnf install -y java-11-openjdk java-11-openjdk-devel make gcc

验证Java安装:

java -version javac -version

1.3 获取vdbench源码

从Oracle官网下载两个关键文件:

  1. vdbench50407.src.zip(源码包)
  2. vdbench50407.zip(二进制包,包含基础脚本)

注意:Oracle下载需要注册账号,且可能受地域限制影响下载速度

2. 源码编译与问题解决

2.1 源码解压与目录准备

unzip vdbench50407.src.zip -d ~/vdbench50407-src/ cd ~/vdbench50407-src/src/ mkdir linux

2.2 修改make.linux配置

进入Jni目录,编辑make.linux文件:

cd Jni sed -i 's#vdb=$mine/vdbench504#vdb=~/vdbench50407-src/src#g' make.linux

关键修改点:

  1. 更新Java路径(使用实际路径):
JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac)))) sed -i "s#java=.*#java=${JAVA_HOME}#g" make.linux
  1. 移除-m32和-m64编译选项(ARM架构不需要):
sed -i 's/-m32//g' make.linux sed -i 's/-m64//g' make.linux

2.3 解决jni.h缺失问题

编译时可能遇到第一个典型错误:

fatal error: jni.h: No such file or directory

解决方法:

  1. 确认jni.h位置:
find /usr -name 'jni.h'
  1. 在make.linux中添加包含路径:
JNI_INCLUDE=$(find /usr -name 'jni.h' | head -1 | xargs dirname) sed -i "/^CFLAGS=/ s@$@ -I${JNI_INCLUDE}@" make.linux

2.4 解决ptod_txt重复定义问题

第二个常见错误:

multiple definition of `ptod_txt'

修改vdbjni.h文件:

sed -i 's/char ptod_txt\[256\];/extern char ptod_txt[256];/' vdbjni.h

这个修改将变量声明改为extern,避免链接时的重复定义。

3. 编译执行与验证

3.1 执行编译

./make.linux

成功编译后会在linux目录生成linux64.so文件。

3.2 准备运行环境

解压二进制包:

unzip vdbench50407.zip -d ~/vdbench50407/

复制编译好的动态库并重命名:

cp ~/vdbench50407-src/src/linux/linux64.so ~/vdbench50407/linux/aarch64.so

3.3 测试运行

cd ~/vdbench50407 ./vdbench -t

成功输出应包含类似内容:

16:06:43.001 Starting slave: localhost 16:06:43.012 All slaves are now connected

4. 高级配置与性能调优

4.1 存储测试配置文件示例

创建test.conf文件:

hd=default,vdbench=/root/vdbench50407,user=root hd=hd1,system=localhost sd=sd1,hd=hd1,lun=/dev/sdb,openflags=o_direct wd=wd1,sd=sd1,xfersize=4k,rdpct=100 rd=rd1,wd=wd1,iorate=max,elapsed=60,interval=5

4.2 ARM架构特定优化

  1. 调整JVM参数:
export VDBENCH_JAVA_OPTS="-XX:+UseParallelGC -Xms2g -Xmx2g"
  1. 文件描述符限制:
ulimit -n 65536

4.3 结果分析关键指标

vdbench输出中的重要指标:

指标名称含义理想值参考
IOPS每秒I/O操作数越高越好
MB/sec吞吐量接近理论值
resp time响应时间(ms)<10ms
cpu_utilCPU利用率(%)<70%

5. 常见问题排查指南

5.1 动态库加载失败

错误现象:

Exception in thread "main" java.lang.UnsatisfiedLinkError: /root/vdbench50407/linux/aarch64.so

解决方法:

  1. 检查文件权限:
chmod +x ~/vdbench50407/linux/aarch64.so
  1. 验证依赖:
ldd ~/vdbench50407/linux/aarch64.so

5.2 Java版本兼容性问题

推荐使用Java 8或11,避免使用过高版本。切换Java版本:

sudo alternatives --config java

5.3 性能结果异常排查步骤

  1. 检查磁盘I/O调度器:
cat /sys/block/sdb/queue/scheduler
  1. 监控系统资源:
vmstat 1 iostat -dx 1
  1. 验证direct I/O是否生效:
sd=sd1,...,openflags=o_direct

在ARM架构的openEuler系统上编译vdbench确实会遇到一些特有的挑战,特别是当工具链和依赖关系不完全匹配时。经过多次实践,发现最关键的是准确配置Java Native Interface环境,以及处理好源码中的架构相关定义。

http://www.jsqmd.com/news/515790/

相关文章:

  • MQTTPubSubClient_Generic:嵌入式多平台通用MQTT客户端库
  • 如何让AI突破视觉极限?多光谱目标检测技术全解析
  • 【大厂产品专家实战指南】需求文档撰写全流程:从分类到评审后的优化
  • 51单片机如何用UART串口实现printf调试?完整代码+避坑指南
  • NTC热敏电阻测温原理与嵌入式工程实现
  • 晶振PCB布局与EMI辐射抑制关键技术
  • 深度学习项目训练环境镜像:5分钟快速部署,开箱即用实战教程
  • cv_unet_image-colorization模型微调实战:使用自定义数据集优化着色效果
  • 嵌入式C语言宏定义工程实践与硬件抽象技巧
  • CosyVoice模型Docker化部署指南:实现环境隔离与快速迁移
  • 大疆机场边缘计算模块安装指南:从硬件选型到网络配置全流程
  • 【2026年小米暑期实习算法岗- 3月21日 -第一题- 装备选配】(题目+思路+JavaC++Python解析+在线测试)
  • .NET程序集合并的现代化解决方案:高效打包与部署实践指南
  • CLIP-GmP-ViT-L-14与ChatGPT联动:构建多模态智能问答系统
  • microrender:ESP32/ESP8266轻量HTML预渲染库
  • RK3568开发板开机Logo替换避坑指南:从编译内核到烧录boot.img的全流程解析
  • 解决Cadence输出BOM时PCB_Footprint缺失问题:常见错误排查指南
  • KickFFT:面向MCU的轻量级定点DFT库实现
  • STC15单片机RS-485通信实战:从硬件连接到代码调试(附避坑指南)
  • BepInEx插件框架:新手问题全解析与实战解决方案
  • Qwen3-ForcedAligner-0.6B在嵌入式Linux系统的优化部署
  • 嵌入式参数存储可靠性设计:结构体编译期检查实践
  • 深求·墨鉴真实作品分享:从扫描件到Markdown的完美转换
  • UnityBookPageCurl翻页效果实战手册:从故障排除到性能优化
  • 3个步骤让你的Windows电脑也能像iPhone一样预览HEIC照片
  • SU2多物理场仿真实战指南:从环境配置到工程应用
  • OpenClaw故障自愈设计:QwQ-32B模型异常操作回滚机制
  • Qwen Pixel Art效果展示:支持透明背景、多尺寸输出、风格一致性控制
  • Ubuntu 24.04服务器SSH配置全攻略:从安装到密钥登录(附安全建议)
  • SparkFun Qwiic超声波传感器Arduino库详解