From: Ying Xue <ying.xue@windriver.com>
To: Thomas Graf <tgraf@suug.ch>
Cc: <davem@davemloft.net>, <eric.dumazet@gmail.com>,
<netdev@vger.kernel.org>
Subject: Re: [PATCH RFC] lib/rhashtable: allow users to set the minimum shifts of shrinking
Date: Thu, 28 Aug 2014 09:04:17 +0800 [thread overview]
Message-ID: <53FE8011.4060100@windriver.com> (raw)
In-Reply-To: <20140827103412.GC13116@casper.infradead.org>
On 08/27/2014 06:34 PM, Thomas Graf wrote:
> On 08/27/14 at 04:57pm, Ying Xue wrote:
>> diff --git a/lib/rhashtable.c b/lib/rhashtable.c
>> index a2c7881..1466e2d 100644
>> --- a/lib/rhashtable.c
>> +++ b/lib/rhashtable.c
>> @@ -293,12 +293,15 @@ EXPORT_SYMBOL_GPL(rhashtable_expand);
>> int rhashtable_shrink(struct rhashtable *ht, gfp_t flags)
>> {
>> struct bucket_table *ntbl, *tbl = rht_dereference(ht->tbl, ht);
>> + size_t min_shift = ilog2(HASH_MIN_SIZE);
>> struct rhash_head __rcu **pprev;
>> unsigned int i;
>>
>> ASSERT_RHT_MUTEX(ht);
>>
>> - if (tbl->size <= HASH_MIN_SIZE)
>> + if (ht->p.min_shift)
>> + min_shift = max(ht->p.min_shift, min_shift);
>> + if (ht->shift <= min_shift)
>> return 0;
>
> I like it. Can you translate HASH_MIN_SIZE to .minshift in
> rhashtable_init()? That way we only have to deal with .min_shift in
> rhashtable_shrink().
>
Good suggestion! I will change it in next version.
> Note that shrinking can also be disabled by not providing a
> .shrink_decision function in rhashtable_params if the shrinking is
> too expensive for your case.
>
Yes, I know the rule. But in some case we hope that rhashtable doesn't
take such expensive actions like expanding and shrinking when its size
is small; meanwhile, when its size is rather big, shrinking is able to
de done as usual.
In fact, we already published the max_shift to users, allowing them to
limit the biggest size of rhashtable. So, exporting min_shift should be
reasonable, having users have a chance to specify the smallest size of
rhashtable.
>> -static size_t rounded_hashtable_size(unsigned int nelem)
>> +static size_t rounded_hashtable_size(struct rhashtable_params *params)
>> {
>> - return max(roundup_pow_of_two(nelem * 4 / 3), HASH_MIN_SIZE);
>> + size_t size = HASH_MIN_SIZE;
>> +
>> + if (params->min_shift)
>> + size = max((1UL << params->min_shift), HASH_MIN_SIZE);
>> +
>> + return max(roundup_pow_of_two(params->nelem_hint * 4 / 3), size);
>> }
>
> Same here. If you merge the provided .min_shift with HASH_MIN_SIZE
> in rhashtable_init() before calculating the size, the above logic
> can be simplified a lot.
>
Thanks for your suggestion.
Regards,
Ying
>
prev parent reply other threads:[~2014-08-28 1:04 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-27 8:57 [PATCH RFC] lib/rhashtable: allow users to set the minimum shifts of shrinking Ying Xue
2014-08-27 10:34 ` Thomas Graf
2014-08-28 1:04 ` Ying Xue [this message]
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=53FE8011.4060100@windriver.com \
--to=ying.xue@windriver.com \
--cc=davem@davemloft.net \
--cc=eric.dumazet@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=tgraf@suug.ch \
/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.