惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Comments on: Blog
S
Schneier on Security
Microsoft Azure Blog
Microsoft Azure Blog
T
Tor Project blog
V
Visual Studio Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Spread Privacy
Spread Privacy
月光博客
月光博客
罗磊的独立博客
Cisco Talos Blog
Cisco Talos Blog
P
Privacy International News Feed
T
Tenable Blog
阮一峰的网络日志
阮一峰的网络日志
AWS News Blog
AWS News Blog
T
ThreatConnect
博客园 - 三生石上(FineUI控件)
Recorded Future
Recorded Future
Hugging Face - Blog
Hugging Face - Blog
T
Tailwind CSS Blog
博客园 - 叶小钗
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
A
Arctic Wolf
L
LINUX DO - 最新话题
美团技术团队
大猫的无限游戏
大猫的无限游戏
I
Intezer
博客园 - 司徒正美
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
小众软件
小众软件
T
Threatpost
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
宝玉的分享
宝玉的分享
The Register - Security
The Register - Security
Project Zero
Project Zero
J
Java Code Geeks
Cyberwarzone
Cyberwarzone
IT之家
IT之家
MyScale Blog
MyScale Blog
T
Threat Research - Cisco Blogs
T
The Blog of Author Tim Ferriss
腾讯CDC
S
SegmentFault 最新的问题
F
Fox-IT International blog
S
Security Archives - TechRepublic
Last Week in AI
Last Week in AI
G
GRAHAM CLULEY
M
MIT News - Artificial intelligence

Mox的笔记库

