Messages in this thread | | | Subject | Re: [PATCH] fs/proc: Move kfree outside pde_unload_lock | From | Eric Dumazet <> | Date | Wed, 22 Aug 2012 20:28:30 +0200 |
| |
On Wed, 2012-08-22 at 11:38 -0500, Nathan Zimmer wrote: > This moves a kfree outside a spinlock to help scaling on larger (512 core) > systems. > > I ran a simple test which just reads from /proc/cpuinfo. > Lower is better, as you can see the worst case scenario is improved. > > baseline moved kfree > tasks read-sec read-sec > 1 0.0141 0.0141 > 2 0.0140 0.0140 > 4 0.0140 0.0141 > 8 0.0145 0.0145 > 16 0.0553 0.0548 > 32 0.1688 0.1622 > 64 0.5017 0.3856 > 128 1.7005 0.9710 > 256 5.2513 2.6519 > 512 8.0529 6.2976 > > Cc: Alexander Viro <viro@zeniv.linux.org.uk> > Cc: David Woodhouse <dwmw2@infradead.org> > Acked-by: Alexey Dobriyan <adobriyan@gmail.com> > Signed-off-by: Nathan Zimmer <nzimmer@sgi.com> > --- > fs/proc/inode.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/fs/proc/inode.c b/fs/proc/inode.c > index 7ac817b..bf36266 100644 > --- a/fs/proc/inode.c > +++ b/fs/proc/inode.c > @@ -403,9 +403,9 @@ static int proc_reg_release(struct inode *inode, struct file *file) > release = pde->proc_fops->release; > if (pdeo) { > list_del(&pdeo->lh); > - kfree(pdeo); > } > spin_unlock(&pde->pde_unload_lock); > + kfree(pdeo); > > if (release) > rv = release(inode, file);
Thats interesting, but if you really want this to fly, one RCU conversion would be much better ;)
pde_users would be an atomic_t and you would avoid the spinlock contention.
| |