freebsd kernel with SKQ
Go to file
Conrad Meyer a04ed7615e stat(1): cache id->name resolution
When invoked on a large list of files, it is most common for a small number of
uids/gids to own most of the results.

Like ls(1), use pwcache(3) to avoid repeatedly looking up the same IDs.

Example microbenchmark and non-scientific results:

$ time (find /usr/src -type f -print0 | xargs -0 stat >/dev/null)

BEFORE:
3.62s user 5.23s system 102% cpu 8.655 total
3.47s user 5.38s system 102% cpu 8.647 total

AFTER:
1.23s user 1.81s system 108% cpu 2.810 total
1.43s user 1.54s system 107% cpu 2.754 total

Does this microbenchmark have any real-world significance?  Until a use case
is demonstrated otherwise, I doubt it.  Ordinarily I would be resistant to
optimizing pointless microbenchmarks in base utilities (e.g., recent totally
gratuitous changes to yes(1)).  However, the pwcache(3) APIs actually
simplify stat(1) logic ever so slightly compared to the raw APIs they wrap,
so I think this is at worst harmless.

PR:		230491
Reported by:	Thomas Hurst <tom AT hur.st>
Discussed with:	gad@
2018-08-11 02:56:43 +00:00
bin ls(1): Enable colors with COLORTERM is set in the environment 2018-08-08 21:51:19 +00:00
cddl Disable the D subroutines msgsize() and msgdsize(). 2018-08-10 19:23:20 +00:00
contrib Fix escaping, otherwise Dx gets translated as the macro for DragonFly. 2018-08-11 00:08:59 +00:00
crypto Merge upstream patch to unbreak tunnel forwarding. 2018-05-16 14:04:39 +00:00
etc Switch the default pager for most commands to less 2018-08-08 19:24:20 +00:00
gnu Update libstdc++ configuration. 2018-07-16 18:53:28 +00:00
include Bring in timespce_get form NetBSD. 2018-08-10 15:16:30 +00:00
kerberos5 Remove redundant space. 2018-07-10 00:26:13 +00:00
lib In r308100, an explicit -fexceptions flag was added for the C sources 2018-08-10 19:57:55 +00:00
libexec Remove pointless comment. 2018-08-03 10:59:05 +00:00
release Invoke the growfs rc script for each boot on GCE. 2018-08-09 23:43:10 +00:00
rescue Avoid referencing private lib names directly. 2017-11-10 07:53:02 +00:00
sbin Restore the behaviour changed in r337536, when bad ipfw delete command 2018-08-10 14:10:22 +00:00
secure Upgrade to OpenSSH 7.7p1. 2018-05-11 13:22:43 +00:00
share Add optional LLVM BPF target support 2018-08-09 21:28:31 +00:00
stand libi386: Fix typo in pxe.h 2018-08-09 03:45:47 +00:00
sys ZFS/MFV: Use cached feature info in spa_add_feature_stats() 2018-08-10 23:42:11 +00:00
targets Remove special cases for armeb in the build. 2018-07-17 23:23:54 +00:00
tests Update PR 131876 regression tests after r337423. 2018-08-07 16:39:07 +00:00
tools Make distribution now happens from top of source tree. 2018-08-10 06:28:25 +00:00
usr.bin stat(1): cache id->name resolution 2018-08-11 02:56:43 +00:00
usr.sbin cxgbetool(8): Userspace part of support for high priority filters on T6+. 2018-08-09 14:21:27 +00:00
.arcconfig callsign isn't required anymore 2016-09-29 06:19:45 +00:00
.arclint arc lint: ignore /tests/ in chmod 2017-12-19 03:38:06 +00:00
.gitattributes Remove spuriously added svn properties 2018-08-02 18:37:02 +00:00
.gitignore Ignore _.universe-toolchain file. 2018-07-01 13:50:37 +00:00
COPYRIGHT Remove 'All Rights Reserved' from the collection copyright and templates. 2018-05-09 02:02:49 +00:00
LOCKS LOCKS: update current locks 2018-06-09 03:08:04 +00:00
MAINTAINERS Add pointer to freebsd-numerics for libm. 2018-07-16 15:29:32 +00:00
Makefile As discussed several times on freebsd-arch, start to decommission armeb. 2018-07-17 23:23:34 +00:00
Makefile.inc1 Makefile.inc1: Add libl to -legacy as well 2018-08-10 00:10:57 +00:00
Makefile.libcompat Install the 32-bit compat sanitizer libraries. 2018-08-03 18:52:51 +00:00
Makefile.sys.inc AUTO_OBJ: For all top-level targets enforce using an OBJDIR. 2017-12-05 21:29:47 +00:00
ObsoleteFiles.inc Add a few forgotten files to ObsoleteFiles.inc: 2018-07-25 17:14:05 +00:00
README README: add generic notes about GENERIC and NOTES 2018-06-17 19:44:24 +00:00
README.md README: add generic notes about GENERIC and NOTES 2018-06-17 19:44:24 +00:00
UPDATING Switch the default pager for most commands to less 2018-08-08 19:24:20 +00:00

FreeBSD Source:

This is the top level of the FreeBSD source directory. This file was last revised on: FreeBSD

FreeBSD is an operating system used to power modern servers, desktops, and embedded platforms. A large community has continually developed it for more than thirty years. Its advanced networking, security, and storage features have made FreeBSD the platform of choice for many of the busiest web sites and most pervasive embedded networking and storage devices.

For copyright information, please see the file COPYRIGHT in this directory. Additional copyright information also exists for some sources in this tree - please see the specific source directories for more information.

The Makefile in this directory supports a number of targets for building components (or all) of the FreeBSD source tree. See build(7), config(8), https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html, and https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html for more information, including setting make(1) variables.

Source Roadmap:

bin		System/user commands.

cddl		Various commands and libraries under the Common Development
		and Distribution License.

contrib		Packages contributed by 3rd parties.

crypto		Cryptography stuff (see crypto/README).

etc		Template files for /etc.

gnu		Various commands and libraries under the GNU Public License.
		Please see gnu/COPYING* for more information.

include		System include files.

kerberos5	Kerberos5 (Heimdal) package.

lib		System libraries.

libexec		System daemons.

release		Release building Makefile & associated tools.

rescue		Build system for statically linked /rescue utilities.

sbin		System commands.

secure		Cryptographic libraries and commands.

share		Shared resources.

stand		Boot loader sources.

sys		Kernel sources.

sys/<arch>/conf Kernel configuration files. GENERIC is the configuration
		used in release builds. NOTES contains documentation of
		all possible entries.

tests		Regression tests which can be run by Kyua.  See tests/README
		for additional information.

tools		Utilities for regression testing and miscellaneous tasks.

usr.bin		User commands.

usr.sbin	System administration commands.

For information on synchronizing your source tree with one or more of the FreeBSD Project's development branches, please see:

https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/current-stable.html