RISC-V公测平台发布 · 数据库在RISC-V服务器上的适配评估
前言
上一期讲到YCSB在RISC-V服务器上对MySQL进行性能测试(RISC-V公测平台发布 · 使用YCSB测试SG2042上的MySQL性能),在这一期文章中,我们继续深入讨论RISC-V+数据库的应用。本期就继续利用HS-2平台来测试数据库软件在RISC-V服务器上的兼容性。
参与此次实验的数据库如下:
Redis
MongoDB5
PostgreSQL
TiDB
MySQL/MariaDB
实验机配置如下:
处理器:SG2042(64核心)
内存:32GB
操作系统:Ubuntu 22.10 (GNU/Linux 6.1.31 riscv64)
一、MySQL/MariaDB
在上一期中,为了测试YCSB(Yahoo! Cloud Serving Benchmark)性能测试软件,顺便测试了MySQL在RISC-V服务器上的兼容性。
MySQL数据库服务是一个完全托管的数据库服务,可使用世界上最受欢迎的开源数据库来部署云原生应用程序。它是百分百由MySQL原厂开发,管理和提供支持。
直接使用包管理器安装MySQL:
sudo apt-get install mysql-server
当然除了包管理器安装,也尝试了编译安装MySQL,结果提示编译失败,因此,MySQL不能直接通过编译安装MySQL,而需要在编译之前打上相关补丁,然后再编译。
同时也测试了MariaDB在RISC-V服务器上的兼容性,MariaDB是一个通用的开源关系数据库管理系统。它是世界上最受欢迎的数据库服务器之一, MariaDB在GPLv2开源许可下发布,并保证保持开源。
先尝试直接通过包管理器安装:
sudo apt-get install mariadb-server
在通过包管理器安装并正常运行后,接下来就尝试通过编译安装MariaDB。
先下载MariaDB的源码包并解压:
wget
https://dlm.mariadb.com/3239838/MariaDB/mariadb-11.0.2/source/mariadb-11.0.2.tar.gz
进入MariaDB源码文件夹:
tar -xzvf mariadb-11.0.2.tar.gz
执行cmake并编译:
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mariadb -DMYSQL_DATADIR=/home/mariadb
-DSYSCONFDIR=/etc -DWITHOUT_TOKUDB=1 -DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STPRAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWIYH_READLINE=1 -DWIYH_SSL=system -DVITH_ZLIB=system -DWITH_LOBWRAP=0
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
make -j64
sudo make install -j1
打开配置文件并编辑:
vim /home/mariadb/my.cnf

启动服务器并测试是否能连接数据库服务器:
sudo /usr/local/mariadb/bin/mysqld_safe --user=mysql --skip-grant-tables
/usr/local/mariadb/bin/mariadb

连接成功!
二、Redis
接下来就是Redis了,Redis全称为REmote DIctionary Server(Redis), 由 Salvatore Sanfilippo编写。是一个开源的、使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)的存储数据库,并提供多种语言的 API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
通过APT安装Redis:
sudo apt install redis-server
然后启动Redis服务:
sudo servcie redis-server start
进入redis-cli:
redis-cli
如果能进入Redis Shell那就说明安装成功。
编译安装:
wget
https://github.com/redis/redis/archive/refs/tags/7.0.12.tar.gz
解压:
tar -xzvf 7.0.12.tar.gz
进入Redis文件夹:
cd redis-7.0.12/
编译:
make BUILD_TLS=yes USE_SYSTEMD=yes -j64
测试一下(可选):
make test
安装:
sudo make install
启动服务器:
redis-server
redis-server &(后台运行)
运行redis-benchmark压力测试(10万次请求,20个客户端),以CSV文件形式输出。
redis-benchmark -n 100000 -c 20 --csv
结果如下:

因此Redis通过APT安装和编译安装两种方式均可以。
三、MongoDB
接下来就是MongoDB,MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
通过APT安装MongoDB:
sudo apt install mongodb
结果提示不支持通过apt安装,因此我们选择源码编译安装。
下载源码包:
wget
https://fastdl.mongodb.org/src/mongodb-src-r6.0.8.tar.gz
解压缩:
tar -xzvf mongodb-src-r6.0.8.tar.gz
进入mongodb源码文件夹:
cd mongodb-src-r6.0.8/
编译:
python3 buildscripts/scons.py install-mongod -j64
结果编译失败:
![]()
在安装相关的包以后,依旧无法编译。
四、PostgreSQL
然后就是PostgreSQL,PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。PostgreSQL 开发者把它念作 post-gress-Q-L。PostgreSQL 的 Slogan 是 "世界上最先进的开源关系型数据库"。
通过APT安装:
apt-get install postgresql postgresql-client
测试一下:
sudo -i -u postgres
psql

