This example illustrates how the record size affects sequential file access on an x86 PIII-725 machine with a UDMA-4 EIDE disk, using the QNX 4 filesystem.
The table lists the rates, in megabytes per second, of writing and reading a 256 MB file:
Record size | Writing | Reading |
---|---|---|
1 KB | 14 | 16 |
2 KB | 16 | 19 |
4 KB | 17 | 24 |
8 KB | 18 | 30 |
16 KB | 18 | 35 |
32 KB | 19 | 36 |
64 KB | 18 | 36 |
128 KB | 17 | 37 |
Note that the sequential read rate doubles based on use of a suitable record size. This is because the overheads of context-switching and message-passing are reduced; consider that reading the 256 MB file 1 KB at a time requires 262,144 _IO_READ messages, whereas with 16 KB records, it requires only 16,384 such messages; 1/16th of the non-negligible overheads.
Write performance doesn't show the same dramatic change, because the user data is, by default, placed in the write-behind buffer cache and written in large contiguous runs under timer control—using O_SYNC would illustrate a difference. The limiting factor here is the periodic need for synchronous update of the bitmap and inode for block allocation as the file grows (see below for a case study or overwriting an already-allocated file).