* Re: [PATCH 2/2] kvm: use cpumask_var_t for cpus_hardware_enabled
[not found] <200812072125.45757.rusty@rustcorp.com.au>
@ 2008-12-07 15:55 ` Avi Kivity
2008-12-08 6:05 ` Rusty Russell
0 siblings, 1 reply; 5+ messages in thread
From: Avi Kivity @ 2008-12-07 15:55 UTC (permalink / raw)
To: Rusty Russell; +Cc: kvm-devel, linux-kernel, Mike Travis, Avi Kivity
Rusty Russell wrote:
> This changes cpus_hardware_enabled from a cpumask_t to a cpumask_var_t:
> equivalent for CONFIG_CPUMASKS_OFFSTACK=n, otherwise dynamically allocated.
>
>
> -static cpumask_t cpus_hardware_enabled;
> +static cpumask_var_t cpus_hardware_enabled
This isn't on stack, so it isn't buying us anything.
Is the plan to drop cpumask_t? If so, we're penalizing non-stack users
by forcing them to go through another pointer (and cacheline).
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] kvm: use cpumask_var_t for cpus_hardware_enabled
2008-12-07 15:55 ` [PATCH 2/2] kvm: use cpumask_var_t for cpus_hardware_enabled Avi Kivity
@ 2008-12-08 6:05 ` Rusty Russell
2008-12-08 9:46 ` Avi Kivity
0 siblings, 1 reply; 5+ messages in thread
From: Rusty Russell @ 2008-12-08 6:05 UTC (permalink / raw)
To: Avi Kivity; +Cc: kvm-devel, linux-kernel, Mike Travis
On Monday 08 December 2008 02:25:50 Avi Kivity wrote:
> Rusty Russell wrote:
> > This changes cpus_hardware_enabled from a cpumask_t to a cpumask_var_t:
> > equivalent for CONFIG_CPUMASKS_OFFSTACK=n, otherwise dynamically allocated.
> >
> >
> > -static cpumask_t cpus_hardware_enabled;
> > +static cpumask_var_t cpus_hardware_enabled
>
> This isn't on stack, so it isn't buying us anything.
It's the CONFIG_NR_CPUS=4096 but nr_cpu_ids=4 case which we win using
dynamic allocation. Gotta love distribution kernels.
> Is the plan to drop cpumask_t?
Yes. And undefine 'struct cpumask' if CONFIG_CPUMASK_OFFSTACK. That
will stop assignment and on-stack declarations for all but the most
determined.
> If so, we're penalizing non-stack users
> by forcing them to go through another pointer (and cacheline).
Not quite. If !CONFIG_CPUMASK_OFFSTACK, cpumask_var_t == cpumask_t[1].
Blame Linus :)
Cheers,
Rusty.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] kvm: use cpumask_var_t for cpus_hardware_enabled
2008-12-08 6:05 ` Rusty Russell
@ 2008-12-08 9:46 ` Avi Kivity
2008-12-08 11:50 ` Rusty Russell
0 siblings, 1 reply; 5+ messages in thread
From: Avi Kivity @ 2008-12-08 9:46 UTC (permalink / raw)
To: Rusty Russell; +Cc: kvm-devel, linux-kernel, Mike Travis
Rusty Russell wrote:
>> This isn't on stack, so it isn't buying us anything.
>>
>
> It's the CONFIG_NR_CPUS=4096 but nr_cpu_ids=4 case which we win using
> dynamic allocation. Gotta love distribution kernels.
>
>
What does it buy? 4096/8 = 512 bytes statically allocated?
I understand passing things as pointers, but allocating everything
dynamically is unCish.
>> Is the plan to drop cpumask_t?
>>
>
> Yes. And undefine 'struct cpumask' if CONFIG_CPUMASK_OFFSTACK. That
> will stop assignment and on-stack declarations for all but the most
> determined.
>
>
>> If so, we're penalizing non-stack users
>> by forcing them to go through another pointer (and cacheline).
>>
>
> Not quite. If !CONFIG_CPUMASK_OFFSTACK, cpumask_var_t == cpumask_t[1].
> Blame Linus :)
>
Hm, is there a C trick which will error out when allocating something on
the stack, but work when allocating statically? I can think of
something to do the reverse, but that doesn't help.
Maybe a weak or visibility attribute? These don't make sense on
function locals.
--
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] kvm: use cpumask_var_t for cpus_hardware_enabled
2008-12-08 9:46 ` Avi Kivity
@ 2008-12-08 11:50 ` Rusty Russell
2008-12-08 14:29 ` Mike Travis
0 siblings, 1 reply; 5+ messages in thread
From: Rusty Russell @ 2008-12-08 11:50 UTC (permalink / raw)
To: Avi Kivity; +Cc: kvm-devel, linux-kernel, Mike Travis
On Monday 08 December 2008 20:16:44 Avi Kivity wrote:
> Rusty Russell wrote:
> >> This isn't on stack, so it isn't buying us anything.
> >>
> >
> > It's the CONFIG_NR_CPUS=4096 but nr_cpu_ids=4 case which we win using
> > dynamic allocation. Gotta love distribution kernels.
> >
> >
>
> What does it buy? 4096/8 = 512 bytes statically allocated?
It adds up, and 4096 seems to be only the start of the insanityH^H^Hfun.
> > Not quite. If !CONFIG_CPUMASK_OFFSTACK, cpumask_var_t == cpumask_t[1].
> > Blame Linus :)
> >
>
> Hm, is there a C trick which will error out when allocating something on
> the stack, but work when allocating statically? I can think of
> something to do the reverse, but that doesn't help.
We also need to prevent assignment, eg:
*foo = *bar;
Because when we allocate them, we'll cut them to size.
Cheers,
Rusty.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] kvm: use cpumask_var_t for cpus_hardware_enabled
2008-12-08 11:50 ` Rusty Russell
@ 2008-12-08 14:29 ` Mike Travis
0 siblings, 0 replies; 5+ messages in thread
From: Mike Travis @ 2008-12-08 14:29 UTC (permalink / raw)
To: Rusty Russell; +Cc: Avi Kivity, kvm-devel, linux-kernel
Rusty Russell wrote:
> On Monday 08 December 2008 20:16:44 Avi Kivity wrote:
>> Rusty Russell wrote:
>>>> This isn't on stack, so it isn't buying us anything.
>>>>
>>> It's the CONFIG_NR_CPUS=4096 but nr_cpu_ids=4 case which we win using
>>> dynamic allocation. Gotta love distribution kernels.
>>>
>>>
>> What does it buy? 4096/8 = 512 bytes statically allocated?
>
> It adds up, and 4096 seems to be only the start of the insanityH^H^Hfun.
The real win though is when cpumask_size represents the actual size of the
cpumask (based on # of possible cpus) instead of the pre-configured size
of NR_CPUS. So for 99.9% of the systems (having 64 or fewer cpus), the
savings will be 504 bytes not allocated.
>
>>> Not quite. If !CONFIG_CPUMASK_OFFSTACK, cpumask_var_t == cpumask_t[1].
>>> Blame Linus :)
>>>
>> Hm, is there a C trick which will error out when allocating something on
>> the stack, but work when allocating statically? I can think of
>> something to do the reverse, but that doesn't help.
>
> We also need to prevent assignment, eg:
>
> *foo = *bar;
>
> Because when we allocate them, we'll cut them to size.
>
> Cheers,
> Rusty.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2008-12-08 14:29 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <200812072125.45757.rusty@rustcorp.com.au>
2008-12-07 15:55 ` [PATCH 2/2] kvm: use cpumask_var_t for cpus_hardware_enabled Avi Kivity
2008-12-08 6:05 ` Rusty Russell
2008-12-08 9:46 ` Avi Kivity
2008-12-08 11:50 ` Rusty Russell
2008-12-08 14:29 ` Mike Travis
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).