[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAGudoHERYqaW8oNf44kHG19OHwtrGGAk0AW2UnnX_NKn8aQcOA@mail.gmail.com>
Date: Mon, 18 Nov 2024 13:18:31 +0100
From: Mateusz Guzik <mjguzik@...il.com>
To: Jan Kara <jack@...e.cz>
Cc: brauner@...nel.org, viro@...iv.linux.org.uk, linux-kernel@...r.kernel.org,
linux-fsdevel@...r.kernel.org
Subject: Re: [PATCH] vfs: move getattr in inode_operations to a more commonly
read area
On Mon, Nov 18, 2024 at 12:26 PM Jan Kara <jack@...e.cz> wrote:
>
> On Mon 18-11-24 01:20:24, Mateusz Guzik wrote:
> > Notabaly occupied by lookup, get_link and permission.
> >
> > This pushes unlink to another cache line, otherwise the layout is the
> > same on that front.
> >
> > Signed-off-by: Mateusz Guzik <mjguzik@...il.com>
> > ---
> >
> > Probably more can be done to rearrange struct. If someone is down to do
> > it, I'm happy with this patch being dropped.
>
> This makes some sense to me although I'd like to establish some higher
> level guidelines (and document them in a comment) about what goes where in
> the inode_operations struct. A lot of accesses to inode->i_op actually do
> get optimized away with inode->i_opflags (e.g. frequent stuff like
> .permission or .get_inode_acl) so there are actually high chances there's
> only one access to inode->i_op for the operation we are doing and in such
> case the ordering inside inode_operations doesn't really matter (it's
> likely cache cold anyway). So I'm somewhat uncertain what the right
> grouping should be and if it matters at all.
>
So I ran bpftrace attached to all ext4 inode ops during the venerable
kernel build.
As I expected getattr is most commonly used. But indeed the rest is a
footnote in comparison, so it very well may be this change is a nop or
close to it.
So ye, I this is probably droppable as is, I'm not definitely not
going to push one way or the other.
result:
@[kprobe:ext4_tmpfile]: 1
@[kprobe:ext4_symlink]: 2
@[kprobe:ext4_set_acl]: 18
@[kprobe:ext4_rename2]: 69
@[kprobe:ext4_rmdir]: 163
@[kprobe:ext4_mkdir]: 172
@[kprobe:ext4_get_acl]: 753
@[kprobe:ext4_setattr]: 3938
@[kprobe:ext4_unlink]: 7218
@[kprobe:ext4_create]: 18576
@[kprobe:ext4_lookup]: 99644
@[kprobe:ext4_file_getattr]: 5737047
@[kprobe:ext4_getattr]: 5909325
oneliner: bpftrace -e
'kprobe:ext4_create,kprobe:ext4_fiemap,kprobe:ext4_fileattr_get,kprobe:ext4_fileattr_set,kprobe:ext4_file_getattr,kprobe:ext4_get_acl,kprobe:ext4_getattr,kprobe:ext4_link,kprobe:ext4_listxattr,kprobe:ext4_lookup,kprobe:ext4_mkdir,kprobe:ext4_mknod,kprobe:ext4_rename2,kprobe:ext4_rmdir,kprobe:ext4_set_acl,kprobe:ext4_setattr,kprobe:ext4_symlink,kprobe:ext4_tmpfile,kprobe:ext4_unlink
{ @[probe] = count(); }'
--
Mateusz Guzik <mjguzik gmail.com>
Powered by blists - more mailing lists