[Devel] Re: Pid namespaces approaches testing results
Pavel Emelianov
xemul at openvz.org
Wed May 30 07:03:17 PDT 2007
Serge E. Hallyn wrote:
> Quoting Pavel Emelianov (xemul at openvz.org):
>> Dave Hansen wrote:
>>> On Tue, 2007-05-29 at 15:45 +0400, Pavel Emelianov wrote:
>>>> The detailed results are the following:
>>>> Test name: spawn execl shell ps (sys time)
>>>> 1(no ns) : 579.1 618.3 1623.2 3.052s
>>>> 2(suka's): 570.7 610.8 1600.2 3.107s
>>>> Slowdown : 1.5% 1.3% 1.4% 1.8%
>>>>
>>>> 3(no ns) : 580.6 616.0 1633.8 3.050s
>>>> 4(flat) : 580.8 615.1 1632.2 3.054s
>>>> Slowdown : 0% 0.1% <0.1% 0.1%
>>>> 5(multi) : 576.9 611.0 1618.8 3.065s
>>>> Slowdown : 0.6% 0.8% 0.9% 0.5%
>>> Wow, thanks so much for running those. You're a step ahead of us,
>>> there!
>> Thanks :) Maybe we shall cooperate then and make three series
>> of patches like
>>
>> 1. * The Kconfig options;
>>
>> * The API. I.e. calls like task_pid_nr(), task_session_nr_ns() etc;
>> This part is rather important as I found that some places in kernel
>> where I had to lookup the hash in multilevel model were just pid->vpid
>> dereference in flat model. This is a good optimization.
>>
>> * The changes in the generic code that intruduce a bunch of
>> #ifdef CONFIG_PID_NS
>> ...
>> #else
>> #ifdef CONFIG_PID_NS_FLAT
>> #endif
>> #ifdef CONFIG_PID_NS_MULTILEVEL
>> #endif
>> #endif
>> code in pid.c, sched.c, fork.c etc
>>
>> This patchset will have to make kernel prepared for namespaces injections
>> and (!) not to break normal kernel operation with CONFIG_PID_NS=n.
>
> In principle there's nothing at all wrong with that (imo). But the
> thing is, given the way Suka's patchset is set up, there really isn't
> any reason why it should be slower when using only one or two pid
> namespaces.
One of the main bottlenecks I see is that the routine struct_pid_to_number()
is "pid->vnr" in my case and a for() loop in your.
Nevertheless, that's just a guess.
> Suka, right now are you allocating the struct upid separately from the
> struct pid? That alone might slow things down quite a bit. By
> allocating them as one large struct - saving both an alloc at clone, and
> a dereference when looking at pid.upid[0] to get the pid_ns for instance
> - you might get some of this perf back.
>
> (Hmm, taking a quick look, it seems you're allocating the memory as one
> chunk, but then even though the struct upid is just at the end of the
> struct pid, you use a pointer to find the struct upid. That could slow
> things down a bit)
Right now Suka is allocating a struct pid and struct pid_elem as one chunk.
There even exists a kmem cache names pid+1elem :)
> Anyway, Pavel, I'd like to look at some profiling data (when Suka or I
> collects some) and see whether the slowdown is fixable. If it isn't,
> then we should definately look at combining the patchsets.
OK. Please, keep me advised.
> thanks,
> -serge
>
>> 2. The flat pid namespaces (my part)
>> 3. The multilevel pid namespaces (suka's part)
>>
>>> Did you happen to collect any profiling information during your runs?
>> Unfortunately no :( My intention was to prove that hierarchy has
>> performance implications and should be considered carefully.
>>
>>> -- Dave
>>>
>>>
>> _______________________________________________
>> Containers mailing list
>> Containers at lists.linux-foundation.org
>> https://lists.linux-foundation.org/mailman/listinfo/containers
>
_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers
More information about the Devel
mailing list