TiKV
Author: Ludovic HENRY ludovic.henry@qti.qualcomm.com
Date: 2026-09-11
Readiness: orange
Scope: RISC-V (riscv64/linux) support status for TiKV
Audience: Technical leadership, resource allocation strategy
Verification policy: Every claim is cross-referenced to a primary upstream source. Items that could not be verified against a second source are marked [NEEDS VERIFICATION].
Raw dependency graph data (JSON)
1. Project Overview
TiKV is a distributed, transactional key-value database written in Rust, originally created by PingCAP to serve as the storage layer underneath TiDB. It is a graduated project of the Cloud Native Computing Foundation (CNCF) (graduated September 2020), licensed under Apache 2.0. It stores data via an embedded RocksDB (with the Titan blob engine) instance per node and coordinates via the Raft consensus protocol; client/peer RPC runs over gRPC.
Governance (tikv/community GOVERNANCE.md) is layered: Steering Committee to Maintainers to Committers to Reviewers, plus a non-decision-making Infra team. Decisions use three approval tiers: Consensus (2 binding +1s, no vetoes) for most role changes; Lazy Majority for new reviewers; and a 2/3 Majority reserved for actions “affecting the foundation of the project,” which explicitly includes “Adoption of New Codebase” (large external codebases, massive restructuring, or a new team) and changes to governance itself. New/removed Steering Committee members are explicitly referred to the CNCF.
Corporate control of the steering committee: of 10 named steering-committee members, 7 represent PingCAP (Xiaoguang Sun, Siddon Tang, Wink Yao, Jinpeng Zhang, Qi Liu, Dongxu Huang, Qiu Cui), with the remaining 3 seats held by JD Cloud & AI (Daobing Li), Yidian Zixun (Fu Chen), and one unlisted affiliation (Jay Li). PingCAP effectively controls project direction.
Adopters listed on tikv.org: Dailymotion, ZaloPay, Ping An, JD Cloud, TiDB Cloud, Meitu, Zhuanzhuan, Ctrip, Tuya, JuiceFS.
Community culture on new ports: TiKV has no formal platform-tier policy document (no PLATFORMS.md/SUPPORT.md). The closest applicable governance mechanism for a new architecture port is the 2/3-majority “Adoption of New Codebase” vote category, which is framed for contributions large enough to “potentially change the shape and direction of the project with massive restructuring and future maintenance commitment.” Given the project’s current x86_64/aarch64-only stance and PingCAP’s dominant steering-committee control, a RISC-V port would plausibly need to clear this high bar rather than land as an ordinary PR.
2. Port History and Upstreaming Timeline
No RISC-V port exists and none has ever been attempted.
| Date | Event | Source |
|---|---|---|
| - | No first RISC-V commit found | Full-repo grep of master @ 3c8e5f4 returned zero matches for “riscv” |
| - | No riscv64 tracking issue ever opened | search_issues for riscv/riscv64 in title/body: 0 results |
| - | No riscv64 pull request ever opened, merged, or closed | search_pull_requests for riscv/riscv64: 0 results |
Key contributors: none - there is no port to attribute.
Fully upstream? Not applicable. There is nothing upstream to be partial or complete; the architecture is entirely absent from the codebase, CI, and documentation.
3. Upstream Support Tier
TiKV has no formal, written platform-tier policy. The de facto tier is stated in CONTRIBUTING.md and README.md: x86_64 and aarch64 on Linux and macOS are the supported build/runtime targets. The tiup binary-release download instructions in README.md are explicitly gated: export GOARCH=amd64 # only {amd64, arm64} are supported. CONTRIBUTING.md’s only platform-conditional guidance is: “If you are targeting platforms other than x86_64/aarch64 Linux or macOS, you’ll also need llvm and clang” - riscv64 is never named, and no flags or known-good toolchain versions are documented for that path.
| Axis | amd64 | arm64 | riscv64 |
|---|---|---|---|
| CI builds | Yes (clippy job) | Yes (clippy job) | No |
| CI test suite runs | Not in this workflow (lint-only; fuller build/test pipelines exist but are routed through the external PingCAP-QE/artifacts repo, out of scope of this research) |
Not in this workflow (same caveat) | No |
| Official binary release | Yes, via TiUP | Yes, via TiUP | No |
| Named in CONTRIBUTING.md/README.md as supported | Yes | Yes | No |
| Makefile arch-specific accommodations | None needed (baseline) | SSE disabled for RocksDB; -Ctarget-feature=-outline-atomics workaround |
None exist |
4. Technical Architecture and RISC-V-Specific Subsystems
TiKV itself has no JIT and no vendored architecture-specific assembly or SIMD intrinsics. A repo-wide search for target_arch conditionals found only 3 files in the entire codebase, none riscv-related:
components/in_memory_engine/src/statistics.rs: gatesphysical_core_id()ontarget_arch = "x86_64"+ linux; every other architecture (arm64, riscv64, everyone else) falls through to a stub-1return. This is an x86_64-only optimization with a universal fallback, not arm64- or riscv64-specific code.components/cloud/azure/src/token_credentials/certificate_credentials.rs: gates onwasm32only (Azure SDK compatibility shim, irrelevant to server architectures).tests/benches/coprocessor_executors/mod.rs: gates a perf-counter benchmark path onx86_64+linux, no-op fallback elsewhere.
arm64 evidence (6 hits total in the repo): Makefile disables RocksDB SSE on arm/arm64/aarch64; a -Ctarget-feature=-outline-atomics linker workaround is applied for aarch64-unknown-linux-gnu; Dockerfiles special-case the protoc download for aarch64; diagnostics/sys.rs maps "aarch64" => "arm64" for a CPU-info API field. These are build-portability accommodations, not hand-tuned SIMD/intrinsics - even TiKV’s second-tier supported architecture gets no architecture-specific acceleration in this repo (TiKV’s actual hot-path acceleration, e.g. SSE4.2/CRC, lives in its native C/C++ dependencies - RocksDB, gRPC, jemalloc - not in TiKV’s own Rust code).
riscv64 evidence: zero. No cfg(target_arch = "riscv64"), no #ifdef __riscv, no Makefile/Dockerfile stanza, no CI job, no TODO/FIXME referencing it. riscv64 is silently swept into the generic not(x86_64) fallback paths along with every other unlisted architecture - it was never named or accounted for, not even as a stub.
| Component | amd64 | arm64 | riscv64 |
|---|---|---|---|
Core-affinity (physical_core_id) |
Hand-tuned (sched_getcpu-based) |
Stub (-1 fallback, same as everyone else) |
Stub (-1 fallback) |
| RocksDB SSE build flag | Enabled (default) | Explicitly disabled in Makefile | No accommodation exists (undefined behavior if relevant) |
| Outline-atomics workaround | N/A | Applied for aarch64-unknown-linux-gnu |
No accommodation exists |
| AFL fuzz target | Present (x86_64-gated) | Absent | Absent |
| Perf-counter benchmark | Present (x86_64-gated) | Absent | Absent |
5. Build System, Cross-Compilation, and Toolchain
TiKV is a Cargo (Rust) workspace, not CMake - there is no CMakeLists.txt anywhere in the repo; CMake appears only as a transitive dependency needed to build gRPC’s C++ core (via grpcio-sys) and RocksDB/Titan (via librocksdb_sys/libtitan_sys) as native sub-builds through Cargo build scripts.
Build commands: make build / make release (wraps cargo build [--release]), or plain cargo build --release.
Toolchain pin (rust-toolchain.toml):
channel = "nightly-2026-01-30"
components = ["rustfmt", "clippy", "rust-src", "rust-analyzer"]
No stated minimum Rust version beyond this pinned nightly (auto-selected by rustup/cargo).
Native prerequisites (from CONTRIBUTING.md/AGENTS.md, mirrored in Dockerfile): cmake (required for gRPC); a C++ compiler, stated as “gcc 5+ or clang” (needed for C++11/14 support in gRPC’s C++ core - this is the only explicit minimum-version toolchain requirement in the repo, and it is not riscv64-specific); protoc.
Only non-x86/arm guidance in the repo: “If you are targeting platforms other than x86_64/aarch64 Linux or macOS, you’ll also need llvm and clang” - described as needed “to generate bindings for different platforms and build native libraries (required for grpcio, rocksdb).” riscv64 is never named; a contributor would have to infer it falls under “other platforms” with no documented flags, no known-good toolchain versions, and no CI to validate the result.
Makefile arch-conditional logic (none riscv64):
# Disable SSE on ARM
ifeq ($(shell uname -p),aarch64)
ROCKSDB_SYS_SSE=0
endif
ifeq ($(shell uname -p),arm)
ROCKSDB_SYS_SSE=0
endif
ifeq ($(shell uname -p),arm64)
ROCKSDB_SYS_SSE=0
endif
# aarch64: work around undefined-symbol issue with outline atomics
ifeq ($(TIKV_BUILD_RUSTC_TARGET),aarch64-unknown-linux-gnu)
export RUSTFLAGS := $(RUSTFLAGS) -Ctarget-feature=-outline-atomics
endif
Other env-var knobs controlling Cargo features (not CMake defines, since TiKV has no CMake surface of its own): ROCKSDB_SYS_PORTABLE=0, ROCKSDB_SYS_SSE=0, TCMALLOC=1/MIMALLOC=1/SNMALLOC=1/SYSTEM_ALLOC=1 (allocator selection; default is jemalloc), TIKV_FRAME_POINTER=0. None are documented as riscv64-specific.
QEMU usage: none in this repo - no QEMU-based emulation step or cross-arch release pipeline is defined anywhere in tikv/tikv (release Docker builds are pointed at the external PingCAP-QE/artifacts repo).
No build documentation exists for riscv64: BUILDING.md, INSTALL, docs/building.md, docs/cross-compilation.md, cmake/riscv64.cmake (n/a, no CMake), and any Dockerfile.riscv64 were all checked and do not exist. The only Dockerfiles present (Dockerfile, Dockerfile.FIPS, Dockerfile.test) are not arch-specific.
Known build failures: none documented for TiKV itself (never attempted), but a known build failure exists one level down in tikv/jemallocator#118 for the riscv64gc-unknown-linux-musl target (configure step error “cannot find sources (Makefile.in)”; see Section 11).
What would be required to attempt a riscv64 build, per this research: (a) confirm/add a riscv64gc-unknown-linux-gnu target to the pinned nightly toolchain; (b) provide gcc 5+/clang and cmake for riscv64 to satisfy the vendored gRPC and RocksDB/Titan C++ sub-builds; (c) independently determine whether the SSE-disable and outline-atomics workarounds (currently gated only for aarch64/arm/arm64) have a riscv64 analog that needs adding; (d) author a build recipe from scratch, since no existing QEMU or cross-Docker starting point exists in the repo.
6. Feature Coverage and Gap Analysis vs arm64 and amd64
| Feature | amd64 | arm64 | riscv64 |
|---|---|---|---|
| Builds from source | Yes (CI-verified via clippy job at minimum) | Yes (CI-verified via clippy job at minimum) | Unknown - never attempted, no toolchain integration exists |
| Runs / passes tests | Presumed via external PingCAP-QE pipeline (out of scope) | Presumed via external PingCAP-QE pipeline (out of scope); note tikv/tikv#6639 “Cannot compile TiKV on ARM64” documents TiKV has had ARM64 build problems historically |
Unknown |
| Official binary via TiUP | Yes | Yes | No |
| Hand-tuned core-affinity | Yes | No (stub) | No (stub) |
| RocksDB HW-accelerated CRC32C | Yes | Yes (per RocksDB support matrix, not independently verified here) | No - falls back to scalar CRC32C; hardware-accelerated PRs (#14536 Zbc CRC32C, #14894 Zvbc vector CRC32C) are open and stalled |
| TLS / encryption-at-rest (OpenSSL) | Yes, no known side-channel gap | Yes, no known side-channel gap | Functional, but carries an open, unresolved AES T-table cache side-channel on riscv64 hardware lacking Zkn/Zvkned extensions (openssl/openssl#31080, #31082) |
Functional gaps: whether TiKV can build and run on riscv64 at all is presently untested and undocumented - this is an absence-of-data finding, not a confirmed pass or fail. No RocksDB, gRPC, or jemalloc build has been verified end-to-end for TiKV specifically on riscv64 in any source checked.
Performance gaps: no published benchmark numbers exist for TiKV on riscv64 from any source (TiKV, PingCAP, or RISE Project) - confirmed by targeted web search and a search of the RISE blog. Indirectly, TiKV’s default production build (jemalloc allocator + RocksDB with default codecs) would inherit performance gaps from its dependencies: RocksDB’s CRC32C hardware acceleration PRs are stalled (Section 9), and several optional RocksDB compression codecs (Snappy, zstd, LZ4, zlib) have open, unreviewed RVV-acceleration PRs that have not landed, meaning riscv64 currently gets scalar-only codec performance where amd64/arm64 get SIMD acceleration.
Security hardening gaps: the OpenSSL AES T-table side-channel (above) is directly relevant to TiKV’s encryption-at-rest and FIPS build modes, since TiKV uses OpenSSL for both TLS and at-rest encryption. This is an open, unresolved issue as of mid-2026 per the fix PRs cited.
NaN / floating-point semantics: no data found. A targeted search for RISC-V-related NaN/floating-point bugs in tikv/tikv returned 0 results (consistent with there being no riscv64 activity in the repo at all).
7. CI/CD Infrastructure
riscv64 CI does not exist. The only CI workflow file in the entire repository is .github/workflows/tikv-clippy-darwin.yml:
- Trigger:
pull_requesttomaster/feature/**(withpaths-ignorefor docs/images). - Runners: a 2-entry matrix -
macos-15-intel(amd64) andmacos-15(arm64). No Linux runner, no QEMU, no riscv64 runner of any kind. - Job:
clippy-darwinrunsmake clippyonly - a static lint check, not a build of release binaries, not a test-suite execution, not a cross-compilation step.
No .gitlab-ci.yml, Jenkinsfile, or .cirrus.yml exists anywhere in the repository root. A repo-wide case-insensitive grep for “riscv” across the full working tree (1551 tracked files, commit 3c8e5f454ff54d2e4765be3e079ec9481b0eb690) returned zero matches.
RISE runners: not used. TiKV does not appear in the riseproject-dev GitHub org’s repos, is not referenced on the RISE blog, and is not listed in RISE’s wheel builder.
| Axis | amd64 | arm64 | riscv64 |
|---|---|---|---|
| CI job exists | Yes (tikv-clippy-darwin.yml) |
Yes (tikv-clippy-darwin.yml) |
No |
| Scope of that job | Clippy lint only | Clippy lint only | N/A |
| Runner type | macOS cloud runner (macos-15-intel) |
macOS cloud runner (macos-15) |
N/A |
| QEMU used | No | No | No (no job exists) |
| RISE runner used | No | No | No |
| Release-blocking | Gates PR merge to master/feature branches (lint only) | Same | N/A |
8. Distribution and Release Status
No official riscv64 binary or package exists for TiKV in any channel checked.
- GitHub Releases: checked
v8.5.8,v8.5.7,v8.5.6. Every release carries only GitHub’s auto-generated source archives (v8.5.8.zip,v8.5.8.tar.gz) - no uploaded binary artifacts of any kind, for any architecture. TiKV distributes compiled binaries via TiUP (PingCAP’s component manager/mirror), not GitHub release assets; TiUP’s riscv64 coverage was out of scope for this research and was not shown to carry riscv64 builds. - PyPI (
pypi.org/pypi/tikv/json): exactly one file,tikv-0.0.1.tar.gz(source sdist only, no wheels, no riscv64 filename). This package (version 0.0.1, generic summary “tikv”) is almost certainly an unrelated name-squat, not the real Rust-based TiKV database. - Ubuntu 26.04 (resolute) (packages.ubuntu.com): no package literally named
tikvexists at all, for any architecture. The only substring matches are three unrelated Rust FFI crates -librust-tikv-jemalloc-ctl-dev,librust-tikv-jemalloc-sys-dev,librust-tikv-jemallocator-dev- which do list riscv64 among their supported architectures, but these are upstream jemalloc allocator bindings that happen to share the “tikv” name prefix, not the TiKV key-value store. - Arch Linux RISC-V port (archriscv.felixc.at): no
tikvpackage listed at all, on any architecture. - RISE Python wheel builder (gitlab.com project 56254198): redirects to upstream PyPI (no custom riscv64 wheel built).
Since no distribution ships a tikv package at all - not even unpatched - the distribution floor described in the color-grading model does not apply here; this is a stronger negative than “patched/downstream-only.”
What a user must do today to get a working riscv64 binary: there is no path. A user would need to build from source after independently resolving the toolchain gaps described in Section 5, with no existing recipe, CI validation, or prior art to build from.
9. Dependencies
| Dependency (as named) | Role in TiKV | riscv64 build | riscv64 test | riscv64 release | Community / notes |
|---|---|---|---|---|---|
| RocksDB | Primary LSM storage engine (via tikv/rust-rocksdb, embeds Titan blob engine) |
Builds (Makefile -march/-latomic fixes merged v7.1.1-v8.10.0) |
No upstream riscv64 CI runs tests (0/14 workflow files mention riscv) | Source-only for every arch; no prebuilt binaries | 4 open/stalled PRs (#14536 Zbc CRC32C, #14894 Zvbc vector CRC32C blocked on #14536+#14530, #14604 RVV xxhash sync, #14530 -march/LLD fix), stalled 4+ months on a CLA registration conflict; falls back to scalar CRC32C on riscv64 today |
| gRPC | RPC transport for all client/peer communication (via grpcio/grpcio-sys, wraps grpc/grpc C core, embeds BoringSSL) |
Distro-built only; no upstream riscv64 CI (build or test) | No | No official riscv64 wheel (grpc/grpc#41591, open) | grpc/grpc#37791 (stale abseil RDCYCLE SIGILL) closed; #35839 (__atomic_compare_exchange_1 undefined symbol) closed but root cause unfixed upstream, traces to open abseil-cpp#1702/#2002 |
| OpenSSL | TLS for gRPC/PD client, encryption-at-rest, FIPS build path | Yes, dedicated riscv-more-cross-compiles.yml CI, 13 extension configs |
Yes, but flaky (#30880, intermittent test_lhash failures on linux-riscv64 CI, open) |
Yes, treated as first-class target, backported across 3.4/3.5/3.6/4.0/master | Critical, unresolved: AES T-table cache side-channel on riscv64 hardware lacking Zkn/Zvkned (fix PRs #31080/#31082 still open mid-2026); also #22166 (SSL test races, open since 2023), #28118 (extension detection broken under musl) |
| jemalloc | Default production memory allocator (via tikv-jemalloc-sys/tikv-jemallocator, ENABLE_FEATURES += jemalloc on Linux release builds) |
Compiles, no upstream jemalloc patches needed | No upstream riscv64 CI (x86_64/x86-32/arm64 only) | Source-only for all arches | tikv/jemallocator#118 (open): build fails for riscv64gc-unknown-linux-musl (configure error “cannot find sources (Makefile.in)”); tikv/jemallocator#36 (closed, fixed via autogen.sh); upstream jemalloc/jemalloc#2323 “Add support for riscv64gc” closed/fixed |
| Rust | Language/toolchain; TiKV pins nightly-2026-01-30 via rust-toolchain.toml |
riscv64gc target appears usable in principle (the jemalloc-crate issues above specifically reference riscv64gc-unknown-linux-gnu/-musl triples, implying compiler target availability) |
Not directly assessed | Not directly assessed | [NEEDS VERIFICATION]: exact Rust platform-support tier for riscv64gc-unknown-linux-gnu/-musl was not directly confirmed in this research |
| LLVM | Optional cross-compilation helper toolchain, per CONTRIBUTING.md (“targeting platforms other than x86_64/aarch64 Linux or macOS … you’ll also need llvm and clang”) | Not independently assessed as a dependency in this research; riscv64 never explicitly named in TiKV’s own docs for this purpose | N/A | N/A | No documented flags or known-good toolchain versions for riscv64 in TiKV’s docs |
mimalloc (optional allocator, --features mimalloc) |
Alternate allocator | Compiles via generic C fallback | No CI | No release binary | Correctness risk: #939/#1299 - SV39-vs-SV48/SV57 VA-range assumption causes segfaults when a binary built on one MMU config runs on another; build-time workaround merged Dec 2024, runtime hwprobe fix (#1299) still open/unmerged; same root cause in #610/#640 |
tcmalloc (optional allocator, --features tcmalloc) |
Alternate allocator | riscv64 not listed in docs/platforms.md at all |
No CI, no per-CPU RSEQ path | Source-only | No riscv64 issues/PRs exist - zero signal either way |
snmalloc-rs (optional allocator, --features snmalloc) |
Alternate allocator | Not researched (opt-in only, low priority) | - | - | - |
Snappy (optional RocksDB codec, via tikv/rust-snappy fork wrapping google/snappy) |
Block compression | Yes, dedicated riscv64-qemu-test.yaml CI |
Yes, via QEMU (no native runner, no RVV coverage) | No official binaries; distro packages available | google/snappy#209 (open, perf not correctness), RVV PRs #233/#235 open unreviewed for months |
zstd (optional RocksDB codec, zstd-sys) |
Block compression | Yes, CI on PRs to dev/release only | Yes, via QEMU user-mode on x86-64 host, non-blocking | No official binaries; Debian/Ubuntu package | Two now-fixed correctness bugs: PR #4525 (riscv64 silently used 32-bit code paths through v1.5.7, fixed 2025-12-02), PR #4502 (ZSTD_row_getRVVMask() silent corruption, fixed 2025-09-30); open: #4546, #4557 |
LZ4 (optional RocksDB codec, lz4-sys) |
Block compression | Yes, lowest-priority CI tier (grouped with MIPS/M68K/SPARC) | Via QEMU, non-blocking | No Linux prebuilt binaries for any arch | No correctness bugs open; several stalled RVV perf PRs (#1633, #1678, #1686, #1739, #1734, #1738) |
zlib (optional RocksDB codec, libz-sys, also used via flate2) |
Block compression | Yes, but only on OpenBSD in CI via QEMU - Linux riscv64 cross-compile CI absent even though ARM/AARCH64/PPC/S390X have it | No | No official binaries; distro packages available | One stalled perf PR (#1099, RVV Adler32, no maintainer response since Oct 2025) |
bzip2 (optional RocksDB codec, bzip2-sys) |
Block compression | No upstream CI at all for any non-x86 arch (not riscv64-specific) | No | No official binaries; Debian/Ubuntu package | #56, MR !68 - general correctness issues affecting all architectures, not riscv64-targeted |
| crc32fast / crc64fast | Checksums for RocksDB/raft-engine record integrity | Yes, pure Rust with runtime CPU-feature dispatch and portable scalar fallback | N/A (crate builds anywhere Rust targets riscv64gc) | Ships as a normal crates.io crate | Zero riscv64 issues found - lowest-risk dependency in this graph |
Protocol Buffers (TiKV uses pingcap/rust-protobuf fork + protobuf 3.7.2, not protocolbuffers/protobuf directly) |
Wire format for kvproto/tipb |
Not deep-dived; build-time protoc binary is packaged for riscv64 in Debian/Ubuntu |
- | - | Low architectural risk (no SIMD/asm in the Rust codegen path) |
Cross-cutting findings:
-latomic/__atomic_*linkage is a recurring, systemic riscv64 blocker, not a one-off: it previously broke RocksDB (fixed), and currently breaks the gRPC Python wheel build (grpc/grpc#35839, unfixed upstream), tracing to an open abseil-cpp bug (#1702, open since Jul 2024) that gRPC’s C core depends on transitively.- Pattern: CLA/maintainer-attention stalls, not technical blockers. RocksDB’s entire stack of open riscv64 performance PRs (
#14530/#14536/#14604/#14894) is blocked on an unresolved CLA registration plus unanswered maintainer pings, not on unsolved technical problems (benchmarks reportedly show a 16.9x CRC32C speedup on SG2044 hardware in the unmerged PR). The same shape (technically complete, unreviewed for months) recurs in Snappy, LZ4, zlib, and mimalloc. - Correctness bugs a TiKV riscv64 port would inherit directly: the OpenSSL AES T-table side-channel (encryption-at-rest / FIPS builds, open) and mimalloc’s SV39-vs-SV48/SV57 VA-range segfault (relevant only if built with
--features mimalloc). - project-graph MCP tool failure: the
project-graphMCP server failed to connect (CONNECTION_CLOSED) throughout this research, so Ubuntu 26.04 riscv64 package-graph queries and transitive-dependency enumeration for this table could not be run via that tool. This is a tooling gap, not evidence of package absence, and should be re-run once the server is reachable.
10. Ecosystem Status
Not applicable. TiKV is a standalone distributed database consumed as a compiled server binary (via TiUP) or as a component inside TiDB, not as a library with a large dependent package ecosystem (no significant tree of npm/PyPI/Maven/Kubernetes-operator packages depends on TiKV that would separately need riscv64 enablement). Section omitted per instructions.
11. Known Bugs and Active Issues
| ID | Title | Status | Severity | Notes |
|---|---|---|---|---|
| tikv/jemallocator#118 | Build fails for riscv64gc-unknown-linux-musl |
Open | High (blocks musl riscv64 builds of TiKV’s default allocator) | Configure step errors “cannot find sources (Makefile.in)”; reporter targeting a BananaPi BPI-F3 board; upstream jemalloc supports the target, the tikv wrapper’s build script does not handle it |
| tikv/jemallocator#36 | Bundled configure script didn’t recognize riscv64gc |
Closed | N/A (fixed) | Fix: use jemalloc’s autogen.sh instead of the pre-generated configure (referenced fix PR #40); opened 2022-08-29 |
| openssl/openssl PR#31080 / #31082 | AES T-table cache side-channel on riscv64 hardware lacking Zkn/Zvkned | Open | Critical (correctness/security, dependency-level) | Directly relevant to TiKV’s encryption-at-rest and FIPS build modes |
| openssl/openssl#30880 | Intermittent test_lhash failures on linux-riscv64 CI |
Open | Medium (dependency-level, test flakiness) | |
| grpc/grpc#35839 | __atomic_compare_exchange_1 undefined symbol, needs -latomic |
Closed (root cause unfixed upstream) | Medium (dependency-level) | Traces to open abseil-cpp#1702 |
| abseil/abseil-cpp#1702 | -latomic linker failure on riscv64 |
Open since Jul 2024 | Medium (dependency-level, blocks clean grpcio-sys builds) |
|
| abseil/abseil-cpp#2002 | SEGFAULTs in hashtable/cord tests on Debian riscv64 | Open, no maintainer response | Medium (dependency-level) | |
| RocksDB PRs #14530 / #14536 / #14894 / #14604 | -march/LLD fix, Zbc CRC32C, Zvbc vector CRC32C, RVV xxhash sync |
Open, stalled 4+ months | Medium-High (perf; blocks HW-accelerated CRC32C on riscv64) | Blocked on a CLA registration conflict; last maintainer ping 2026-08-08 unanswered |
| mimalloc issues #939 / #1299 / #610 / #640 | SV39 vs SV48/SV57 VA-range segfault | Open (build-time workaround merged Dec 2024; runtime hwprobe fix #1299 unmerged) |
High correctness risk, only if TiKV built with --features mimalloc (non-default) |
|
| tikv/tikv#6639 | “Cannot compile TiKV on ARM64” | Historical context | N/A | Shows TiKV has had build problems even on its second-tier supported architecture; no riscv64 equivalent has ever been filed since no one has attempted it |
| N/A | Zero riscv/riscv64 issues, PRs, commits, or code references exist in tikv/tikv itself |
Confirmed absence | N/A | This reflects “untested/unknown,” not “known broken” - an absence-of-data finding, not a clean bill of health |
Correctness bugs highlighted separately: the OpenSSL AES T-table side-channel (crypto correctness/security, open, affects encryption-at-rest/FIPS) and the mimalloc SV39/SV48/SV57 segfault (correctness, opt-in allocator only) are the two concrete correctness risks a TiKV riscv64 build would inherit today from its dependency chain.
12. Objections and Upstream Blockers
Stated objections: none exist. No riscv64 port has ever been proposed, so there is no recorded maintainer objection or discussion thread to cite.
Technical blockers: TiKV’s own code requires no changes to support riscv64 (there is no architecture-specific code to port - Section 4). The blockers are entirely in the native dependency chain: RocksDB’s CRC32C acceleration PRs are stalled (Section 9/11), the -latomic linkage problem recurs across gRPC/abseil-cpp, and jemalloc’s musl-target build is broken (tikv/jemallocator#118, open). None of these require TiKV-authored engineering per se, but they do block a clean, fully-accelerated riscv64 build today.
Organizational blockers: TiKV’s governance requires a 2/3-majority steering-committee vote for “Adoption of New Codebase” (GOVERNANCE.md), the category a new architecture port would plausibly fall under given the absence of a formal platform-tier policy. PingCAP holds 7 of 10 steering-committee seats, so acceptance depends heavily on PingCAP’s own resourcing priority. The one PingCAP-authored public content found on RISC-V (“RISC-V and TiDB: Enhancing Performance with Custom ISAs”) is speculative/conceptual marketing content with no actual benchmark data or port commitment - there is no evidence PingCAP has an active riscv64 initiative for TiKV.
Acceptance probability: given zero prior engagement - no tracking issue, no community discussion thread, no RISE Project involvement, and TiKV appearing in RISE’s own sw-ecosystem backlog as “queued but not yet researched” with no color previously assigned - there is currently no organizational momentum toward a port. Landing one would require an external contributor to both do the engineering work and clear PingCAP’s 2/3-majority governance bar.
13. Readiness Assessment
- Color: orange (base “no upstream CI” case per Step 1 of the color model)
- Release provider: none
- Optimization gap: N/A - TiKV is not an optimization-purpose project (it is a general-purpose distributed database/storage service, not a library whose sole value proposition is out-performing a reference implementation via architecture-specific code); the Step 2 optimization modifier does not apply and is not reflected in the header.
- Justification: TiKV has no upstream riscv64 CI of any kind - the repository’s only CI workflow,
tikv-clippy-darwin.yml, runs a macOS-only clippy lint job onamd64/arm64runners, with no Linux job, no QEMU, and no riscv64 target anywhere. No riscv64 code, issues, PRs, or commits exist in the repo (confirmed by exhaustive GitHub search and a full-repo grep of master). No distribution ships atikvpackage at all - not Ubuntu 26.04 resolute, not Arch Linux’s dedicated RISC-V port, not GitHub Releases (which carry no binary assets for any architecture) - so the distribution floor that could otherwise lift a no-CI project to yellow does not apply here, since there is no package, patched or unpatched, to apply it to. There is no positive evidence of breakage (no crash reports, no documented failed build attempt), so red is not warranted; and the absence of riscv64 support is well-documented and exhaustively confirmed rather than an unknown-unknown, so grey is not warranted either. This places TiKV squarely in the base “no upstream riscv64 CI” row of the color model: orange. - Pending work that could change the grade: none of it is TiKV-specific yet. At the dependency level, RocksDB’s stalled CRC32C acceleration PRs (
#14530/#14536/#14604/#14894) and OpenSSL’s already-strong riscv64 CI posture (dedicatedriscv-more-cross-compiles.yml, build+test) are the most relevant upstream signals that a future TiKV riscv64 effort could build on. Within RISE’s own tracking, TiKV sits in theriseproject-dev/sw-ecosystemproject queue as “queued but not yet researched” (project-reports/.queue.yml) - no RISE grading, funding, or runner allocation has occurred for TiKV to date. Any of the following would raise the grade: an upstream riscv64 CI job added totikv/tikv(build-only would move this to yellow; build+test to blue; build+test+riscv64 release artifact to green), or a distro shipping an unpatchedtikvpackage from vanilla source (yellow via the distribution floor).
14. Investment Analysis
RISE has not funded, tracked, or otherwise engaged with TiKV to date - it is listed only as an unresearched entry in RISE’s own project queue, with no prior grading, no wheel-builder listing, no blog coverage, and no RISE runner usage found anywhere in this research. All investment below is therefore un-covered scope, not duplicated work.
14.1 Functional Enablement
Primary work is dependency-chain plumbing, not TiKV-authored architecture code (none is needed - Section 4 shows TiKV has no arch-specific code to port). Concretely: fix or track the riscv64gc-unknown-linux-musl jemalloc build failure (tikv/jemallocator#118), verify TiKV’s Cargo build resolves cleanly against RocksDB/gRPC/OpenSSL on a riscv64 target end-to-end (never attempted per this research), and determine whether the aarch64-only Makefile accommodations (SSE-disable, outline-atomics) need a riscv64 analog.
14.2 Performance Optimization
No work is needed inside TiKV’s own repository (it has no hand-tuned code path for any architecture beyond a couple of x86_64-only helpers). The real performance work is at the dependency layer: helping land RocksDB’s stalled CRC32C PRs (#14530/#14536/#14604/#14894) and the RVV-acceleration PRs open against Snappy, zstd, LZ4, and zlib (Section 9) - none of which requires TiKV-side changes, but which would directly affect TiKV’s default production performance profile once functional support exists.
14.3 CI/CD Infrastructure
Add a Linux riscv64 build-and-test job to TiKV’s GitHub Actions (the current single workflow is macOS-lint-only, so this is a net-new job, not an extension of existing Linux CI). Given TiKV has zero current RISE engagement, RISE RISC-V Runners would be a natural fit to avoid standing up dedicated hardware.
14.4 Ecosystem Enablement
Not applicable / minimal - per Section 10, TiKV has no significant dependent package ecosystem of its own. The only adjacent consideration is whether TiUP (TiKV’s binary distribution channel) would need separate riscv64 packaging work, which is outside the scope of the tikv/tikv repository and was not researched here.
14.5 Summary Table
| Area | Work Item | Effort (person-weeks) | Owner | Priority |
|---|---|---|---|---|
| Functional | Fix tikv-jemalloc-sys/tikv-jemallocator build for riscv64gc-unknown-linux-musl (or confirm glibc-only is sufficient) |
Data not available: no effort estimate found in research; [NEEDS VERIFICATION] | TiKV/PingCAP or jemalloc-rs maintainers | High |
| Functional | End-to-end validate cargo build --release for TiKV against RocksDB/gRPC/OpenSSL on a riscv64gc target (first attempt ever) |
Data not available: no prior attempt exists to size against | TiKV/PingCAP | Critical |
| Functional | Determine whether aarch64-only Makefile workarounds (SSE-disable, outline-atomics) need a riscv64 equivalent | Data not available | TiKV/PingCAP | Medium |
| Performance | Support landing RocksDB’s stalled #14530/#14536/#14604/#14894 (CRC32C/RVV acceleration) |
Data not available: PRs are code-complete per research, blocked on CLA/review, not effort | RocksDB upstream (external to TiKV) | Medium |
| Security | Track/mitigate OpenSSL AES T-table side-channel (#31080/#31082) before enabling encryption-at-rest/FIPS on riscv64 |
Data not available | OpenSSL upstream (external to TiKV) | High |
| CI/CD | Add a Linux riscv64 build+test GitHub Actions job to tikv/tikv |
Data not available | TiKV/PingCAP | High |
| CI/CD | Evaluate RISE RISC-V Runners for the new job | Data not available | TiKV/PingCAP, RISE | Medium |
15. Updates
No updates yet - initial report dated 2026-09-11.
16. References
- tikv/tikv repository
- TiKV homepage
- tikv-clippy-darwin.yml CI workflow
- tikv/tikv CONTRIBUTING.md
- tikv/community GOVERNANCE.md
- tikv/tikv issue search for riscv
- tikv/tikv#15926 (ARM64 regression, false-positive match on “riscv64” search)
- tikv/tikv#6639 (Cannot compile TiKV on ARM64)
- tikv/jemallocator#118 (riscv64gc-unknown-linux-musl build failure, open)
- tikv/jemallocator#36 (riscv64gc configure recognition, closed)
- tikv/pprof-rs (added RISC-V support in v0.11.1, PR #169)
- jemalloc/jemalloc#2323 (Add support for riscv64gc, closed)
- openssl/openssl PR #31080 (AES T-table side-channel fix)
- openssl/openssl PR #31082 (AES T-table side-channel fix)
- openssl/openssl#30880 (intermittent test_lhash failures on linux-riscv64)
- openssl/openssl#22166 (SSL test races at HARNESS_JOBS>=38)
- openssl/openssl#28118 (extension detection broken under musl)
- grpc/grpc#41591 (no official riscv64 PyPI wheel, open)
- grpc/grpc#37791 (SIGILL from stale abseil RDCYCLE, closed)
- grpc/grpc#35839 (__atomic_compare_exchange_1 undefined symbol, closed)
- abseil/abseil-cpp#1702 (-latomic linker failure, open since Jul 2024)
- abseil/abseil-cpp#2002 (SEGFAULTs in hashtable/cord tests on Debian riscv64, open)
- facebook/rocksdb PR #14530 (-march/LLD fix, open)
- facebook/rocksdb PR #14536 (Zbc CRC32C, open)
- facebook/rocksdb PR #14894 (Zvbc vector CRC32C, open)
- facebook/rocksdb PR #14604 (RVV xxhash sync, open)
- google/snappy#209 (FindMatchLength scalar path on RISC-V, open)
- google/snappy PR #220 (partial fix)
- zstd PR #4525 (riscv64 not recognized as 64BIT, fixed 2025-12-02)
- zstd PR #4502 (ZSTD_row_getRVVMask silent corruption, fixed 2025-09-30)
- zstd#4546 (RVV unaligned-access check, open)
- zstd#4557 (RISC-V sequence-decoding path, open)
- zlib PR #1099 (RVV-optimized Adler32, stalled)
- microsoft/mimalloc#939 (SV39 VA-range segfault, open)
- microsoft/mimalloc#1299 (runtime hwprobe fix, open)
- PyPI tikv package (unrelated placeholder)
- Ubuntu 26.04 resolute package search for TiKV
- Arch Linux RISC-V port package search
- RISE wheel builder simple index for tikv
- RISE Project blog
- riseproject-dev/sw-ecosystem project queue (TiKV listed as queued, not yet researched)
- PingCAP: RISC-V and TiDB, Enhancing Performance with Custom ISAs (speculative, no benchmark data)
- PingCAP: Porting TiDB to Arm64 for Greater Flexibility