C2FO / vfs

Pluggable, extensible virtual file system for Go

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

VFS TouchCopy Performance

arnab-chaudhuri-c2fo opened this issue · comments

First VFS internally uses TouchCopy, which in turn relies on io.Copy, which uses a 32k buffer. Testing has shown that speed increases can be achieved by using io.CopyBuffer.

The optimal buffer that negligibly impacts small file transfers while maximizing speed for large file transfers was found to be 256KB.

Below are the raw benchmark results:

Buffer size in KB, Buffer size of 0 below indicates to use Go's default 32KB buffer.

BenchmarkTouchCopyAWS_File34B_Buf0-16 20 213935786 ns/op
BenchmarkTouchCopyAWS_File34B_Buf256-16 20 219630573 ns/op
BenchmarkTouchCopyAWS_File34B_Buf512-16 20 254166962 ns/op
BenchmarkTouchCopyAWS_File34B_Buf1024-16 20 217907448 ns/op\

BenchmarkTouchCopyAWS_File250KB_Buf0-16 20 300186551 ns/op
BenchmarkTouchCopyAWS_File250KB_Buf256-16 20 249413856 ns/op
BenchmarkTouchCopyAWS_File250KB_Buf512-16 20 237969090 ns/op
BenchmarkTouchCopyAWS_File250KB_Buf1024-16 20 272907007 ns/op\

BenchmarkTouchCopyAWS_File1MB_Buf0-16 20 276600095 ns/op
BenchmarkTouchCopyAWS_File1MB_Buf256-16 20 313478960 ns/op
BenchmarkTouchCopyAWS_File1MB_Buf512-16 20 318456419 ns/op
BenchmarkTouchCopyAWS_File1MB_Buf1024-16 20 431238712 ns/op\

BenchmarkTouchCopyAWS_File10MB_Buf0-16 20 522688101 ns/op
BenchmarkTouchCopyAWS_File10MB_Buf256-16 20 529038924 ns/op
BenchmarkTouchCopyAWS_File10MB_Buf512-16 20 594891933 ns/op
BenchmarkTouchCopyAWS_File10MB_Buf1024-16 20 526330093 ns/op\

BenchmarkTouchCopyAWS_File100MB_Buf0-16 20 4789642566 ns/op
BenchmarkTouchCopyAWS_File100MB_Buf256-16 20 3620192678 ns/op
BenchmarkTouchCopyAWS_File100MB_Buf512-16 20 3994140777 ns/op
BenchmarkTouchCopyAWS_File100MB_Buf1024-16 20 3297594169 ns/op\

BenchmarkTouchCopyAWS_File1GB_Buf0-16 20 68894831099 ns/op
BenchmarkTouchCopyAWS_File1GB_Buf256-16 20 36860744088 ns/op
BenchmarkTouchCopyAWS_File1GB_Buf512-16 20 33327680536 ns/op
BenchmarkTouchCopyAWS_File1GB_Buf1024-16 20 35022544574 ns/op\