Messages in this thread Patch in this message | | | Date | Mon, 4 Mar 2013 11:29:41 +0000 | From | Eric Wong <> | Subject | [PATCH] epoll: trim epitem by one cache line on x86_64 |
| |
It is common for epoll users to have thousands of epitems, so saving a cache line on every allocation leads to large memory savings.
Since epitem allocations are cache-aligned, reducing sizeof(struct epitem) from 136 bytes to 128 bytes will allow it to squeeze under a cache line boundary on x86_64.
From /sys/kernel/slab/eventpoll_epi, I see the following changes on my x86_64 Core2 Duo (which has 64-byte cache alignment):
object_size : 192 => 128 objs_per_slab: 21 => 32
I have no access to other 64-bit machines, so I am limiting this to x86_64-only with EPOLL_PACKED instead of __attribute__((packed))
Signed-off-by: Eric Wong <normalperson@yhbt.net> Cc: Davide Libenzi <davidel@xmailserver.org> Cc: Al Viro <viro@ZenIV.linux.org.uk> Cc: Andrew Morton <akpm@linux-foundation.org> --- fs/eventpoll.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/eventpoll.c b/fs/eventpoll.c index cfc4b16..06f3d0e 100644 --- a/fs/eventpoll.c +++ b/fs/eventpoll.c @@ -107,7 +107,7 @@ struct epoll_filefd { struct file *file; int fd; -}; +} EPOLL_PACKED; /* * Structure used to track possible nested calls, for too deep recursions -- Eric Wong
| |