Re: [PATCH] MM : alloc_large_system_hash() can free some memory for non power-of-two bucketsize

2007-05-21 Thread William Lee Irwin III
William Lee Irwin III a ?crit : >> The proper way to do this is to convert the large system hashtable >> users to use some data structure / algorithm other than hashing by >> separate chaining. On Sat, May 19, 2007 at 08:41:01PM +0200, Eric Dumazet wrote: > No thanks. This was already discussed

Re: [PATCH] MM : alloc_large_system_hash() can free some memory for non power-of-two bucketsize

2007-05-21 Thread William Lee Irwin III
William Lee Irwin III a ?crit : The proper way to do this is to convert the large system hashtable users to use some data structure / algorithm other than hashing by separate chaining. On Sat, May 19, 2007 at 08:41:01PM +0200, Eric Dumazet wrote: No thanks. This was already discussed to

Re: [PATCH] MM : alloc_large_system_hash() can free some memory for non power-of-two bucketsize

2007-05-19 Thread Eric Dumazet
thing work. Otherwise the individual pages don't have page references, only the head page of the high-order page will. Oh thanks David for the hint. I added a split_page() call and it seems to work now. [PATCH] MM : alloc_large_system_hash() can free some memory for non power-of-two buck

Re: [PATCH] MM : alloc_large_system_hash() can free some memory for non power-of-two bucketsize

2007-05-19 Thread David Miller
From: Eric Dumazet <[EMAIL PROTECTED]> Date: Sat, 19 May 2007 20:07:11 +0200 > Maybe David has an idea how this can be done properly ? > > ref : http://marc.info/?l=linux-netdev=117706074825048=2 You need to use __GFP_COMP or similar to make this splitting+freeing thing work. Otherwise the

Re: [PATCH] MM : alloc_large_system_hash() can free some memory for non power-of-two bucketsize

2007-05-19 Thread Eric Dumazet
William Lee Irwin III a écrit : On Fri, May 18, 2007 at 11:54:54AM +0200, Eric Dumazet wrote: alloc_large_system_hash() is called at boot time to allocate space for several large hash tables. Lately, TCP hash table was changed and its bucketsize is not a power-of-two anymore. On most setups,

Re: [PATCH] MM : alloc_large_system_hash() can free some memory for non power-of-two bucketsize

2007-05-19 Thread William Lee Irwin III
On Fri, May 18, 2007 at 11:54:54AM +0200, Eric Dumazet wrote: > alloc_large_system_hash() is called at boot time to allocate space > for several large hash tables. > Lately, TCP hash table was changed and its bucketsize is not a > power-of-two anymore. > On most setups, alloc_large_system_hash()

Re: [PATCH] MM : alloc_large_system_hash() can free some memory for non power-of-two bucketsize

2007-05-19 Thread Eric Dumazet
Andrew Morton a écrit : On Fri, 18 May 2007 11:54:54 +0200 Eric Dumazet <[EMAIL PROTECTED]> wrote: alloc_large_system_hash() is called at boot time to allocate space for several large hash tables. Lately, TCP hash table was changed and its bucketsize is not a power-of-two anymore. On most

Re: [PATCH] MM : alloc_large_system_hash() can free some memory for non power-of-two bucketsize

2007-05-19 Thread Andrew Morton
On Fri, 18 May 2007 11:54:54 +0200 Eric Dumazet <[EMAIL PROTECTED]> wrote: > alloc_large_system_hash() is called at boot time to allocate space for > several large hash tables. > > Lately, TCP hash table was changed and its bucketsize is not a power-of-two > anymore. > > On most setups,

Re: [PATCH] MM : alloc_large_system_hash() can free some memory for non power-of-two bucketsize

2007-05-19 Thread Andrew Morton
On Fri, 18 May 2007 11:54:54 +0200 Eric Dumazet [EMAIL PROTECTED] wrote: alloc_large_system_hash() is called at boot time to allocate space for several large hash tables. Lately, TCP hash table was changed and its bucketsize is not a power-of-two anymore. On most setups,

