Skip to main content

Storage Overview

openRuyi ships a storage software stack that reaches from local block devices to distributed storage: kernel interfaces such as io_uring and NVMe, file systems and software RAID, network storage protocols, user-space I/O frameworks, storage acceleration libraries, and Ceph. All of these packages are built natively for riscv64.

This article lists the components and their known limitations, and describes how the stack is tested. For hands-on examples, see Storage Quick Start.

Components​

The versions follow the repository. Run dnf info <package> to see the version currently available.

LayerPackagesDescription
Asynchronous I/Oliburingio_uring user-space library
BenchmarkingfioFlexible I/O tester, also used for data verification
NVMenvme-cli, libnvmeNVMe management, NVMe over Fabrics (TCP/RDMA/loop) host tools
File systemsxfsprogs, btrfs-progs, e2fsprogsCreation, checking and repair tools
Software RAID and volumesmdadm, lvm2, multipath-toolsMD RAID, logical volumes, multipath
RDMArdma-core, libibverbs-utils, librdmacm-utils, infiniband-diagsVerbs/RDMA CM libraries and tools, including Soft-RoCE (rxe)
Network block storageopen-iscsi, libnbd, qemu-toolsiSCSI initiator; NBD client library and nbdcopy/nbdinfo; qemu-nbd
Network file systemsnfs-client, nfs-kernel-serverNFS client and server
User-space I/O frameworksdpdk, spdkPoll-mode packet processing; user-space NVMe, NVMe-oF, iSCSI and vhost targets
Acceleration librariesisa-l, isa-l_cryptoErasure code, RAID, CRC, compression; multi-buffer hashing and AES
Distributed storagecephRADOS, RBD, CephFS, RGW

Subpackages follow the usual convention: the main package provides the runtime libraries and daemons, -devel provides headers and pkg-config files, and -tools provides auxiliary command-line tools.

PackageMain package-tools subpackage
dpdkdpdk-testpmd, dpdk-proc-info, PMD librariesdpdk-test, dpdk-dumpcap, dpdk-pdump, dpdk-graph, dpdk-test-*, dpdk-*.py scripts (such as dpdk-devbind.py)
spdkspdk_tgt, nvmf_tgt, iscsi_tgt, vhost, spdk_* tools, spdk-setupspdk-rpc, spdk-cli, spdk-sma, spdk-mcp
isa-llibisaligzip

Ceph is split into ceph-common (client tools), ceph-base, ceph-mon, ceph-mgr, ceph-osd, ceph-mds, ceph-radosgw, rbd-mirror, ceph-fuse and others. The erasure code plugins, including the ISA-L plugin libec_isa.so, are shipped in ceph-base.

SPDK is built with DPDK, RDMA, iSCSI initiator, io_uring and Ceph RBD support, and uses the system ISA-L and ISA-L crypto libraries.

Known Limitations​

  • cephadm cannot deploy clusters on riscv64. The cephadm package is available, but cephadm deploys daemons from container images, and there is no upstream riscv64 Ceph container image. Deploy daemons from the RPM packages directly instead, as shown in Storage Quick Start.
  • The Ceph mgr dashboard is not shipped. The build leaves out the dashboard module and its web frontend. Other mgr modules such as prometheus work.
  • Crimson OSD and SPDK-backed BlueStore are not enabled in the Ceph build.
  • DPDK and SPDK need hugepages, and binding real devices requires IOMMU/VFIO or UIO support from the platform. Without real hardware, virtual devices (net_null, malloc bdev, NVMe-oF over loopback) are enough for functional testing.

Testing​

The storage stack is covered by openRuyi's automated test suite, which is based on tmt/fmf and beakerlib. The cases are grouped as follows:

  • Functional tests: liburing, fio, nvme-cli, mdadm, xfsprogs, btrfs-progs, rdma-core, open-iscsi, libnbd, and a storage packaging integrity check that verifies every systemd unit Exec= and udev RUN/PROGRAM target of these packages exists.
  • Feature tests: dpdk, spdk, isa-l, isa-l_crypto and ceph. These include an end-to-end single-node Ceph cluster test covering RADOS, RBD, erasure-coded pools on the ISA-L plugin and the prometheus mgr module.

A case is reported as SKIP rather than FAIL when a prerequisite such as hardware, a kernel module or hugepages is missing.

Reporting Issues​

If a storage package misbehaves on openRuyi, open an issue in the openRuyi repository with the package name, the output of rpm -q <package>, the output of uname -r, and the steps to reproduce.