Date: Sun, 1 Dec 2019 00:15:06 +0100 From: Mateusz Guzik <mjguzik@gmail.com> To: Konstantin Belousov <kostikbel@gmail.com> Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r355227 - head/sys/fs/tmpfs Message-ID: <CAGudoHF2dxwm_Xytvd2qQxuS6f_KfOtjD%2Bz=%2BEtFwAkoi%2B-vPw@mail.gmail.com> In-Reply-To: <20191130230725.GB10580@kib.kiev.ua> References: <201911301641.xAUGfmMt029299@repo.freebsd.org> <20191130230725.GB10580@kib.kiev.ua>
next in thread | previous in thread | raw e-mail | index | archive | help
On 12/1/19, Konstantin Belousov <kostikbel@gmail.com> wrote: > On Sat, Nov 30, 2019 at 04:41:48PM +0000, Mateusz Guzik wrote: >> Author: mjg >> Date: Sat Nov 30 16:41:47 2019 >> New Revision: 355227 >> URL: https://svnweb.freebsd.org/changeset/base/355227 >> >> Log: >> tmpfs: add fast path to tmpfs_access for common case lookup >> >> VEXEC consists of vast majority of all calls and almost all targets >> have >> at least 0111. > On what load VEXEC is the dominant access check ? > Note this is called for every directory to be traversed dooring lookup, so for instance looking up "foo/bar/baz" performs 2 VEXEC checks. Sample result from buildkernel. 64 is VEXEC. dtrace -n 'fbt::tmpfs_access:entry { @[args[0]->a_accmode, ((struct tmpfs_node *)args[0]->a_vp->v_data)->tn_mode & 0111] = count(); }' dtrace: description 'fbt::tmpfs_access:entry ' matched 1 probe 384 73 1 16512 0 2 128 0 68 384 0 877 4096 0 1049 320 73 5965 4096 73 32471 128 73 145115 256 73 160569 256 0 999827 64 73 32320731 >> >> Modified: >> head/sys/fs/tmpfs/tmpfs_vnops.c >> >> Modified: head/sys/fs/tmpfs/tmpfs_vnops.c >> ============================================================================== >> --- head/sys/fs/tmpfs/tmpfs_vnops.c Sat Nov 30 16:40:16 2019 (r355226) >> +++ head/sys/fs/tmpfs/tmpfs_vnops.c Sat Nov 30 16:41:47 2019 (r355227) >> @@ -331,6 +331,12 @@ tmpfs_access(struct vop_access_args *v) >> >> node = VP_TO_TMPFS_NODE(vp); >> >> + /* >> + * Common case path lookup. >> + */ >> + if (__predict_true(accmode == VEXEC && (node->tn_mode & 0111) == 0111)) > The 0111 must be spelled as (S_IXUSR | S_IXGRP | S_IXOTH). > Ok. >> + return (0); >> + >> switch (vp->v_type) { >> case VDIR: >> /* FALLTHROUGH */ > -- Mateusz Guzik <mjguzik gmail.com>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAGudoHF2dxwm_Xytvd2qQxuS6f_KfOtjD%2Bz=%2BEtFwAkoi%2B-vPw>