编译安装:
下载源代码:
wget
https://ftp.postgresql.org/pub/source/v15.3/postgresql-15.3.tar.gz
解压:
tar -xzvf postgresql-15.3.tar.gz
新建pg文件夹:
mkdir pg
进入:
cd postgresql-15.3/
配置:
./configure --prefix=/home/perfxlab01/pg
编译并安装:
make world -j64
make install-world -j64
进入~/pg/
初始化数据库:
./bin/initdb -D ./data/
启动数据库:
bin/pg_ctl -D ./data/ -l logfile start
成功启动数据库后,接下来就是测试数据库性能了。PostgreSQL和Redis一样也自带了压力测试程序。
新建用于压力测试的数据库:
bin/psql -U postgres -h localhost
(进入psql shell)
CREATE DATABASE test;
(退出psql shell)
初始化用于压力测试的数据库:
bin/pgbench -i test
开始压力测试:
bin/pgbench -c 100 -T 300 -j 64 test
压力测试结果如下:
pgbench (15.3)
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 1
query mode: simple
number of clients: 100
number of threads: 64
maximum number of tries: 1
duration: 300 s
number of transactions actually processed: 93122
number of failed transactions: 0 (0.000%)
latency average = 322.405 ms
initial connection time = 156.199 ms
tps = 310.168586 (without initial connection time)
statement latencies in milliseconds and failures:
0.005 0 \set aid random(1, 100000 * :scale)
0.002 0 \set bid random(1, 1 * :scale)
0.002 0 \set tid random(1, 10 * :scale)
0.002 0 \set delta random(-5000, 5000)
0.201 0 BEGIN;
1.144 0 UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
0.429 0 SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
290.788 0 UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
26.624 0 UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
0.432 0 INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
2.556 0 END;
五、TiDB
接下来就是TiDB了,TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库。该数据库使用Go语言编写。
下载最新版的TiDB源码包以后解压并进入源码文件夹,然后编译:
tar -xzvf tidb-7.1.1.tar.gz
cd tidb-7.1.1/
make
结果编译失败:

同时也尝试了通过脚本安装,结果提示不支持该架构。
总结:
通过此次实验,得出了以下结果。
| 数据库 | APT安装/脚本安装 | 编译安装 |
| Redis | √ | √ |
| MongoDB | × | × |
| PostgreSQL | √ | √ |
| TiDB | × | × |
| MySQL | √ | × |
| MariaDB | √ | √ |
1、上一期我就提到MySQL不支持直接通过编译安装,只能通过打Ubuntu提供的补丁才能编译(详见MySQL server fails to build on RISC-V 64),而MariaDB通过编译安装或包管理器安装两种方式均可以。但是通过编译安装后后续要作进一步手工配置(教程见参考资料),而通过包管理器安装系统自动给你配置好,开箱即用,因此建议通过APT(包管理器)安装MySQL/MariaDB,更加省时方便。
2、目前测试的四款数据库软件中,MongoDB只有适用于Ubuntu 22.04 LTS的软件包,而TiDB无论是脚本安装还是编译安装均不支持riscv64。因此希望这两个数据库在RISC-V架构上的支持再加把劲。
3、此次兼容性测试中表现最亮眼的是PostgreSQL和Redis,这两者编译下来都挺顺利,而且还能正常运行。说明这两个数据库对riscv64的兼容性做得是非常好。尤其是PostgreSQL,之前PostgreSQL BuildFarm里有社区成员使用riscv64平台上的编译器编译成功了。因此PostgreSQL能够在riscv64平台上成功编译并运行就是必然的了。
4、Redis和PostgreSQL都自带了压力测试工具,Redis的redis-benchmark设置好压力测试参数,然后只要等测试结果出炉即可,而PostgreSQL的pgbench相比于redis-benchmark,只要在设置压力测试参数前再加创建测试数据库和初始化测试数据库这两步即可。因此,自带压力测试程序这一点,对于这两个数据库来说是加分项,因为使用自带的压力测试程序可以帮助使用者了解到该服务器在数据库方面上的性能。
参考资料:
MariaDB 简介
https://mariadb.org/zh/
Redis 教程
https://www.runoob.com/redis/redis-tutorial.html
MongoDB官网
https://www.mongodb.com/zh-cn
MongoDB开发者社区
https://www.mongodb.com/community/forums/t/when-to-upload-version-on-debian/181125
mongodb-server binary package in Ubuntu Focal riscv64
https://launchpad.net/ubuntu/focal/riscv64/mongodb-server
MySQL server fails to build on RISC-V 64
https://bugs.mysql.com/bug.php?id=100356
部署Mariadb数据库到Linux(源码编译安装)
https://www.cnblogs.com/DragonStart/p/10823222.html
PostgreSQL BuildFarm Status
https://buildfarm.postgresql.org/cgi-bin/show_status.pl
PostgreSQL BuildFarm Status History
https://buildfarm.postgresql.org/cgi-bin/show_history.pl?nm=boomslang&br=REL_15_STABLE
TiDB
https://docs.pingcap.com/zh/tidb/stable
正文完
-
About HS-2
HS-2 RISC-V通用主板是澎峰科技与合作伙伴共同研发的一款专为开发者设计的标准mATX主板,它预装了澎峰科技为RISC-V高性能服务器定制开发的软件包,包括各种标准bencmark、支持V扩展的GCC编译器、计算库、中间件以及多种典型服务器应用程序。
HS-2 RISC-V通用主板搭载了一颗国产RISC-V 64核处理器(SG2042)。SG2042是目前已量产的性能最高的RISC-V处理器,主要针对高性能计算领域需求设计,适用于科学计算、工程计算、AI计算、融合计算等大算力应用场景。