细嗦下MLIR的环境搭建 | Mox的笔记库 博客重构:从Hexo到Astro | Mox的笔记库 2026PPoPP MLIR Tutorial学习 | Mox的笔记库 MacOS配置《明日方舟:终末地》 | Mox的笔记库 2025:向内生长 | Mox的笔记库 由mlir::ExecutionEngine引发的跨系统问题 | Mox的笔记库 WSL2配置Cuda-Tile环境记录(未完待续) | Mox的笔记库 Vibe Coding手搓项目记录 | Mox的笔记库 给Debian上包——以DuckDB为例 | Mox的笔记库 UCPD.sys事件存档 | Mox的笔记库 换新电脑之Mac mini M4从购买到配置 | Mox的笔记库 Mac配置MLX-C开发环境 | Mox的笔记库 RISC-V meets RDBMS——RISC-V架构上可运行数据库一览 | Mox的笔记库 DuckDB Sort实现调查 | Mox的笔记库 修复Redis在树莓派5上无法运行的问题 | Mox的笔记库 如何在MLIR中自定义类型并且输出运行 | Mox的笔记库 网站网络结构变更记录 | Mox的笔记库 EDBT25论文阅读:PhoebeDB——A Disk-Based RDBMS Kernel for High-Performance and Cost-Effective OLTP SIGMOD25论文阅读:BPF-DB:——A Kernel-Embedded Transactional Database Management System For eBPF Applications SIGMOD24文章阅读:Query Compilation Without Regrets | Mox的笔记库 论文阅读:Designing an Open Framework for Query Optimization and Compilation Apache Arrow Gandiva项目解析 | Mox的笔记库 VLDB24论文阅读:Cloud-Native Database Systems and Unikernels——Reimagining OS Abstractions for Modern Hardware NoisePage源码分析(未完待续) | Mox的笔记库 VLDB20论文阅读:Mainlining Databases——Supporting Fast Transactional Workloads on Universal Columnar Data File Formats VLDB17论文阅读:Relaxed Operator Fusion for In-Memory Databases:Making Compilation, Vectorization, and Prefetching Work Together At Last 论文阅读:How not to structure your database-backed web applications——a study of performance bugs in the wild SIGMOD24阅读:ROME——Robust Query Optimization via Parallel Multi-Plan Execution 文章阅读:First Past the Post-Evaluating Query Optimization in MongoDB SIGMOD文章阅读:Apache Calcite——A Foundational Framework for Optimized Query Processing Over Heterogeneous Data Sources VLDB23论文阅读:Analyzing the Impact of Cardinality Estimation on Execution Plans in Microsoft SQL Server SIGMOD22论文阅读:Efficient Massively Parallel Join Optimization for Large Queries VLDB论文阅读:Weaving Relations for Cache Performance VLDB22论文阅读:ConnectorX——Accelerating Data Loading From Databases to Dataframes 论文阅读:UniKraft-Fast, Specialized Unikernels the Easy Way SIGMOD25论文阅读:An Elephant Under The Microscope——Analyzing The Interaction Of Optimizer Components In PostgreSQL 论文阅读:Compile-Time Analysis of Compiler Frameworks for Query Compilation VLDB23阅读:Bringing Compiling Databases to RISC Architectures LingoDB源码编译与分析 | Mox的笔记库 淦!MLIR输出Hello World不应该这么难! | Mox的笔记库 如何愉快的运行一个MLIR程序 | Mox的笔记库 2024:拥挤年代的想象与创造 | Mox的笔记库 如何给自己的博客添加MLIR和LLVM IR语法高亮 | Mox的笔记库 VLDB19-Parsing Gigabytes of JSON per Second论文阅读 CIDR25:Runtime-Extensible Parsers阅读 | Mox的笔记库 MLIR学习资料整理 | Mox的笔记库 SIGMOD24文章阅读:VeriTxn | Mox的笔记库 VLDB23文章阅读——Exploiting Cloud Object Storage for High-Performance Analytics VLDB24——OLAP on Modern Chiplet-Based Processors走马观花阅读 VLDB22:YeSQL文章阅读(已废弃) | Mox的笔记库 如何让数据库中的Python跑的更快-VLDB22-YeSQL文章阅读 | Mox的笔记库 你好,世界! | Mox的笔记库 让系统研究更有意义:HarmonyOS NEXT的教训和经验——讲座回顾 | Mox的笔记库 UNSW 24T3 COMP9336上课记录 | Mox的笔记库 Velox开发环境配置踩坑记录 | Mox的笔记库 MLIR Toy Tutorial实践记录 | Mox的笔记库 论文阅读:Declarative Sub-Operators for Universal Data Processing LLVM-Kaleidoscope实操踩坑记录 | Mox的笔记库 2024年7月RSSHub开发体验 | Mox的笔记库 澳洲大学计算机硕士比较 | Mox的笔记库 论文阅读——CDUL:CLIP-Driven Unsupervised Learning for Multi-Label Image Classification 论批量快速添加图片与视频水印的事 | Mox的笔记库 CVPR2023-CLIP算法调研 | Mox的笔记库 基于元信息写入的服务器压力测试 | Mox的笔记库 MjAyMw==,希望,前进与平庸之道 | Mox的笔记库 家庭组网IPv6+Mesh折腾 | Mox的笔记库 code-server初体验 | Mox的笔记库 从Nginx到Caddy | Mox的笔记库 Hexo部署安装全流程回顾 | Mox的笔记库 RMM观察与初探 | Mox的笔记库 计算机网络课设——UDP/TCP/TLS Socket实验 | Mox的笔记库 JQuery的XSS初探 | Mox的笔记库 生产实习记录 | Mox的笔记库 Fedora-CoreOS配置与试用(2023年) | Mox的笔记库 Electron学习笔记 | Mox的笔记库 ServerSentEvent学习 | Mox的笔记库 报告翻译:容器云的安全挑战 | Mox的笔记库 Arch Linux迁移计划 | Mox的笔记库 Vagrant配置Metarget靶场环境 | Mox的笔记库 OpenAI-whisper折腾 | Mox的笔记库 202202,困惑,混乱与未曾设想之路 | Mox的笔记库 2022年Hack the box:Tier1免费区全解 | Mox的笔记库 Navidrome部署记录 | Mox的笔记库 长安杯2021-snake复现 | Mox的笔记库 报告概要翻译:OBFUSCATING C++ PROGRAMS VIA CONTROL FLOW FLATTENING 从零开始的Django CVE-2022-28346复现 | Mox的笔记库 2022CISCN(西北区赛)-The shinning | Mox的笔记库 Docker+QEMU+Arm64(Ubuntu)+环境配置(2022版) | Mox的笔记库 Arch Linux运行树莓派系统(2022年) | Mox的笔记库 2022CISCN初赛-ez_usb-复盘WriteUp | Mox的笔记库 NodeMCU-MicroPython配置实录 | Mox的笔记库 Django事务使用 | Mox的笔记库 记录第一次EduSRC上报 | Mox的笔记库 Jetbrain问题应急处理 | Mox的笔记库 Celery5.2学习&配置 | Mox的笔记库 Waline部署记录 | Mox的笔记库 2021年12月 Vivo千镜杯回顾 | Mox的笔记库 Frida hook初次实战 | Mox的笔记库 Log4j2漏洞复现 | Mox的笔记库 Windows的WSL2+Docker初探 | Mox的笔记库
当DuckDB遇上RISC-V | Mox的笔记库
2025-03-16 · via Mox的笔记库

