From: Glauber Costa <glommer@parallels.com>
To: JoonSoo Kim <js1304@gmail.com>
Cc: Christoph Lameter <cl@linux.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Pekka Enberg <penberg@kernel.org>,
David Rientjes <rientjes@google.com>
Subject: Re: [PATCH 2/2] slab: move kmem_cache_free to common code
Date: Wed, 24 Oct 2012 17:39:46 +0400 [thread overview]
Message-ID: <5087EFA2.6030607@parallels.com> (raw)
In-Reply-To: <CAAmzW4M9Casm+b4TOe7MOuZMYf7PKmzOHs1wZOXvybhRxCqZRA@mail.gmail.com>
On 10/23/2012 07:43 PM, JoonSoo Kim wrote:
> 2012/10/23 Glauber Costa <glommer@parallels.com>:
>> On 10/23/2012 12:07 PM, Glauber Costa wrote:
>>> On 10/23/2012 04:48 AM, JoonSoo Kim wrote:
>>>> Hello, Glauber.
>>>>
>>>> 2012/10/23 Glauber Costa <glommer@parallels.com>:
>>>>> On 10/22/2012 06:45 PM, Christoph Lameter wrote:
>>>>>> On Mon, 22 Oct 2012, Glauber Costa wrote:
>>>>>>
>>>>>>> + * kmem_cache_free - Deallocate an object
>>>>>>> + * @cachep: The cache the allocation was from.
>>>>>>> + * @objp: The previously allocated object.
>>>>>>> + *
>>>>>>> + * Free an object which was previously allocated from this
>>>>>>> + * cache.
>>>>>>> + */
>>>>>>> +void kmem_cache_free(struct kmem_cache *s, void *x)
>>>>>>> +{
>>>>>>> + __kmem_cache_free(s, x);
>>>>>>> + trace_kmem_cache_free(_RET_IP_, x);
>>>>>>> +}
>>>>>>> +EXPORT_SYMBOL(kmem_cache_free);
>>>>>>> +
>>>>>>
>>>>>> This results in an additional indirection if tracing is off. Wonder if
>>>>>> there is a performance impact?
>>>>>>
>>>>> if tracing is on, you mean?
>>>>>
>>>>> Tracing already incurs overhead, not sure how much a function call would
>>>>> add to the tracing overhead.
>>>>>
>>>>> I would not be concerned with this, but I can measure, if you have any
>>>>> specific workload in mind.
>>>>
>>>> With this patch, kmem_cache_free() invokes __kmem_cache_free(),
>>>> that is, it add one more "call instruction" than before.
>>>>
>>>> I think that Christoph's comment means above fact.
>>>
>>> Ah, this. Ok, I got fooled by his mention to tracing.
>>>
>>> I do agree, but since freeing is ultimately dependent on the allocator
>>> layout, I don't see a clean way of doing this without dropping tears of
>>> sorrow around. The calls in slub/slab/slob would have to be somehow
>>> inlined. Hum... maybe it is possible to do it from
>>> include/linux/sl*b_def.h...
>>>
>>> Let me give it a try and see what I can come up with.
>>>
>>
>> Ok.
>>
>> I am attaching a PoC for this for your appreciation. This gets quite
>> ugly, but it's the way I found without including sl{a,u,o}b.c directly -
>> which would be even worse.
>
> Hmm...
> This is important issue for sl[aou]b common allocators.
> Because there are similar functions like as kmem_cache_alloc, ksize, kfree, ...
> So it is good time to resolve this issue.
>
> As far as I know, now, we have 3 solutions.
>
> 1. include/linux/slab.h
> __always_inline kmem_cache_free()
> {
> __kmem_cache_free();
> blablabla...
> }
>
> 2. define macro like as Glauber's solution
> 3. include sl[aou]b.c directly.
>
> Is there other good solution?
> Among them, I prefer "solution 3", because future developing cost may
> be minimum among them.
>
> "Solution 2" may be error-prone for future developing.
> "Solution 1" may make compile-time longer and larger code.
>
> Is my understanding right?
> Is "Solution 3" really ugly?
>
I just gave it a try. Turns out the result is not *that* bad for my eyes.
I'll post soon.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: Glauber Costa <glommer@parallels.com>
To: JoonSoo Kim <js1304@gmail.com>
Cc: Christoph Lameter <cl@linux.com>, <linux-mm@kvack.org>,
<linux-kernel@vger.kernel.org>, Pekka Enberg <penberg@kernel.org>,
David Rientjes <rientjes@google.com>
Subject: Re: [PATCH 2/2] slab: move kmem_cache_free to common code
Date: Wed, 24 Oct 2012 17:39:46 +0400 [thread overview]
Message-ID: <5087EFA2.6030607@parallels.com> (raw)
In-Reply-To: <CAAmzW4M9Casm+b4TOe7MOuZMYf7PKmzOHs1wZOXvybhRxCqZRA@mail.gmail.com>
On 10/23/2012 07:43 PM, JoonSoo Kim wrote:
> 2012/10/23 Glauber Costa <glommer@parallels.com>:
>> On 10/23/2012 12:07 PM, Glauber Costa wrote:
>>> On 10/23/2012 04:48 AM, JoonSoo Kim wrote:
>>>> Hello, Glauber.
>>>>
>>>> 2012/10/23 Glauber Costa <glommer@parallels.com>:
>>>>> On 10/22/2012 06:45 PM, Christoph Lameter wrote:
>>>>>> On Mon, 22 Oct 2012, Glauber Costa wrote:
>>>>>>
>>>>>>> + * kmem_cache_free - Deallocate an object
>>>>>>> + * @cachep: The cache the allocation was from.
>>>>>>> + * @objp: The previously allocated object.
>>>>>>> + *
>>>>>>> + * Free an object which was previously allocated from this
>>>>>>> + * cache.
>>>>>>> + */
>>>>>>> +void kmem_cache_free(struct kmem_cache *s, void *x)
>>>>>>> +{
>>>>>>> + __kmem_cache_free(s, x);
>>>>>>> + trace_kmem_cache_free(_RET_IP_, x);
>>>>>>> +}
>>>>>>> +EXPORT_SYMBOL(kmem_cache_free);
>>>>>>> +
>>>>>>
>>>>>> This results in an additional indirection if tracing is off. Wonder if
>>>>>> there is a performance impact?
>>>>>>
>>>>> if tracing is on, you mean?
>>>>>
>>>>> Tracing already incurs overhead, not sure how much a function call would
>>>>> add to the tracing overhead.
>>>>>
>>>>> I would not be concerned with this, but I can measure, if you have any
>>>>> specific workload in mind.
>>>>
>>>> With this patch, kmem_cache_free() invokes __kmem_cache_free(),
>>>> that is, it add one more "call instruction" than before.
>>>>
>>>> I think that Christoph's comment means above fact.
>>>
>>> Ah, this. Ok, I got fooled by his mention to tracing.
>>>
>>> I do agree, but since freeing is ultimately dependent on the allocator
>>> layout, I don't see a clean way of doing this without dropping tears of
>>> sorrow around. The calls in slub/slab/slob would have to be somehow
>>> inlined. Hum... maybe it is possible to do it from
>>> include/linux/sl*b_def.h...
>>>
>>> Let me give it a try and see what I can come up with.
>>>
>>
>> Ok.
>>
>> I am attaching a PoC for this for your appreciation. This gets quite
>> ugly, but it's the way I found without including sl{a,u,o}b.c directly -
>> which would be even worse.
>
> Hmm...
> This is important issue for sl[aou]b common allocators.
> Because there are similar functions like as kmem_cache_alloc, ksize, kfree, ...
> So it is good time to resolve this issue.
>
> As far as I know, now, we have 3 solutions.
>
> 1. include/linux/slab.h
> __always_inline kmem_cache_free()
> {
> __kmem_cache_free();
> blablabla...
> }
>
> 2. define macro like as Glauber's solution
> 3. include sl[aou]b.c directly.
>
> Is there other good solution?
> Among them, I prefer "solution 3", because future developing cost may
> be minimum among them.
>
> "Solution 2" may be error-prone for future developing.
> "Solution 1" may make compile-time longer and larger code.
>
> Is my understanding right?
> Is "Solution 3" really ugly?
>
I just gave it a try. Turns out the result is not *that* bad for my eyes.
I'll post soon.
next prev parent reply other threads:[~2012-10-24 13:39 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-22 14:05 [PATCH 0/2] move kmem_cache_free to common code Glauber Costa
2012-10-22 14:05 ` Glauber Costa
2012-10-22 14:05 ` [PATCH 1/2] slab: commonize slab_cache field in struct page Glauber Costa
2012-10-22 14:05 ` Glauber Costa
2012-10-22 14:44 ` Christoph Lameter
2012-10-22 14:44 ` Christoph Lameter
2012-10-24 8:58 ` Pekka Enberg
2012-10-24 8:58 ` Pekka Enberg
2012-10-22 14:05 ` [PATCH 2/2] slab: move kmem_cache_free to common code Glauber Costa
2012-10-22 14:05 ` Glauber Costa
2012-10-22 14:45 ` Christoph Lameter
2012-10-22 14:45 ` Christoph Lameter
2012-10-22 15:10 ` Glauber Costa
2012-10-22 15:10 ` Glauber Costa
2012-10-23 0:48 ` JoonSoo Kim
2012-10-23 0:48 ` JoonSoo Kim
2012-10-23 8:07 ` Glauber Costa
2012-10-23 8:07 ` Glauber Costa
2012-10-23 10:52 ` Glauber Costa
2012-10-23 10:52 ` Glauber Costa
2012-10-23 15:43 ` JoonSoo Kim
2012-10-23 15:43 ` JoonSoo Kim
2012-10-24 8:31 ` Glauber Costa
2012-10-24 8:31 ` Glauber Costa
2012-10-24 13:39 ` Glauber Costa [this message]
2012-10-24 13:39 ` Glauber Costa
2012-10-23 14:12 ` Christoph Lameter
2012-10-23 14:12 ` Christoph Lameter
2012-10-23 14:15 ` Glauber Costa
2012-10-23 14:15 ` Glauber Costa
2012-10-23 14:34 ` Christoph Lameter
2012-10-23 14:34 ` Christoph Lameter
2012-10-23 18:16 ` Christoph Lameter
2012-10-23 18:16 ` Christoph Lameter
2012-10-24 8:56 ` Pekka Enberg
2012-10-24 8:56 ` Pekka Enberg
2012-10-24 10:03 ` Glauber Costa
2012-10-24 10:03 ` Glauber Costa
2012-10-24 8:56 ` Pekka Enberg
2012-10-24 8:56 ` Pekka Enberg
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=5087EFA2.6030607@parallels.com \
--to=glommer@parallels.com \
--cc=cl@linux.com \
--cc=js1304@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=penberg@kernel.org \
--cc=rientjes@google.com \
/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.