svn commit: r366697 - head/usr.bin/xinstall

Enji Cooper yaneurabeya at gmail.com
Thu Oct 15 05:58:59 UTC 2020


> On Oct 14, 2020, at 5:28 AM, Alex Richardson <arichardson at FreeBSD.org> wrote:
> 
> Author: arichardson
> Date: Wed Oct 14 12:28:41 2020
> New Revision: 366697
> URL: https://svnweb.freebsd.org/changeset/base/366697
> 
> Log:
>  install(1): Avoid unncessary fstatfs() calls and use mmap() based on size
> 
>  According to git blame the trymmap() function was added in 1996 to skip
>  mmap() calls for NFS file systems. However, nowadays mmap() should be
>  perfectly safe even on NFS. Importantly, onl ufs and cd9660 file systems
>  were whitelisted so we don't use mmap() on ZFS. It also prevents the use
>  of mmap() when bootstrapping from macOS/Linux since on those systems the
>  trymmap() function was always returning zero due to the missing MFSNAMELEN
>  define.
> 
>  This change keeps the trymmap() function but changes it to check whether
>  using mmap() can reduce the number of system calls that are required.
>  Using mmap() only reduces the number of system calls if we need multiple read()
>  syscalls, i.e. if the file size is > MAXBSIZE. However, mmap() is more expensive
>  than read() so this sets the threshold at 4 fewer syscalls. Additionally, for
>  larger file size mmap() can significantly increase the number of page faults,
>  so avoid it in that case.
> 
>  It's unclear whether using mmap() is ever faster than a read with an appropriate
>  buffer size, but this change at least removes two unnecessary system calls
>  for every file that is installed.
> 
>  Reviewed By:	markj
>  Differential Revision: https://reviews.freebsd.org/D26041

	* Has this change been tested out with source filesystems other than UFS/ZFS? Not all filesystems support mmap(2).
	* trymmap(..) seems to be less about computing whether or not the filesystem should use mmap(2) after this change, but how it should use mmap(2). Seems like a misnamed function call now.
Cheers,
-Enji


More information about the svn-src-all mailing list