关于DuckDB的RISC-V CI的工作已于2025.3.14合并入DuckDB主线,在此回顾下这次贡献的来龙去脉

契机

最早接触RISC-V架构,是在B站看了吴伟老师(lazyparser)的视频

而接触到DuckDB,则是在CMU的课上(不记得是15799还是15445,反正是Andy上的其中一门)

今年年初的时候搞了一台MilkV Jupiter玩,顺带瞟了一眼DuckDB在RISC-V的支持情况——当时官方文档并没有相关说明,反倒是Youtube上有人去踩了RISC-V编译DuckDB的坑:Building DuckDB on RISC-V

视频本身并没有多少评论,但介绍区指向了一个Bsky Blog,Blog里面有DuckDB的成员对这个想法产生了兴趣,并邀请视频作者(ID:LivingLinux)添加RISC-V架构的CI Pull Request。

image-20250314204407771

但这位仁兄(@LivingLinux)不太熟悉Docker😂于是跑到Reddit去求助:Who is willing to help with RISC-V support for DuckDB? (Docker),讨论一番后——并没人准备付出行动😅

那,我就只能帮忙代劳了😂

开工

首先是在自己的MilkV Jupiter上试试,这点很顺利,那个视频也是在和MilkV Jupiter同款的CPU上实现的,其工作可以完美复现

那么接下来就是上Github Action了——目前Github Action只提供X86-64和ARM架构的Github Action,想要尝试RISC-V就只能上QEMU

由于有在学校服务器上用QEMU模拟RISC-V,环境就直接沿用了Debian(DQIB)

方案一:全部在QEMU系统中运行

这个方案的好处显而易见:所有在MilkV Jupiter的操作原样照抄即可,源码也直接Git Clone到QEMU系统里面

在我机器上这个方案也很顺利,但搬运到Github Action上就会有各种各样的问题🤣

踩到的第一个坑,是Github Action的权限问题:放在Github仓库内QEMU镜像是只读权限,一旦QEMU加载内存进内存就报错

image-20250314212049129

解决方案:QDIB的镜像等到运行CI的时候,再进行下载

接下来踩第二个坑:QEMU镜像一旦加载,整个界面就停止交互

解决方案:nohup或screen挂后台启动。Github Action不能终端交互,QEMU回显是个问题。能想到的解决方案是通过SSH实现交互

第三个坑:如何添加这个QEMU镜像的SSH免登录?

Github Action对于权限管理很严,我采用了个土办法:直接sshpass命令输入密码直通。这不是个好看的方法,但它一定能Work

sshpass -p 'root'

第四个坑:既然前面都配置好了,为什么SSH登录不上去?

QEMU启动要时间,所以需要等待一个QEMU一定能启动的时间再去SSH连接

走完上述工作,应该没问题了吧,😍

事实上,我的电脑确实也顺利跑起来了,我也没想太多,Github Action跑起来就去睡觉了

第二天起床,返现Github Action——它居然超时了!!

正常的编译工作直接被掐断,如果时间充足,机器够强,这流程一定能跑通

image-20250314214831592

Anyway,这条路是行不通了😥QEMU损失大量性能的事情,也不是第一天才发生,只能说在这个问题上太大意了

