plakar-incus-integration: analyze the giant-instance seek-bound wall
Per-file access to cold, tiny-file trees on HDD is ~275 IOPS whatever the importer; only zfs send reads sequentially. Options recorded, direction: per-file for the 16 small instances, zfs send for nextcloud/seafile. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
6c392356e8
commit
7967b61920
@@ -119,6 +119,41 @@ to the installed plakar line (v1.1.x), rebuild the ptar on a plakar
|
|||||||
major upgrade; a mismatch surfaces at backup time, so run a manual
|
major upgrade; a mismatch surfaces at backup time, so run a manual
|
||||||
`plakar backup @ks4-incus` after plakar upgrades.
|
`plakar backup @ks4-incus` after plakar upgrades.
|
||||||
|
|
||||||
|
## The giant-instance problem (2026-08-24, seed attempt #1)
|
||||||
|
|
||||||
|
The per-file S3 seed of the whole `backup` project stalled at
|
||||||
|
~1 MiB/s once it reached the big replicas: sdb at 96 % util doing
|
||||||
|
~275 × 4 KiB reads/s — **cold random tiny-file reads on an HDD are
|
||||||
|
seek-bound**, regardless of importer (the fs importer hit the same
|
||||||
|
wall on the live pool; sftp changes nothing). At ~275 IOPS,
|
||||||
|
nextcloud (725 G, ~500 k files) + seafile (933 G, millions of block
|
||||||
|
files) need *weeks* to seed. The 16 small instances are unaffected
|
||||||
|
(solar smoke test: 5 GiB in 2m38s).
|
||||||
|
|
||||||
|
Options considered for nextcloud/seafile:
|
||||||
|
|
||||||
|
1. **backups-API tarball (`mode=image`)** — sequential-ish but incus
|
||||||
|
materializes the tarball server-side first (no room on `/`; would
|
||||||
|
need `storage.backups_volume` on the backup pool) and the tar walk
|
||||||
|
itself seeks like any tree walk. Double IO nightly. Weak.
|
||||||
|
2. **`zfs send` of the replica dataset** — the only truly sequential
|
||||||
|
read (disk block order, ~100+ MiB/s, no temp space): seed in
|
||||||
|
hours. Full send nightly is ~4 h read for both giants; CDC chunking
|
||||||
|
dedups unchanged stream regions. Restore = `zfs receive` +
|
||||||
|
`incus admin recover` (document!). Backend-specific — acceptable as
|
||||||
|
an opt-in mode for exactly these two.
|
||||||
|
3. **Per-file + warm metadata** — after a seed, nightly walks are
|
||||||
|
stat-only; keeping dnodes resident (`zfs_arc_min` ≈ 8 G) could make
|
||||||
|
them fast. Doesn't solve the *seed*.
|
||||||
|
4. **Exclude giants from this leg** — leaves seafile without any
|
||||||
|
fresh off-site copy (data leg already excludes it). Not acceptable
|
||||||
|
long-term.
|
||||||
|
|
||||||
|
Direction (pending decision): seed the 16 small instances per-file
|
||||||
|
(`exclude_instances=nextcloud,seafile`), then implement option 2 as a
|
||||||
|
`zfs+send://` mode or side-channel for the two giants, and revisit 3
|
||||||
|
for nightly stat-walk speed.
|
||||||
|
|
||||||
## Open questions
|
## Open questions
|
||||||
|
|
||||||
- uid/gid view through the instance sftp endpoint (idmap handling for
|
- uid/gid view through the instance sftp endpoint (idmap handling for
|
||||||
|
|||||||
Reference in New Issue
Block a user