TL;DR

Schelk là công cụ snapshot & rollback filesystem viết bằng Rust, vừa được Georgios Konstantopoulos (Paradigm) announce open-source tại github.com/tempoxyz/schelk. Tác giả chính: Sergei Shulepov (@pepyakin). Điểm khác biệt: rollback chỉ mất vài giây trên volume multi-TB, benchmark chạy trên ext4 nguyên bản không qua lớp overlay nào, nhờ tận dụng target dm-era của Linux device-mapper.

Schelk là gì?

Schelk được Tempo — tổ chức blockchain thanh toán build trên Reth SDK và được Paradigm backing — dùng hằng ngày để tăng tốc benchmark loop khi tối ưu storage engine và execution client. Hôm nay họ open-source dưới dual license Apache-2.0 / MIT.

Nó giải quyết đúng một bài toán đau đầu của kỹ sư hiệu năng: khôi phục trạng thái on-disk về baseline thật nhanh, nhưng vẫn đo được số liệu trung thực. Hai yêu cầu tưởng mâu thuẫn này lâu nay vẫn phải hy sinh một.

Tại sao đáng quan tâm

Benchmark database hay blockchain client thường mắc một trong hai bẫy:

  • Snapshot CoW (ZFS, btrfs): rollback nhanh, nhưng copy-on-write thêm write amplification lên hot path → số đo bị bóp méo.
  • LVM thin provisioning: tương tự — metadata + chunk remap trên đường đi của mỗi lần ghi làm sai latency.
  • Restore full image (dd): đo sạch nhưng thời gian khôi phục tỉ lệ với toàn bộ volume — vài phút đến vài giờ với ổ TB-scale.

Schelk đánh đổi theo hướng khác: không hề đặt lớp nào giữa benchmark và ext4, đồng thời chỉ copy đúng những block đã thay đổi khi rollback.

Cơ chế hoạt động

Thiết kế dựa trên hai block device cùng kích thước:

  • Virgin volume — giữ baseline sạch, read-only trong quá trình benchmark.
  • Scratch volume — nơi workload thực sự chạy.

Khi init, scratch được clone byte-for-byte từ virgin. Khi mount, Schelk đặt target dm-era lên scratch. dm-era là một target device-mapper gốc trong Linux kernel: nó hành xử như linear (pass-through), đồng thời ghi lại mọi block đã bị ghi vào metadata. Metadata này đặt trên ramdisk (~4 GiB cho ổ 1.7 TiB ở granularity 4 KiB) để không đụng I/O storage thật.

Benchmark chạy trên ext4 tinh khôi — không overlay, không CoW, không redirection. Đây là chi tiết then chốt: hot path của benchmark không khác gì một cài đặt production bình thường.

Khi gọi schelk recover, tool đọc danh sách block đã bẩn từ dm-era, rồi chỉ copy những block đó từ virgin sang scratch. Recovery time tỉ lệ với lượng byte đã ghi, không phải kích thước volume. README nói thẳng: một benchmark ghi vài GiB trên ổ multi-TB thường rollback trong vài giây.

Thông số kỹ thuật

Thuộc tínhGiá trị
Ngôn ngữRust
Filesystem hỗ trợext4
Cơ chế trackingLinux device-mapper dm-era
Nơi lưu metadataRamdisk (~4 GiB cho 1.7 TiB @ 4 KiB granularity)
Yêu cầuKernel Linux có dm-era, dmsetup, e2fsprogs, thin-provisioning-tools (cung cấp era_invalidate), Rust toolchain
Recovery timeTỉ lệ với bytes đã ghi, không phải kích thước volume
LicenseApache-2.0 & MIT (dual)

So sánh với các lựa chọn khác

Phương ánẢnh hưởng hot pathRecovery timeSetup
ZFS / btrfs snapshotCao (CoW write amp)GiâyTrung bình
LVM thinTrung bình (remap)GiâyPhức tạp
dd full restoreKhông (đo sạch)Scale theo volume (phút–giờ)Đơn giản
SchelkKhông (ext4 thuần)Scale theo bytes ghi (giây)Cần 2 block device bằng nhau + ramdisk

Ai nên dùng

  • Database engineer đang tune storage engine, layout index, compaction strategy — cần chạy hàng chục iteration/ngày trên cùng dataset vài trăm GB.
  • Dev blockchain execution client (reth, tempo, các node EVM): rollback state sau sync để reproducible benchmark block execution.
  • Perf research nơi variance đo lường quan trọng — loại bỏ CoW interference nghĩa là các lần đo so sánh được apples-to-apples.

Quick start

cargo install --path .

sudo schelk init-new \
    --virgin /dev/nvme1n1 \
    --scratch /dev/nvme2n1 \
    --ramdisk /dev/ram0 \
    --mount-point /schelk

sudo schelk mount
./bench.sh
sudo schelk recover   # rollback trong vài giây

Có thể schelk promote để biến trạng thái hiện tại thành baseline mới — hữu ích khi bạn muốn bake thêm dữ liệu seed vào virgin.

Limitations & pricing

  • Miễn phí, open-source (Apache-2.0 / MIT). Không có paid tier.
  • Chỉ Linux, chỉ ext4 — tool gọi thẳng mkfs.ext4 và dựa vào semantics của ext4.
  • Cần 2 block device cùng kích thước, dành toàn quyền cho Schelk.
  • Metadata ramdisk không sống qua reboot — mất điện là phải full recover từ virgin.
  • Không restore trạng thái nội bộ NVMe (FTL, wear leveling, controller cache). Quan trọng với SSD-level benchmark, không đáng kể với DB/chain workload.

What's next

README chưa kèm roadmap chính thức. Những hướng mở rộng tự nhiên từ ràng buộc hiện tại: hỗ trợ filesystem khác ngoài ext4, metadata persistent để không cần full recover sau reboot, và tích hợp sâu hơn với reth-bench. License permissive nên cộng đồng hoàn toàn có thể đóng góp các hướng này.

Nguồn: gakonst on X, tempoxyz/schelk, Linux kernel dm-era docs, Paradigm: Releasing Reth 2.0.