2008-03-12 14:28:19

by Andi Kleen

[permalink] [raw]
Subject: [PATCH] Save some bytes in mm_struct by filling holes on 64bit


Save some bytes in mm_struct by filling holes

Putting int values together for better packing on 64bit
shrinks sizeof(struct mm_struct) from 776 bytes to 760 bytes.

Signed-off-by: Andi Kleen <[email protected]>

Index: linux-2.6.25-rc5/include/linux/mm_types.h
===================================================================
--- linux-2.6.25-rc5.orig/include/linux/mm_types.h
+++ linux-2.6.25-rc5/include/linux/mm_types.h
@@ -172,6 +172,7 @@ struct mm_struct {
atomic_t mm_users; /* How many users with user space? */
atomic_t mm_count; /* How many references to "struct mm_struct" (users count as 1) */
int map_count; /* number of VMAs */
+ rwlock_t ioctx_list_lock; /* aio lock */
struct rw_semaphore mmap_sem;
spinlock_t page_table_lock; /* Protects page tables and some counters */

@@ -213,14 +214,13 @@ struct mm_struct {
unsigned int token_priority;
unsigned int last_interval;

+ int core_waiters;
unsigned long flags; /* Must use atomic bitops to access the bits */

/* coredumping support */
- int core_waiters;
struct completion *core_startup_done, core_done;

/* aio bits */
- rwlock_t ioctx_list_lock;
struct kioctx *ioctx_list;
#ifdef CONFIG_CGROUP_MEM_RES_CTLR
struct mem_cgroup *mem_cgroup;


2008-03-12 18:06:34

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] Save some bytes in mm_struct by filling holes on 64bit

On Wed, 12 Mar 2008 15:28:07 +0100 Andi Kleen <[email protected]> wrote:

>
> Save some bytes in mm_struct by filling holes
>
> Putting int values together for better packing on 64bit
> shrinks sizeof(struct mm_struct) from 776 bytes to 760 bytes.
>
> Signed-off-by: Andi Kleen <[email protected]>
>
> Index: linux-2.6.25-rc5/include/linux/mm_types.h
> ===================================================================
> --- linux-2.6.25-rc5.orig/include/linux/mm_types.h
> +++ linux-2.6.25-rc5/include/linux/mm_types.h
> @@ -172,6 +172,7 @@ struct mm_struct {
> atomic_t mm_users; /* How many users with user space? */
> atomic_t mm_count; /* How many references to "struct mm_struct" (users count as 1) */
> int map_count; /* number of VMAs */
> + rwlock_t ioctx_list_lock; /* aio lock */
> struct rw_semaphore mmap_sem;
> spinlock_t page_table_lock; /* Protects page tables and some counters */
>
> @@ -213,14 +214,13 @@ struct mm_struct {
> unsigned int token_priority;
> unsigned int last_interval;
>
> + int core_waiters;
> unsigned long flags; /* Must use atomic bitops to access the bits */
>
> /* coredumping support */
> - int core_waiters;
> struct completion *core_startup_done, core_done;
>
> /* aio bits */
> - rwlock_t ioctx_list_lock;
> struct kioctx *ioctx_list;
> #ifdef CONFIG_CGROUP_MEM_RES_CTLR
> struct mem_cgroup *mem_cgroup;

The current ioctx_list_lock position is better from a cache layout POV?

2008-03-12 18:37:27

by Andi Kleen

[permalink] [raw]
Subject: Re: [PATCH] Save some bytes in mm_struct by filling holes on 64bit


> The current ioctx_list_lock position is better from a cache layout POV?

Hmm ok you're right perhaps it's better to move core_waiters up
instead. Updated patch
Save some bytes in mm_struct by filling holes v2

Putting int values together for better packing on 64bit
shrinks sizeof(struct mm_struct) from 776 bytes to 760 bytes.

Signed-off-by: Andi Kleen <[email protected]>

Index: linux-2.6.25-rc5/include/linux/mm_types.h
===================================================================
--- linux-2.6.25-rc5.orig/include/linux/mm_types.h
+++ linux-2.6.25-rc5/include/linux/mm_types.h
@@ -172,6 +172,7 @@ struct mm_struct {
atomic_t mm_users; /* How many users with user space? */
atomic_t mm_count; /* How many references to "struct mm_struct" (users
count as 1) */
int map_count; /* number of VMAs */
+ int core_waiters;
struct rw_semaphore mmap_sem;
spinlock_t page_table_lock; /* Protects page tables and some counters */

@@ -216,11 +217,10 @@ struct mm_struct {
unsigned long flags; /* Must use atomic bitops to access the bits */

/* coredumping support */
- int core_waiters;
struct completion *core_startup_done, core_done;

/* aio bits */
- rwlock_t ioctx_list_lock;
+ rwlock_t ioctx_list_lock; /* aio lock */
struct kioctx *ioctx_list;
#ifdef CONFIG_CGROUP_MEM_RES_CTLR
struct mem_cgroup *mem_cgroup;

2008-03-13 16:40:42

by Lennart Sorensen

[permalink] [raw]
Subject: Re: [PATCH] Save some bytes in mm_struct by filling holes on 64bit

On Wed, Mar 12, 2008 at 03:28:07PM +0100, Andi Kleen wrote:
>
> Save some bytes in mm_struct by filling holes
>
> Putting int values together for better packing on 64bit
> shrinks sizeof(struct mm_struct) from 776 bytes to 760 bytes.

Are you going to fix the nice comments that mentioned what feature they
were part of now that things are all mixed together? I wonder if a few
bytes aren't worth paying for readable code.

After all now some 'aio bits' things are not in the 'aio bits' labeled
section.

> Signed-off-by: Andi Kleen <[email protected]>
>
> Index: linux-2.6.25-rc5/include/linux/mm_types.h
> ===================================================================
> --- linux-2.6.25-rc5.orig/include/linux/mm_types.h
> +++ linux-2.6.25-rc5/include/linux/mm_types.h
> @@ -172,6 +172,7 @@ struct mm_struct {
> atomic_t mm_users; /* How many users with user space? */
> atomic_t mm_count; /* How many references to "struct mm_struct" (users count as 1) */
> int map_count; /* number of VMAs */
> + rwlock_t ioctx_list_lock; /* aio lock */
> struct rw_semaphore mmap_sem;
> spinlock_t page_table_lock; /* Protects page tables and some counters */
>
> @@ -213,14 +214,13 @@ struct mm_struct {
> unsigned int token_priority;
> unsigned int last_interval;
>
> + int core_waiters;
> unsigned long flags; /* Must use atomic bitops to access the bits */
>
> /* coredumping support */
> - int core_waiters;
> struct completion *core_startup_done, core_done;
>
> /* aio bits */
> - rwlock_t ioctx_list_lock;
> struct kioctx *ioctx_list;
> #ifdef CONFIG_CGROUP_MEM_RES_CTLR
> struct mem_cgroup *mem_cgroup;
> --

--
Len Sorensen