Re: [PATCH] MM : alloc_large_system_hash() can free some memory for non power-of-two bucketsize

2007-05-19 Thread Eric Dumazet
Andrew Morton a écrit : On Fri, 18 May 2007 11:54:54 +0200 Eric Dumazet [EMAIL PROTECTED] wrote: alloc_large_system_hash() is called at boot time to allocate space for several large hash tables. Lately, TCP hash table was changed and its bucketsize is not a power-of-two anymore. On most

Re: [PATCH] MM : alloc_large_system_hash() can free some memory for non power-of-two bucketsize

2007-05-19 Thread William Lee Irwin III
On Fri, May 18, 2007 at 11:54:54AM +0200, Eric Dumazet wrote: alloc_large_system_hash() is called at boot time to allocate space for several large hash tables. Lately, TCP hash table was changed and its bucketsize is not a power-of-two anymore. On most setups, alloc_large_system_hash()

Re: [PATCH] MM : alloc_large_system_hash() can free some memory for non power-of-two bucketsize

2007-05-19 Thread Eric Dumazet
William Lee Irwin III a écrit : On Fri, May 18, 2007 at 11:54:54AM +0200, Eric Dumazet wrote: alloc_large_system_hash() is called at boot time to allocate space for several large hash tables. Lately, TCP hash table was changed and its bucketsize is not a power-of-two anymore. On most setups,

Re: [PATCH] MM : alloc_large_system_hash() can free some memory for non power-of-two bucketsize

2007-05-19 Thread David Miller
From: Eric Dumazet [EMAIL PROTECTED] Date: Sat, 19 May 2007 20:07:11 +0200 Maybe David has an idea how this can be done properly ? ref : http://marc.info/?l=linux-netdevm=117706074825048w=2 You need to use __GFP_COMP or similar to make this splitting+freeing thing work. Otherwise the

Re: [PATCH] MM : alloc_large_system_hash() can free some memory for non power-of-two bucketsize

2007-05-19 Thread Eric Dumazet
work. Otherwise the individual pages don't have page references, only the head page of the high-order page will. Oh thanks David for the hint. I added a split_page() call and it seems to work now. [PATCH] MM : alloc_large_system_hash() can free some memory for non power-of-two bucketsize

Re: [PATCH] MM : alloc_large_system_hash() can free some memory for non power-of-two bucketsize

2007-05-18 Thread Christoph Lameter
On Fri, 18 May 2007, Eric Dumazet wrote: > table = (void*) __get_free_pages(GFP_ATOMIC, order); ATOMIC? Is there some reason why we need atomic here? > + /* > + * If bucketsize is not a power-of-two, we may free > +

[PATCH] MM : alloc_large_system_hash() can free some memory for non power-of-two bucketsize

2007-05-18 Thread Eric Dumazet
alloc_large_system_hash() is called at boot time to allocate space for several large hash tables. Lately, TCP hash table was changed and its bucketsize is not a power-of-two anymore. On most setups, alloc_large_system_hash() allocates one big page (order > 0) with __get_free_pages(GFP_ATOMIC,

[PATCH] MM : alloc_large_system_hash() can free some memory for non power-of-two bucketsize

2007-05-18 Thread Eric Dumazet
alloc_large_system_hash() is called at boot time to allocate space for several large hash tables. Lately, TCP hash table was changed and its bucketsize is not a power-of-two anymore. On most setups, alloc_large_system_hash() allocates one big page (order 0) with __get_free_pages(GFP_ATOMIC,

Re: [PATCH] MM : alloc_large_system_hash() can free some memory for non power-of-two bucketsize

2007-05-18 Thread Christoph Lameter
On Fri, 18 May 2007, Eric Dumazet wrote: table = (void*) __get_free_pages(GFP_ATOMIC, order); ATOMIC? Is there some reason why we need atomic here? + /* + * If bucketsize is not a power-of-two, we may free +