[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250911072925.547163-1-409411716@gms.tku.edu.tw>
Date: Thu, 11 Sep 2025 15:29:25 +0800
From: Guan-Chun Wu <409411716@....tku.edu.tw>
To: kbusch@...nel.org,
axboe@...nel.dk,
hch@....de,
sagi@...mberg.me,
xiubli@...hat.com,
idryomov@...il.com,
ebiggers@...nel.org,
tytso@....edu,
jaegeuk@...nel.org,
akpm@...ux-foundation.org
Cc: visitorckw@...il.com,
home7438072@...il.com,
409411716@....tku.edu.tw,
linux-kernel@...r.kernel.org,
linux-nvme@...ts.infradead.org,
ceph-devel@...r.kernel.org,
linux-fscrypt@...r.kernel.org
Subject: [PATCH v2 0/5] lib/base64: add generic encoder/decoder, migrate users
This series introduces a generic, customizable Base64 encoder/decoder to
the kernel library, eliminating duplicated implementations and delivering
significant performance improvements.
The new helpers support a caller-supplied 64-character table and optional
'=' padding, covering existing variants such as base64url (fscrypt) and
Ceph's custom alphabet. As part of this series, both fscrypt and Ceph are
migrated to the generic helpers, removing their local routines while
preserving their specific formats.
On the encoder side, the implementation operates on 3-byte input blocks
mapped directly to 4 output symbols, avoiding bit-by-bit streaming. This
reduces shifts, masks, and loop overhead, achieving up to ~2.7x speedup
over previous implementations while remaining fully RFC 4648-compatible.
On the decoder side, optimizations replace strchr()-based lookups with a
direct mapping table. Together with stricter RFC 4648 validation, this
yields a ~12-15x improvement in decode throughput.
Overall, the series improves maintainability, correctness, and
performance of Base64 handling across the kernel.
Note:
- The included KUnit patch provides correctness and performance
comparison tests to help reviewers validate the improvements. All
tests pass locally on x86_64 (KTAP: pass:3 fail:0 skip:0). Benchmark
numbers are informational only and do not gate the tests.
- Updates nvme-auth call sites to the new API.
Thanks,
Guan-Chun Wu
---
v1 -> v2:
- Add a KUnit test suite for lib/base64:
* correctness tests (multiple alphabets, with/without padding)
* simple microbenchmark for informational performance comparison
- Rework encoder/decoder:
* encoder: generalize to a caller-provided 64-character table and
optional '=' padding
* decoder: optimize and extend to generic tables
- fscrypt: migrate from local base64url helpers to generic lib/base64
- ceph: migrate from local base64 helpers to generic lib/base64
---
Guan-Chun Wu (4):
lib/base64: rework encoder/decoder with customizable support and
update nvme-auth
lib: add KUnit tests for base64 encoding/decoding
fscrypt: replace local base64url helpers with generic lib/base64
helpers
ceph: replace local base64 encode/decode with generic lib/base64
helpers
Kuan-Wei Chiu (1):
lib/base64: Replace strchr() for better performance
drivers/nvme/common/auth.c | 7 +-
fs/ceph/crypto.c | 53 +-------
fs/ceph/crypto.h | 6 +-
fs/ceph/dir.c | 5 +-
fs/ceph/inode.c | 2 +-
fs/crypto/fname.c | 86 +------------
include/linux/base64.h | 4 +-
lib/Kconfig.debug | 19 ++-
lib/base64.c | 239 ++++++++++++++++++++++++++++++-------
lib/tests/Makefile | 1 +
lib/tests/base64_kunit.c | 230 +++++++++++++++++++++++++++++++++++
11 files changed, 466 insertions(+), 186 deletions(-)
create mode 100644 lib/tests/base64_kunit.c
--
2.34.1
Powered by blists - more mailing lists