-
关于RISC-V公共测试平台

RISC-V高性能处理器公共测试云平台 ·快速使用指南,下载链接:https://www.kdocs.cn/l/cmnYcyFIlVRx
-
RISC-V公共测试云平台系列文章
-
RISC-V公测平台发布 ·Stream带宽完整测试
-
RISC-V公测平台发布 · 我的世界MohistMC
-
RISC-V公测平台发布 · 第一个WEB Server“Hello RISC-V world!”
-
RISC-V公测平台发布 ·如何在SG2042上玩转k3s
-
“RISC-V成长日记” blog发布,第一个运行在RISC-V服务器上的blog?
-
RISC-V公测平台发布:如何在SG2042上玩转OpenMPI
-
RISC-V公测平台发布:Compiling The Fedora Linux Kernel Natively on RISC-V
-
RISC-V公测平台发布 · Unix Bench完整测试
-
RISC-V公测平台发布 · 使用YCSB测试SG2042上的MySQL性能
-
RISC-V公测平台发布 · 7-zip 测试
-
RISC-V公测平台发布 · CoreMark测试报告
-
RISC-V公测平台发布 · 数据库在RISC-V服务器上的适配评估(本篇)
欢迎投稿,发送至riscvinfo@perfxlab.com
相关文章:
RISC-V公测平台发布 · 数据库在RISC-V服务器上的适配评估
前言 上一期讲到YCSB在RISC-V服务器上对MySQL进行性能测试(RISC-V公测平台发布 使用YCSB测试SG2042上的MySQL性能),在这一期文章中,我们继续深入讨论RISC-V数据库的应用。本期就继续利用HS-2平台来测试数据库软件在RISC-V服务器…...
UE5.2 LyraDemo源码阅读笔记(五)输入系统
Lyra里使用了增强输入系统,首先知道增强输入系统里的三个类型配置。 一、Input Actions (IA): 输入操作带来的变量,与玩家的输入组件绑定,回调里驱动玩家行为。 二、InputMappingContext(IMC):…...
线段树详解——影子宽度
OK,今天来讲一讲线段树~~ 线段树是什么线段树的实现线段树的时间复杂度线段树的应用线段树的节点结构其他操作和优化例题——影子宽度输入输出格式输入格式输出格式 输入输出样例输入样例输出样例 例题讲解 线段树是什么 线段树( S e g m e n t Segmen…...
使用R语言绘制折线图
写在前面 昨天我们分享了使用Python绘制折线图的教程,跟着NC学作图 | 使用python绘制折线图,考虑到很多同学基本不使用Python绘图。那么,我们也使用R语言复现此图形。 此外,在前期的教程中,我们基本没有分享过折线图的教程。因此,我们在这里也制作一期关于折线图的教程。…...
无涯教程-Perl - wantarray函数
描述 如果当前正在执行的函数的context正在寻找列表值,则此函数返回true。在标量context中返回false。 语法 以下是此函数的简单语法- wantarray返回值 如果没有context,则此函数返回undef;如果lvalue需要标量,则该函数返回0。 例 以下是显示其基本用法的示例…...
【gitkraken】gitkraken自动更新问题
GitKraken 会自动升级!一旦自动升级,你的 GitKraken 自然就不再是最后一个免费版 6.5.1 了。 在安装 GitKraken 之后,在你的安装目录(C:\Users\<用户名>\AppData\Local\gitkraken)下会有一个名为 Update.exe 的…...
《Java Web程序设计》试卷03
《Java Web程序设计》试卷03 课程编码: 301209 适用专业: 计算机应用(包括JAVA方向) 注 意 事 项 1、首先按要求在试卷标封处填写你所在的系(部)、专业、班级及学号和姓名; 2、仔细阅读各类题目的回答要求,…...
怎么查看小程序中的会员信息
商家通过查看会员信息,可以更好地了解用户,并为他们提供更个性化的服务和推荐。接下来,就将介绍如何查看会员信息。 商家在管理员后台->会员管理处,可以查看到会员列表。支持搜索会员的卡号、手机号和等级。还支持批量删除会员…...
网络安全—黑客—自学笔记
想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全…...
深度解读波卡 2.0:多核、更有韧性、以应用为中心
本文基于 Polkadot 生态研究院整理,有所删节 随着波卡 1.0 的正式实现,波卡于 6 月 28 日至 29 日在哥本哈根举办了年度最重要的会议 Polkadot Decoded 2023,吸引了来自全球的行业专家、开发者和爱好者,共同探讨和分享波卡生态的…...
微服务中间件--Eureka注册中心
Eureka注册中心 a.eureka原理分析b.搭建eureka服务c.服务注册d.服务发现 a.eureka原理分析 1.每个服务启动时,将自动在eureka中注册服务信息 (每个服务每隔30秒发送一次的心跳续约,当某个服务没有发送时,eurekaServer将自动剔除该服务&#x…...
积跬步至千里 || 矩阵可视化
矩阵可视化 矩阵可以很方面地展示事物两两之间的关系,这种关系可以通过矩阵可视化的方式进行简单监控。 定义一个通用类 from matplotlib import pyplot as plt import seaborn as sns import numpy as np import pandas as pdclass matrix_monitor():def __init…...
zookeeper详细介绍
ZooKeeper是一个开源的分布式协调服务,具有以下一些关键特点: 数据模型 ZooKeeper的数据模型采用层次化的多叉树形结构,每个节点称为znode,类似于文件系统中的文件和目录。每个znode可以存储数据和控制信息。一致性保证 ZooKeeper通过ZAB协议,实现分布式环境下数据的强一致性,…...
面板市场趋势分析:价格上涨势头或将减缓 | 百能云芯
8月末,面板价格报价公布,市场研究机构TrendForce指出,电视面板今年以来已经上涨超过30%,虽然下游品牌商对于价格上涨提出了不同声音,但由于面板厂商采取了按需生产的策略,8月仍然出现了3~5%的价格上涨。Tre…...
JVM性能调优
java 如何跨平台,如何一次编译到处执行 是由于java在不同的jvm上编译,jvm在软件层面屏蔽不同操作系统在底层硬件与指令上的区别。 jvm 包括 new 的对象都是放在堆中 栈,给线程单独使用(线程私有),存储一个…...
【全链路追踪】XXL-JOB添加TraceID
文章目录 一、背景调用路径部署环境问题 二、方案三、Demo示例1、MDC2、RequestInterceptor3、HandlerInterceptor4、logback.xml 四、后续改进思路 一、背景 首先这个项目属于小型项目,由于人手以及时间限制,并未引入Skywalking等中间件来做调用链路追…...
[Unity]Lua本地时间、倒计时和正计时。
惯例,直接上代码: --正计时开始时的时间戳 self.begin_time os.time() --倒计时时长,01:30:00 self.countdown_time 5400 --是否开始计时 self.is_update_local_time true--Unity Update function time_transition:update_local_timer()i…...
探究HTTP API接口测试:工具、方法与自动化
本文将深入探讨HTTP API接口测试的重要性,并介绍了相关工具、方法以及自动化测试的实施,同时比较了HTTP和API接口测试的区别。从不同角度解析这一关键测试领域,帮助读者更好地理解和应用于实际项目中。 在如今数字化的世界中,软件…...
CSS中如何实现文字溢出省略号(text-overflow: ellipsis)效果?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CSS中如何实现文字溢出省略号(text-overflow: ellipsis)效果?⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 …...
CSDN编程题-每日一练(2023-08-21)
CSDN编程题-每日一练(2023-08-21) 一、题目名称:贝博士的论文审阅统计二、题目名称:生命进化书三、题目名称:寻找宝藏山一、题目名称:贝博士的论文审阅统计 时间限制:1000ms内存限制:256M 题目描述: 贝博士经常收到申请他审阅论文的信函,每封信函的信封上面只有两个申…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
spring boot使用HttpServletResponse实现sse后端流式输出消息
1.以前只是看过SSE的相关文章,没有具体实践,这次接入AI大模型使用到了流式输出,涉及到给前端流式返回,所以记录一下。 2.resp要设置为text/event-stream resp.setContentType("text/event-stream"); resp.setCharacter…...
