From: Eric Dumazet <dada1-fPLkHRcR87vqlBn2x/YWAg@public.gmane.org>
To: Davide Libenzi <davidel-AhlLAIvw+VEjIGhXcJzhZg@public.gmane.org>
Cc: Andrew Morton
<akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>,
Jonathan Corbet <corbet-T1hC0tSOHrs@public.gmane.org>,
Linux Kernel Mailing List
<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
andi-Vw/NltI1exuRpAAqCnN02g@public.gmane.org,
oleg-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
viro-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org,
David Miller <davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>,
hch-jcswGhMUV9g@public.gmane.org,
linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
mpm-VDJrAJ4Gl5ZBDgjK7y7TUQ@public.gmane.org,
Alan Cox <alan-qBU/x9rampVanCEyBjwyrvXRex20P6io@public.gmane.org>
Subject: Re: [PATCH 2/4] Convert epoll to a bitlock
Date: Wed, 04 Feb 2009 03:48:07 +0100 [thread overview]
Message-ID: <498901E7.4050405@cosmosbay.com> (raw)
In-Reply-To: <alpine.DEB.1.10.0902031446280.23050-GPJ85BhbkB8RepQJljzAVbITYcZ0+W3JAL8bYrjMMd8@public.gmane.org>
Davide Libenzi a écrit :
> On Tue, 3 Feb 2009, Eric Dumazet wrote:
>
>> Andrew Morton a écrit :
>>> On Mon, 2 Feb 2009 11:20:09 -0700
>>> Jonathan Corbet <corbet-T1hC0tSOHrs@public.gmane.org> wrote:
>>>
>>>> Matt Mackall suggested converting epoll's ep_lock to a bitlock as a way of
>>>> saving space in struct file. This patch makes that change.
>>> hrm. bit_spin_lock() makes people upset (large penguiny people). iirc
>>> it doesn't have all the correct/well-understood memory/compiler
>>> ordering semantics which spinlocks have. And lockdep doesn't know about
>>> it.
>>>
>> In a previous attempt (2005), I suggested using a single global lock.
>>
>> http://search.luky.org/linux-kernel.2005/msg50862.html
>>
>> Probably an array of hashed spinlocks would be more than enough.
>
> That could be done, although I'm not sure it's worth going that way to
> save 4 bytes. The effective saving rate is not even 4/sizeof(struct file)
> since struct file never comes alone, and when you allocate a struct file
> you always carry more allocations behind (at least for the cases where you
> tend to have a lot of them around, so size would matter).
> The add/remove path in epoll is not a super-hot one, so it could be done.
> I dunno how this change matter with the patchset though.
Back in 2005, I saved 4 bytes per file, and because of HWCACHE alignment, sizeof(struct file)
shrinked by 64 bytes. With more than 1.000.000 sockets opened on a busy server, it saved
64 MB of ram. At that time, this mattered (8GB of ram), but in 2009, 64 MB is so small
I dont care anymore about sizeof(struct file)
AFAIK, I just checked on x86_64 and got : sizeof(struct file)=0xc0 , so thats perfect :)
(Only thing I still do is to move private_data in the first cache line of struct file, because
it speedups a lot socket operation, when dealing with 1.000.000 sockets : one cache line miss
avoided per socket syscall)
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 6022f44..03b2227 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -842,6 +842,8 @@ struct file {
#define f_dentry f_path.dentry
#define f_vfsmnt f_path.mnt
const struct file_operations *f_op;
+ /* needed for tty driver, and maybe others */
+ void *private_data;
atomic_long_t f_count;
unsigned int f_flags;
fmode_t f_mode;
@@ -854,8 +856,6 @@ struct file {
#ifdef CONFIG_SECURITY
void *f_security;
#endif
- /* needed for tty driver, and maybe others */
- void *private_data;
#ifdef CONFIG_EPOLL
/* Used by fs/eventpoll.c to link all the hooks to this file */
--
To unsubscribe from this list: send the line "unsubscribe linux-api" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: Eric Dumazet <dada1@cosmosbay.com>
To: Davide Libenzi <davidel@xmailserver.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Jonathan Corbet <corbet@lwn.net>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
andi@firstfloor.org, oleg@redhat.com, viro@ZenIV.linux.org.uk,
David Miller <davem@davemloft.net>,
hch@lst.de, linux-api@vger.kernel.org, mpm@selenic.com,
Alan Cox <alan@lxorguk.ukuu.org.uk>
Subject: Re: [PATCH 2/4] Convert epoll to a bitlock
Date: Wed, 04 Feb 2009 03:48:07 +0100 [thread overview]
Message-ID: <498901E7.4050405@cosmosbay.com> (raw)
In-Reply-To: <alpine.DEB.1.10.0902031446280.23050@alien.or.mcafeemobile.com>
Davide Libenzi a écrit :
> On Tue, 3 Feb 2009, Eric Dumazet wrote:
>
>> Andrew Morton a écrit :
>>> On Mon, 2 Feb 2009 11:20:09 -0700
>>> Jonathan Corbet <corbet@lwn.net> wrote:
>>>
>>>> Matt Mackall suggested converting epoll's ep_lock to a bitlock as a way of
>>>> saving space in struct file. This patch makes that change.
>>> hrm. bit_spin_lock() makes people upset (large penguiny people). iirc
>>> it doesn't have all the correct/well-understood memory/compiler
>>> ordering semantics which spinlocks have. And lockdep doesn't know about
>>> it.
>>>
>> In a previous attempt (2005), I suggested using a single global lock.
>>
>> http://search.luky.org/linux-kernel.2005/msg50862.html
>>
>> Probably an array of hashed spinlocks would be more than enough.
>
> That could be done, although I'm not sure it's worth going that way to
> save 4 bytes. The effective saving rate is not even 4/sizeof(struct file)
> since struct file never comes alone, and when you allocate a struct file
> you always carry more allocations behind (at least for the cases where you
> tend to have a lot of them around, so size would matter).
> The add/remove path in epoll is not a super-hot one, so it could be done.
> I dunno how this change matter with the patchset though.
Back in 2005, I saved 4 bytes per file, and because of HWCACHE alignment, sizeof(struct file)
shrinked by 64 bytes. With more than 1.000.000 sockets opened on a busy server, it saved
64 MB of ram. At that time, this mattered (8GB of ram), but in 2009, 64 MB is so small
I dont care anymore about sizeof(struct file)
AFAIK, I just checked on x86_64 and got : sizeof(struct file)=0xc0 , so thats perfect :)
(Only thing I still do is to move private_data in the first cache line of struct file, because
it speedups a lot socket operation, when dealing with 1.000.000 sockets : one cache line miss
avoided per socket syscall)
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 6022f44..03b2227 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -842,6 +842,8 @@ struct file {
#define f_dentry f_path.dentry
#define f_vfsmnt f_path.mnt
const struct file_operations *f_op;
+ /* needed for tty driver, and maybe others */
+ void *private_data;
atomic_long_t f_count;
unsigned int f_flags;
fmode_t f_mode;
@@ -854,8 +856,6 @@ struct file {
#ifdef CONFIG_SECURITY
void *f_security;
#endif
- /* needed for tty driver, and maybe others */
- void *private_data;
#ifdef CONFIG_EPOLL
/* Used by fs/eventpoll.c to link all the hooks to this file */
next prev parent reply other threads:[~2009-02-04 2:48 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-02 18:20 [PATCH/RFC] F_SETFL/Fasync BKL removal, now without unsightly global locks Jonathan Corbet
2009-02-02 18:20 ` Jonathan Corbet
[not found] ` <1233598811-6871-1-git-send-email-corbet-T1hC0tSOHrs@public.gmane.org>
2009-02-02 18:20 ` [PATCH 1/4] Use bit operations for file->f_flags Jonathan Corbet
2009-02-02 18:20 ` Jonathan Corbet
[not found] ` <1233598811-6871-2-git-send-email-corbet-T1hC0tSOHrs@public.gmane.org>
2009-02-03 21:37 ` Andrew Morton
2009-02-03 21:37 ` Andrew Morton
2009-02-02 18:20 ` [PATCH 2/4] Convert epoll to a bitlock Jonathan Corbet
2009-02-02 18:20 ` Jonathan Corbet
[not found] ` <1233598811-6871-3-git-send-email-corbet-T1hC0tSOHrs@public.gmane.org>
2009-02-03 21:39 ` Andrew Morton
2009-02-03 21:39 ` Andrew Morton
[not found] ` <20090203133942.2ecec281.akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>
2009-02-03 21:55 ` Eric Dumazet
2009-02-03 21:55 ` Eric Dumazet
[not found] ` <4988BD4E.8080206-fPLkHRcR87vqlBn2x/YWAg@public.gmane.org>
2009-02-03 22:05 ` Andrew Morton
2009-02-03 22:05 ` Andrew Morton
[not found] ` <20090203140543.6e915f97.akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>
2009-02-03 22:22 ` Matt Mackall
2009-02-03 22:22 ` Matt Mackall
2009-02-03 22:37 ` Jonathan Corbet
2009-02-03 22:37 ` Jonathan Corbet
[not found] ` <20090203153740.363d0a04-vw3g6Xz/EtPk1uMJSBkQmQ@public.gmane.org>
2009-02-03 22:53 ` Andrew Morton
2009-02-03 22:53 ` Andrew Morton
[not found] ` <20090203145346.8df40277.akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>
2009-02-03 23:09 ` Davide Libenzi
2009-02-03 23:09 ` Davide Libenzi
[not found] ` <alpine.DEB.1.10.0902031508280.23050-GPJ85BhbkB8RepQJljzAVbITYcZ0+W3JAL8bYrjMMd8@public.gmane.org>
2009-02-03 23:12 ` Davide Libenzi
2009-02-03 23:12 ` Davide Libenzi
2009-02-03 23:19 ` Jonathan Corbet
2009-02-03 23:19 ` Jonathan Corbet
[not found] ` <20090203161931.4054a25e-vw3g6Xz/EtPk1uMJSBkQmQ@public.gmane.org>
2009-02-03 23:29 ` Andrew Morton
2009-02-03 23:29 ` Andrew Morton
2009-02-04 7:13 ` Christoph Hellwig
2009-02-04 7:13 ` Christoph Hellwig
[not found] ` <20090204071320.GA19348-jcswGhMUV9g@public.gmane.org>
2009-02-04 7:20 ` Nick Piggin
2009-02-04 7:20 ` Nick Piggin
[not found] ` <200902041820.20535.nickpiggin-/E1597aS9LT0CCvOHzKKcA@public.gmane.org>
2009-02-04 13:34 ` Jonathan Corbet
2009-02-04 13:34 ` Jonathan Corbet
2009-02-04 16:51 ` Davide Libenzi
2009-02-04 16:51 ` Davide Libenzi
2009-02-03 23:08 ` Davide Libenzi
2009-02-03 23:08 ` Davide Libenzi
[not found] ` <alpine.DEB.1.10.0902031446280.23050-GPJ85BhbkB8RepQJljzAVbITYcZ0+W3JAL8bYrjMMd8@public.gmane.org>
2009-02-04 2:48 ` Eric Dumazet [this message]
2009-02-04 2:48 ` Eric Dumazet
2009-02-04 1:00 ` wli
2009-02-04 4:54 ` Nick Piggin
2009-02-02 18:20 ` [PATCH 3/4] Move FASYNC bit handling to f_op->fasync() Jonathan Corbet
2009-02-02 18:20 ` Jonathan Corbet
2009-02-02 18:20 ` [PATCH 4/4] Rationalize fasync return values Jonathan Corbet
2009-02-02 18:20 ` Jonathan Corbet
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=498901E7.4050405@cosmosbay.com \
--to=dada1-fplkhrcr87vqlbn2x/ywag@public.gmane.org \
--cc=akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org \
--cc=alan-qBU/x9rampVanCEyBjwyrvXRex20P6io@public.gmane.org \
--cc=andi-Vw/NltI1exuRpAAqCnN02g@public.gmane.org \
--cc=corbet-T1hC0tSOHrs@public.gmane.org \
--cc=davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org \
--cc=davidel-AhlLAIvw+VEjIGhXcJzhZg@public.gmane.org \
--cc=hch-jcswGhMUV9g@public.gmane.org \
--cc=linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mpm-VDJrAJ4Gl5ZBDgjK7y7TUQ@public.gmane.org \
--cc=oleg-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=viro-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.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.