Re: generic_permission() optimization

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 31 Oct 2024 at 03:07, Christian Brauner <brauner@xxxxxxxxxx> wrote:
>
> > It's all really just "acl_permission_check()" and that code is
> > actually fairly optimized, except that the whole
> >
> >         vfsuid = i_uid_into_vfsuid(idmap, inode);
> >
> > to check whether we're the owner is *not* cheap. It causes a call to
> > make_vfsuid(), and it's just messy.
>
> I assume you ran your benchmark on baremetal so no containers or
> idmappings? I find this somewhat suprising.

Yes, I did too, this is the "simple" case for the whole uid mapping
case, and I didn't expect it to be noticeable.

That said, that function is just called a *LOT*. It's not just for
each file opened, it's called for each path component as part of
filename lookup, for that may_lookup_inode_permission ->
do_inode_permission -> generic_permission -> acl_permission_check
path.

>          One thing to optimize here
> independent of your proposal would be to try and __always_inline
> make_vfsuid().

Maybe. Part of the cost seems to be the call, but a bigger part seems
to be the memory accesses around it with that whole
inode->i_sb->s_user_ns chain to load it, and then current->cred->fsuid
to compare against the result.

Anyway, I'll play around with this a bit more and try to get better profiles.

                Linus




[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux