
pingqiuandClaude Opus 4.6
ebe95b6e2e
fix: flusher OOM on multi-block writes + testrunner enhancements
Bug: flusher.go:336 allocated make([]byte, entryLen) per dirty block
instead of per unique WAL entry. A 4MB WriteLBA creates 1024 dirty map
entries (one per 4KB block), all sharing the same WAL offset. The flusher
read the full 4MB WAL entry 1024 times into separate buffers:
1024 × 4MB = 4GB per 4MB write → OOM on mkfs.ext4.
Root cause: flusher assumed 1:1 dirty-block-to-WAL-entry mapping.
WriteLBA supports multi-block writes but the flusher never deduplicated
shared WAL offsets.
Fix: deduplicate WAL reads by WalOffset in flushOnceLocked(). Multiple
dirty blocks from the same WAL entry share one read buffer and one
DecodeWALEntry call. Memory: O(WAL_entries × size) not O(blocks × size).
For a 4MB write: 4GB → 4MB.
Verified on hardware (m01/M02 25Gbps RoCE):
- Before: mkfs.ext4 → VS RSS 100MB→25GB → OOM killed
- After: mkfs.ext4 → VS RSS 129MB stable, mkfs succeeds
- pgbench TPC-B c=4: 1,248 TPS (RF=1, previously blocked by OOM)
Tests added:
- flusher_test.go: flush_multiblock_shared_wal_read (16 blocks share
one WAL offset, flush dedup verified)
- flusher_test.go: flush_multiblock_data_correct (3 mixed multi-block
writes, all data correct after flush)
- test/component/large_write_test.go: 7 component tests (single 4MB,
sequential mkfs sim, concurrent, mixed sizes, production volume,
flusher throughput 30s sustained)
- iscsi/large_write_mem_test.go: 2 iSCSI session memory tests (4MB
R2T flow, slow device)
Testrunner enhancements (same commit — all tested on hardware):
- discover_primary action: maps primary IP → topology node name,
supports alt_ips for multi-NIC (RoCE + management)
- NodeSpec.AltIPs field for multi-NIC node identification
- 5 new YAML scenarios: ec3, ec5, degraded sync_all/best_effort, pgbench
- All 13 hardware-verified scenarios PASS
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 14:24:10 -07:00
..
2026-03-10 18:19:31 -07:00
2026-03-23 02:12:25 -07:00
2026-03-06 01:06:51 -08:00
2026-03-11 17:35:43 -07:00
2026-04-02 14:24:10 -07:00
2026-03-23 02:12:42 -07:00
2026-03-10 15:09:41 -07:00
2026-03-09 17:44:01 -07:00
2026-03-02 09:33:45 -08:00
2026-04-02 14:24:10 -07:00
2026-04-02 14:24:10 -07:00
2026-03-31 15:55:37 -07:00
2026-03-04 11:01:08 -08:00
2026-03-04 11:01:08 -08:00
2026-03-26 16:46:31 -07:00
2026-03-11 17:35:43 -07:00
2026-03-02 09:34:00 -08:00
2026-03-31 10:46:17 -07:00
2026-03-24 00:19:25 -07:00
2026-03-25 15:38:06 -07:00
2026-03-31 15:22:23 -07:00
2026-03-01 10:43:34 -08:00
2026-03-09 17:44:01 -07:00
2026-03-10 16:02:30 -07:00
2026-03-01 10:43:34 -08:00
2026-03-01 21:26:39 -08:00
2026-03-25 15:38:06 -07:00
2026-03-25 02:39:32 -07:00
2026-03-06 01:06:51 -08:00
2026-03-06 01:06:51 -08:00
2026-03-12 19:30:59 -07:00
2026-03-01 16:00:06 -08:00
2026-03-12 15:06:48 -07:00
2026-04-02 14:24:10 -07:00
2026-04-02 14:24:10 -07:00
2026-03-01 10:43:34 -08:00
2026-03-06 00:05:17 -08:00
2026-03-06 00:05:17 -08:00
2026-03-06 00:05:17 -08:00
2026-02-28 09:32:01 -08:00
2026-02-28 09:32:01 -08:00
2026-03-07 21:30:14 -08:00
2026-03-01 16:00:06 -08:00
2026-03-04 11:01:08 -08:00
2026-03-08 23:02:59 -07:00
2026-03-30 20:01:46 -07:00
2026-03-26 19:16:45 -07:00
2026-03-22 14:44:24 -07:00
2026-03-22 14:44:24 -07:00
2026-03-07 21:30:14 -08:00
2026-03-12 15:06:48 -07:00
2026-03-12 15:06:48 -07:00
2026-03-01 16:00:06 -08:00
2026-03-02 09:33:45 -08:00
2026-03-25 15:38:06 -07:00
2026-03-09 17:44:01 -07:00
2026-03-02 09:33:45 -08:00
2026-03-02 09:34:35 -08:00
2026-03-25 15:38:06 -07:00
2026-03-03 17:05:43 -08:00
2026-03-13 10:56:18 -07:00
2026-03-13 00:15:27 -07:00
2026-03-03 17:05:43 -08:00
2026-03-12 15:06:48 -07:00
2026-03-11 17:35:44 -07:00
2026-03-13 17:21:17 -07:00
2026-03-12 19:30:59 -07:00
2026-03-26 17:22:55 -07:00
2026-03-26 17:22:55 -07:00
2026-03-30 20:01:46 -07:00
2026-03-30 20:01:46 -07:00
2026-03-25 15:38:06 -07:00
2026-03-30 20:01:46 -07:00
2026-03-25 01:52:35 -07:00
2026-03-03 01:43:42 -08:00
2026-03-05 00:52:05 -08:00
2026-03-06 00:05:17 -08:00
2026-03-06 00:05:17 -08:00
2026-03-25 02:39:32 -07:00
2026-03-31 10:46:17 -07:00
2026-03-13 10:56:18 -07:00
2026-03-23 20:40:41 -07:00
2026-03-03 00:53:33 -08:00
2026-03-03 00:53:33 -08:00
2026-03-11 21:52:00 -07:00
2026-03-11 21:52:00 -07:00
2026-03-06 01:06:51 -08:00
2026-03-12 15:06:48 -07:00
2026-03-30 20:01:46 -07:00
2026-03-25 15:38:06 -07:00
2026-03-30 20:01:46 -07:00
2026-03-12 19:30:59 -07:00
2026-03-12 19:30:59 -07:00
2026-02-28 09:32:01 -08:00
2026-02-28 09:32:01 -08:00
2026-03-12 19:30:59 -07:00
2026-03-12 19:30:59 -07:00
2026-03-31 10:46:17 -07:00
2026-03-01 10:43:34 -08:00
2026-03-03 00:53:33 -08:00
2026-03-01 16:00:06 -08:00