Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 14 Oct 2020 22:58:56 -0700
From:      Enji Cooper <yaneurabeya@gmail.com>
To:        Alex Richardson <arichardson@FreeBSD.org>
Cc:        src-committers <src-committers@freebsd.org>, svn-src-all <svn-src-all@freebsd.org>, svn-src-head@freebsd.org
Subject:   Re: svn commit: r366697 - head/usr.bin/xinstall
Message-ID:  <463B3544-BF7B-49FF-82EA-ECB5D8FBB17B@gmail.com>
In-Reply-To: <202010141228.09ECSg0D023438@repo.freebsd.org>
References:  <202010141228.09ECSg0D023438@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

> On Oct 14, 2020, at 5:28 AM, Alex Richardson <arichardson@FreeBSD.org> =
wrote:
>=20
> Author: arichardson
> Date: Wed Oct 14 12:28:41 2020
> New Revision: 366697
> URL: https://svnweb.freebsd.org/changeset/base/366697
>=20
> Log:
>  install(1): Avoid unncessary fstatfs() calls and use mmap() based on =
size
>=20
>  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.
>=20
>  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.
>=20
>  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.
>=20
>  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=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?463B3544-BF7B-49FF-82EA-ECB5D8FBB17B>