Chris Torek [off-list ref] writes:
Linux/BSD/etc `stat` system calls report st_blksize values to tell
user code the optimal size for read and write calls. Does Windows
have one? (It's not POSIX but is XSI.)
(How *well* the OS reports `st_blksize` is another question
entirely, but at least if the report says, say, 128k, and that's
wrong, that's no longer Git's fault. :-) )
...
128K is correct for ZFS; 64K is typically correct for UFS2; 8K is
the old UFS1 size. Anything under that has been too small for
a long time. :-)
That's rather tempting. After opening a locked index to write
things out, the value is a single fstat() away...
On Wed, Feb 24, 2021 at 11:16 PM Junio C Hamano [off-list ref] wrote:
Chris Torek [off-list ref] writes:
quoted
Linux/BSD/etc `stat` system calls report st_blksize values to tell
user code the optimal size for read and write calls. Does Windows
have one? (It's not POSIX but is XSI.)
(How *well* the OS reports `st_blksize` is another question
entirely, but at least if the report says, say, 128k, and that's
wrong, that's no longer Git's fault. :-) )
...
128K is correct for ZFS; 64K is typically correct for UFS2; 8K is
the old UFS1 size. Anything under that has been too small for
a long time. :-)
That's rather tempting. After opening a locked index to write
things out, the value is a single fstat() away...
From a quick perusal of freebsd, st_blksize seems to be the system
PAGE_SIZE by default (4k most of the time, I assume). The Windows
equivalent of this value is really tuned to what you want to send down
when bypassing the cache (to avoid partial cluster/stripe writes).
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html
doesn't elicit much confidence. The units of st_blksize aren't even
defined.
Thanks,
Neeraj
On Wed, Feb 24, 2021 at 11:36 PM Neeraj Singh [off-list ref] wrote:
From a quick perusal of freebsd, st_blksize seems to be the system
PAGE_SIZE by default (4k most of the time, I assume). The Windows
equivalent of this value is really tuned to what you want to send down
when bypassing the cache (to avoid partial cluster/stripe writes).
It's page-size for pipes, sockets, etc., but for real files, it's based on
a report from the underlying file system. It's actually 8k on a typical
ancient UFS file system, 64K on UFS2, and 128K on ZFS, on FreeBSD.
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html
doesn't elicit much confidence. The units of st_blksize aren't even
defined.
Despite POSIX's rather obstreperous definition of st_blksize, the
units are actually just bytes, in practice.
Chris