Skip to content

fs: remove per-file fsync from sparse-aware copyFile#304

Open
pengubco wants to merge 1 commit into
containerd:mainfrom
pengubco:fix-copy-issue-303
Open

fs: remove per-file fsync from sparse-aware copyFile#304
pengubco wants to merge 1 commit into
containerd:mainfrom
pengubco:fix-copy-issue-303

Conversation

@pengubco

Copy link
Copy Markdown

The per-file tgt.Sync() added in a424ba1 causes a 17x performance regression when copying directories with many files. For 50K files of 10KiB each, per-file fsync takes over 1 minute vs 4.4 seconds without it.

This severely impacts container start latency for images using the VOLUME directive, where volumeCopyUp calls fs.CopyDir to populate the mount point.

The previous implementation (io.Copy) never called fsync, and the callers of CopyDir do not require per-file durability — the source data is always available for replay from immutable image layers.

Fixes: #303

The per-file tgt.Sync() added in a424ba1 causes a 17x performance
regression when copying directories with many files. For 50K files
of 10KiB each, per-file fsync takes over 1 minute vs 4.4 seconds
without it.

This severely impacts container start latency for images using the
VOLUME directive, where volumeCopyUp calls fs.CopyDir to populate
the mount point.

The previous implementation (io.Copy) never called fsync, and the
callers of CopyDir do not require per-file durability — the source
data is always available for replay from immutable image layers.

Fixes: containerd#303
Signed-off-by: Peng Zhang <pengubco@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fs: per-file fsync in sparse-aware copyFile causes 17x regression for many-files workloads

1 participant