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 <[email protected]>
> Cc: David Woodhouse <[email protected]>
> Acked-by: Alexey Dobriyan <[email protected]>
> Signed-off-by: Nathan Zimmer <[email protected]>
> ---
>  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.



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to