On Wed, Jun 11, 2025 at 9:48 AM Nathan Bossart <nathandboss...@gmail.com> wrote: > So, fseeko() starts winning around 4096 bytes. On macOS, the differences > aren't quite as dramatic, but 4096 bytes is the break-even point there, > too. I imagine there's a buffer around that size somewhere...
BTW you can call setvbuf(f, my_buffer, _IOFBF, my_buffer_size) to control FILE buffering. I suspect that glibc ignores the size if you pass NULL for my_buffer, so you'd need to allocate it yourself and it should probably be aligned on PG_IO_ALIGN_SIZE for best results (minimising the number of VM pages that must be held/pinned). Then you might be able to get better and less OS-dependent results. I haven't studied this seek business so I have no opinion on that and what a good size would be, but interesting sizes might be rounded to both PG_IO_ALIGN_SIZE and filesystem block size according to fstat(fileno(stream)). IDK, just a thought...