From deb237a28883bba0584766129b01997ccd63c4fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= Date: Wed, 17 Jul 2024 15:08:27 +0200 Subject: [PATCH] image backup: use 4M input buffer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit with the default 8k input buffer size, the client will spend most of the time polling instead of reading/chunking/uploading. tested with 16G random data file from tmpfs to fresh datastore backed by tmpfs, without encryption. stock: Time (mean ± σ): 36.064 s ± 0.655 s [User: 21.079 s, System: 26.415 s] Range (min … max): 35.663 s … 36.819 s 3 runs patched: Time (mean ± σ): 23.591 s ± 0.807 s [User: 16.532 s, System: 18.629 s] Range (min … max): 22.663 s … 24.125 s 3 runs Summary patched ran 1.53 ± 0.06 times faster than stock Signed-off-by: Fabian Grünbichler --- proxmox-backup-client/src/main.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/proxmox-backup-client/src/main.rs b/proxmox-backup-client/src/main.rs index 6a7d0904..5edb2a82 100644 --- a/proxmox-backup-client/src/main.rs +++ b/proxmox-backup-client/src/main.rs @@ -286,8 +286,12 @@ async fn backup_image>( let file = tokio::fs::File::open(path).await?; - let stream = tokio_util::codec::FramedRead::new(file, tokio_util::codec::BytesCodec::new()) - .map_err(Error::from); + let stream = tokio_util::codec::FramedRead::with_capacity( + file, + tokio_util::codec::BytesCodec::new(), + 4 * 1024 * 1024, + ) + .map_err(Error::from); let stream = FixedChunkStream::new(stream, chunk_size.unwrap_or(4 * 1024 * 1024));