Tuning buffer sizes
Overview
When the typical read/write size is small, using a buffer can make a significant improvement in performance. However when reading/writing large amounts of data, additional buffered doesn't help and can add a small amount of overhead.
Additionally, it can be tempting to assume; the larger the buffer the better. However is appears a more modest buffer size, around the size of your L1 cache could be better. e.g 8 KB to 32 KB.
The test
In the following test I compared using buffered and unbuffered reads and writes to a temporary file on a tmpfs filesystem (ram disk)
Size of read/write | Unbuffered Writes | Buffered Writes | Unbuffered Reads | Buffered Reads |
---|---|---|---|---|
1 | 2 MB/s | 86 MB/s | 3 MB/s | 72 MB/s |
2 | 4 MB/s | 165 MB/s | 6 MB/s | 147 MB/s |
4 | 8 MB/s | 333 MB/s | 11 MB/s | 291 MB/s |
8 | 17 MB/s | 578 MB/s | 24 MB/s | 560 MB/s |
16 | 34 MB/s | 920 MB/s | 49 MB/s | 983 MB/s |
32 | 67 MB/s | 1,345 MB/s | 99 MB/s | 1,679 MB/s |
64 | 133 MB/s | 1,746 MB/s | 198 MB/s | 2,518 MB/s |
128 | 254 MB/s | 2,024 MB/s | 391 MB/s | 3,387 MB/s |
256 | 463 MB/s | 2,172 MB/s | 742 MB/s | 4,104 MB/s |
512 | 798 MB/s | 2,270 MB/s | 1,334 MB/s | 4,549 MB/s |
1,024 | 1,270 MB/s | 2,299 MB/s | 2,355 MB/s | 4,752 MB/s |
2,048 | 1,789 MB/s | 2,310 MB/s | 3,704 MB/s | 4,923 MB/s |
4,096 | 2,287 MB/s | 2,301 MB/s | 5,324 MB/s | 4,859 MB/s |
8,192 | 2,589 MB/s | 2,497 MB/s | 6,346 MB/s | 6,142 MB/s |
16,384 | 2,534 MB/s | 2,559 MB/s | 5,764 MB/s | 5,697 MB/s |
32,768 | 2,591 MB/s | 2,561 MB/s | 5,793 MB/s | 5,723 MB/s |
65,536 | 2,613 MB/s | 2,581 MB/s | 5,861 MB/s | 5,883 MB/s |
131,072 | 2,580 MB/s | 2,581 MB/s | 5,401 MB/s | 5,405 MB/s |
262,144 | 1,918 MB/s | 1,907 MB/s | 3,269 MB/s | 3,262 MB/s |
524,288 | 1,749 MB/s | 1,734 MB/s | 2,845 MB/s | 2,851 MB/s |
1,048,576 | 1,471 MB/s | 1,469 MB/s | 2,501 MB/s | 2,502 MB/s |
The default size of a BufferedInputStream and BufferedOutputStream is 8KB. This is part of the reason why they don't help at this point and larger.
The code
BufferTest.java
Comments
Post a Comment