From: Alexey Dobriyan <adobriyan@gmail.com>
To: Randy Dunlap <rdunlap@infradead.org>
Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] proc: rearrange struct proc_dir_entry
Date: Thu, 21 Dec 2017 09:25:38 +0300 [thread overview]
Message-ID: <20171221062538.GA2059@avx2> (raw)
In-Reply-To: <3104e2ee-0d2f-0a16-0466-8f64e492e4f5@infradead.org>
On Wed, Dec 20, 2017 at 03:10:48PM -0800, Randy Dunlap wrote:
> On 12/20/2017 01:59 PM, Alexey Dobriyan wrote:
> > struct proc_dir_entry became bit messy over years:
> >
> > * move 16-bit ->mode_t before namelen to get rid of padding
> > * make ->in_use first field: it seems to be most used resulting in
> > smaller code on x86_64 (defconfig):
> >
> > add/remove: 0/0 grow/shrink: 7/13 up/down: 24/-67 (-43)
> > Function old new delta
> > proc_readdir_de 451 455 +4
> > proc_get_inode 282 286 +4
> > pde_put 65 69 +4
> > remove_proc_subtree 294 297 +3
> > remove_proc_entry 297 300 +3
> > proc_register 295 298 +3
> > proc_notify_change 94 97 +3
> > unuse_pde 27 26 -1
> > proc_reg_write 89 85 -4
> > proc_reg_unlocked_ioctl 85 81 -4
> > proc_reg_read 89 85 -4
> > proc_reg_llseek 87 83 -4
> > proc_reg_get_unmapped_area 123 119 -4
> > proc_entry_rundown 139 135 -4
> > proc_reg_poll 91 85 -6
> > proc_reg_mmap 79 73 -6
> > proc_get_link 55 49 -6
> > proc_reg_release 108 101 -7
> > proc_reg_open 298 291 -7
> > close_pdeo 228 218 -10
> >
> > * move writeable fields together to a first cacheline (on x86_64),
> > those include
> > * ->in_use: reference count, taken every open/read/write/close etc
> > * ->count: reference count, taken at readdir on every entry
> > * ->pde_openers: tracks (nearly) every open, dirtied
> > * ->pde_unload_lock: spinlock protecting ->pde_openers
> > * ->proc_iops, ->proc_fops, ->data: writeonce fields,
> > used right together with previous group.
> >
> > * other rarely written fields go into 1st/2nd and 2nd/3rd cacheline on
> > 32-bit and 64-bit respectively.
> >
> > Additionally on 32-bit, ->subdir, ->subdir_node, ->namelen, ->name
> > go fully into 2nd cacheline, separated from writeable fields.
> > They are all used during lookup.
>
> Does
> > } __randomize_layout;
> pay attention to any of that?
No. You can randomize inside cachelines but it will look rather ugly.
__randomize_layout rearranges everything.
prev parent reply other threads:[~2017-12-21 6:25 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-20 21:59 [PATCH] proc: rearrange struct proc_dir_entry Alexey Dobriyan
2017-12-20 23:10 ` Randy Dunlap
2017-12-21 6:25 ` Alexey Dobriyan [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171221062538.GA2059@avx2 \
--to=adobriyan@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rdunlap@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.