方案二:交叉编译+Docker中QEMU运行验证

一开始并不想尝试这种方案——交叉编译的坑不会少,而且并不清楚DuckDB的依赖在交叉编译中是否会报错,riscv-gnu-toolchain本身的编译也需要很长时间,同时占用大量硬盘空间

但Github Action是支持Docker镜像构建和运行的,这意味着我可以使用debian:sid镜像,里面可以直接安装riscv-gnu-toolchain,那事情也会相对好办许多

Docker镜像里面只需要准备好QEMU的环境即可

FROM debian:sid

# Install dependencies

RUN apt-get update && apt-get install -y \

qemu-system-riscv \

u-boot-qemu \

openssh-server \

screen \

sshpass \

wget \

unzip

# Download and extract Debian image

RUN wget -O debian.zip https://gitlab.com/api/v4/projects/giomasce%2Fdqib/jobs/artifacts/master/download?job=convert_riscv64-virt && \

unzip debian.zip

# Copy startup script

COPY --chmod=755 start_qemu.sh start_qemu.sh

# Set the entrypoint to the startup script

ENTRYPOINT ["/bin/bash"]

# Expose SSH port

EXPOSE 2222

添加上DuckDB对应的测试脚本

docker run -i --rm -v $(pwd):/duckdb --workdir /duckdb ghcr.io/mocusez/duckdb-riscv-ci/duckdb-riscv-ci <<< "apt-get update && export DEBIAN_FRONTEND=noninteractive && apt-get install cmake ninja-build libssl-dev g++-riscv64-linux-gnu -y && GEN=ninja CC='riscv64-linux-gnu-gcc -march=rv64gcv_zicsr_zifencei_zihintpause_zvl256b' CXX='riscv64-linux-gnu-g++ -march=rv64gcv_zicsr_zifencei_zihintpause_zvl256b' DUCKDB_PLATFORM=linux_riscv make && cd / && ./start_qemu.sh && cd /duckdb && make clean && echo 'DOCKER TEST RESULT: SUCCESS' || (echo 'DOCKER TEST RESULT: FAILURE' && make clean)" 2>&1

运行QEMU

screen -dmS qemu qemu-system-riscv64 \

-machine virt \

-cpu rv64,zba=true,zbb=true,v=true,vlen=256,vext_spec=v1.0,rvv_ta_all_1s=true,rvv_ma_all_1s=true \

-smp 4 \

-m 4G \

-device virtio-blk-device,drive=hd \

-drive file=dqib_riscv64-virt/image.qcow2,if=none,id=hd \

-device virtio-net-device,netdev=net \

-netdev user,id=net,hostfwd=tcp::2222-:22 \

-kernel /usr/lib/u-boot/qemu-riscv64_smode/uboot.elf \

-append "root=LABEL=rootfs console=ttyS0" \

-nographic

sleep 120 # wait for qemu to boot

sshpass -p 'root' scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -r -P 2222 /duckdb/build/release/duckdb root@localhost:/root

sshpass -p 'root' ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 root@localhost "chmod +x duckdb && ./duckdb -c 'PRAGMA platform;'"

Well Done !😁 GitHub Action顺利通过了,让我最为担心的DuckDB依赖问题并没有发生

image-20250314221850934

把代码托管到Github仓库(mocusez/duckdb-riscv-ci),就跑去DuckDB那里开了个Discussion

image-20250314222313122

我觉得代码应该还需要再规范些,希望DuckDB的人员能给些建议,但等了一周后见没什么动静,就直接提Pull Request(DuckDB PR#16549)——于是3月13日晚上通过Review,3月14日就Merge了

image-20250314222544054

3月15日下午补齐相关文档,3月16日晚些时间关于文档的Pull Request被合并

image-20250316212924064

结语

感谢Reddit用户@LivingLinux,@Self在RISC-V编译DuckDB的前期工作中探索付出的努力,以及DuckDB热心的审核人员,快速完成了Pull Request的合并😍

期待未来有机会能继续完善DuckDB在RISC-V的生态😁