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 <f.gruenbichler@proxmox.com>
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));