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
- Linux man-pages 6.19: vmsplice(2), directions, GIFT and NOTES
- Linux v6.8: iter_to_pipe, pipe_to_user and user_page_pipe_buf_try_steal
- Linux v6.17: vmsplice source-path comparison
- Hesela: vmsplice direction and source ownership
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.