vmsplice · shipping

vmsplice

vmsplice is a Linux system call that transfers data between a pipe and user-memory ranges described by an iovec array.

Direction matters: the documented pipe-to-user path copies bytes, while the user-to-pipe path can retain references to user pages. The absent SPLICE_F_GIFT flag is not a promise that initial enqueue creates an independent byte snapshot. [1]

In the reviewed upstream v6.8 code, iter_to_pipe collects pages with or without GIFT; the donation check instead governs the page-stealing helper. The syscall imports the range description before dispatching to the selected direction. The v6.17 source has the same distinction; this is a source comparison, not measurement on that second kernel. [2] [3]

Hesela's ordered experiment on Linux 6.8.0-147-generic used flags=0: overwriting a source after enqueue changed the subsequent read, and partial consumption assembled half A and half B. Rebinding iovec did not redirect the queued bytes. Reverse vmsplice preserved the version copied at its read point. Forty-eight retained executions represent eight scenarios, three repetitions and two compiler settings on one kernel, not independent reliability samples. No GIFT case or performance test was run. [4]

Relations

related
splice, Zero-copy I/O, tee (Linux system call), sendfile

Limitations

  • SPLICE_F_GIFT imposes a no-modification obligation on donated pages and requires page-aligned memory and lengths; it is not a general buffer-reuse notification. [1]

Citations

  1. Linux man-pages 6.19: vmsplice(2), directions, GIFT and NOTES (accessed 2026-11-10)
  2. Linux v6.8: iter_to_pipe, pipe_to_user and user_page_pipe_buf_try_steal (accessed 2026-11-10)
  3. Linux v6.17: vmsplice source-path comparison (accessed 2026-11-10)
  4. Hesela: vmsplice direction and source ownership (accessed 2026-11-10)
Sources & caveats
  • Linux documentation and two pinned upstream implementations distinguish copying, page lifetime and donation. The native observation is scoped to one Ubuntu kernel, not a trace or rebuild of those upstream revisions.
  • The retained experiment uses private anonymous mappings and pipes. No race, GIFT, hardware fault, persistence test or IO-Lite reproduction is claimed.

JSON: /data/terms/vmsplice.json

Published by Hesela team · Updated

Report a correction · Editorial standards · Reuse guidance

Cite this page
Hesela team. vmsplice. Hesela. 2026-11-10. https://hesela.dev/terms/vmsplice/