How the CubeCoW Copy-on-Write Snapshot Engine Enables Event-Level Snapshots and Instant Cloning

The CubeCoW snapshot engine leverages XFS reflinks and metadata-only index cloning to perform O(1) snapshot operations in microseconds, enabling event-level checkpointing at high frequencies without duplicating underlying data blocks.

The CubeCoW Copy-on-Write snapshot engine powers the storage layer of TencentCloud's CubeSandbox, delivering thin-provisioned block devices that support instantaneous snapshots and cloning. By separating the block-storage index from physical data blocks, this engine enables developers to capture entire sandbox states at event-level granularity—such as after individual function calls or requests—with minimal latency and storage overhead.

Core Architecture and Copy-On-Write Mechanics

The engine implements a mutable index architecture that maps logical blocks to physical data blocks stored on XFS. When you initiate a snapshot, the engine performs a cheap pointer copy of this index rather than duplicating the underlying data, resulting in an O(1) operation that completes in microseconds regardless of volume size.

Metadata-Only Snapshot Creation

According to the source code in cubecow/include/cubecow.h, the cubecow_create_snapshot function clones only the index metadata. The underlying data blocks remain shared between the original volume and the snapshot until a write operation occurs. At that point, the engine allocates a new data block, copies the existing data (Copy-on-Write), and updates the index for the writable volume—leaving the snapshot's reference unchanged.

Event-Level Snapshot Capability

Because snapshots are O(1) operations requiring only a few hundred microseconds, the Cubelet can capture sandbox state hundreds of times per second. This event-level granularity allows the system to checkpoint state after every request, function invocation, or critical operation, providing fine-grained rollback points for AI agents and serverless workloads.

Integration with the CubeSandbox Storage Layer

The Go wrapper in Cubelet/pkg/cubecow/cubecow.go exposes high-level methods including CreateVolume, CreateSnapshot, ActivateVolume, and DeleteSnapshot. These methods wrap the C FFI defined in cubecow/include/cubecow.h to provide idiomatic Go access to the underlying engine.

Volume Management and Activation

The Cubelet/storage/cubecow_volume_manager.go file orchestrates volume lifecycle operations, interfacing with Cubelet/storage/local.go to determine when snapshotting should occur. When a sandbox request specifies snapshot creation, the code path invokes engine.CreateSnapshot with the activate parameter set to true, which immediately materializes a device node for instant rollback or cloning.

// Initialize the Cubecow engine from a TOML config file.
engine, err := cubecow.Init("/etc/cubecow/config.toml")
if err != nil {
    log.Fatalf("failed to init Cubecow: %v", err)
}
defer engine.Close()

// 1️⃣ Create a writable volume for a sandbox.
devPath, err := engine.CreateVolume("sandbox-123", 10<<30) // 10 GB
if err != nil {
    log.Fatalf("create volume: %v", err)
}
fmt.Println("Volume device:", devPath)

// 2️⃣ Take an event-level snapshot (activate = true to get a device node).
snapDev, err := engine.CreateSnapshot("sandbox-123", "snap-evt-001", true)
if err != nil {
    log.Fatalf("snapshot: %v", err)
}
fmt.Println("Snapshot device:", snapDev)

// 3️⃣ Roll back by deactivating the current volume and activating the snapshot.
if err := engine.DeactivateVolume("sandbox-123"); err != nil {
    log.Fatalf("deactivate: %v", err)
}
if _, err := engine.ActivateVolume("snap-evt-001"); err != nil {
    log.Fatalf("activate snapshot: %v", err)
}

// 4️⃣ List snapshots for inspection.
list, _ := engine.ListSnapshots("sandbox-123", 100, "")
fmt.Printf("Snapshots: %+v\n", list.Snapshots)

Engine Initialization and Cleanup

The Cubelet/storage/cubecow_engine.go file provides simple accessors to obtain the engine singleton, ensuring consistent initialization across the storage layer. The Init function accepts a TOML configuration path and establishes the connection to the underlying XFS-based storage pools.

Performance Characteristics and Design Benefits

  • Instant snapshot creation: Cloning the index metadata only results in O(1) complexity, enabling hundreds of snapshots per second.
  • Storage efficiency: Data blocks are shared between volumes and snapshots until a write triggers CoW allocation, minimizing disk usage.
  • Fast rollback: The cubecow_activate_volume function (exposed as ActivateVolume in Go) materializes a device node instantly without copying data.
  • Consistent state capture: The engine manages both writable disk and memory-mapped block devices, ensuring snapshots capture the complete filesystem state.

Summary

  • The CubeCoW Copy-on-Write snapshot engine achieves O(1) snapshot performance by cloning only the block index while sharing underlying data blocks via XFS reflinks.
  • Event-level snapshots are feasible because the operation completes in microseconds, allowing hundreds of checkpoints per second.
  • The Go API in Cubelet/pkg/cubecow/cubecow.go wraps the C FFI to provide methods like CreateSnapshot, ActivateVolume, and ListSnapshots.
  • Integration with Cubelet/storage/local.go enables automatic snapshotting during sandbox requests when IsCreateSnapshot() returns true.
  • Copy-on-Write occurs only on first write to a shared block, ensuring minimal storage overhead and optimal performance.

Frequently Asked Questions

How does CubeCoW differ from traditional LVM or ZFS snapshots?

Traditional snapshots often require copying metadata structures or using recursive cloning that scales with filesystem complexity. CubeCoW performs a flat index clone that references the same physical blocks through XFS reflinks, making snapshot creation time constant (O(1)) rather than proportional to volume size or file count.

What filesystem requirements does CubeCoW have?

CubeCoW requires an XFS filesystem with reflink support enabled. The engine relies on XFS's ability to create copy-on-write clones of data extents to implement its thin-provisioning and snapshot sharing mechanics.

Can CubeCoW snapshots capture both disk and memory state?

Yes. The engine manages writable block devices and memory-mapped block devices used by the sandbox. When you create a snapshot via CreateSnapshot, the resulting checkpoint captures the complete filesystem state including any memory-mapped regions, providing a consistent view of the sandbox at the moment of snapshotting.

How does instant cloning work in CubeCoW?

When you activate a snapshot using ActivateVolume (backed by cubecow_activate_volume in the C layer), the engine creates a new device node that points to the snapshot's index and shared data blocks. This materializes a fully functional block device instantly without copying data, enabling immediate rollback or parallel cloning of sandbox states.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →