* [PATCH net-2.6.26 2/2] Do not allocate unneeded memory for dev->priv alignment.
@ 2008-04-07 16:31 Pavel Emelyanov
2008-04-07 17:44 ` Jarek Poplawski
0 siblings, 1 reply; 5+ messages in thread
From: Pavel Emelyanov @ 2008-04-07 16:31 UTC (permalink / raw)
To: Linux Netdev List; +Cc: Stephen Hemminger, Patrick McHardy
The alloc_netdev_mq() tries to produce 32-bytes alignment for both
the net_device itself and its private data. The second alignment is
achieved by adding the NETDEV_ALIGN_CONST to the whole size of
the memory to be allocated.
However, for those devices that do not need the private area, this
addition just makes the net_device weight 1024 + 32 = 1068 bytes,
i.e. consume twice as much memory.
Since loopback device is such (sizeof_priv == 0 for it), and each
net namespace creates one, this can save a noticeable amount of
memory for kernel with net namespaces turned on.
After this set the lo device is actually allocated from a size-1024
kmem cache on i386 box even with NETPOLL and WIRELESS_EXT turned on.
Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
---
net/core/dev.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/net/core/dev.c b/net/core/dev.c
index 7aa0112..80e103a 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4000,7 +4000,8 @@ struct net_device *alloc_netdev_mq(int sizeof_priv, const char *name,
alloc_size = (sizeof(*dev) + NETDEV_ALIGN_CONST +
(sizeof(struct net_device_subqueue) * (queue_count - 1))) &
~NETDEV_ALIGN_CONST;
- alloc_size += sizeof_priv + NETDEV_ALIGN_CONST;
+ if (sizeof_priv)
+ alloc_size += sizeof_priv + NETDEV_ALIGN_CONST;
p = kzalloc(alloc_size, GFP_KERNEL);
if (!p) {
--
1.5.3.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH net-2.6.26 2/2] Do not allocate unneeded memory for dev->priv alignment.
2008-04-07 16:31 [PATCH net-2.6.26 2/2] Do not allocate unneeded memory for dev->priv alignment Pavel Emelyanov
@ 2008-04-07 17:44 ` Jarek Poplawski
2008-04-08 8:42 ` Pavel Emelyanov
0 siblings, 1 reply; 5+ messages in thread
From: Jarek Poplawski @ 2008-04-07 17:44 UTC (permalink / raw)
To: Pavel Emelyanov; +Cc: Linux Netdev List, Stephen Hemminger, Patrick McHardy
Pavel Emelyanov wrote, On 04/07/2008 06:31 PM:
...
> ---
> net/core/dev.c | 3 ++-
> 1 files changed, 2 insertions(+), 1 deletions(-)
>
> diff --git a/net/core/dev.c b/net/core/dev.c
> index 7aa0112..80e103a 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -4000,7 +4000,8 @@ struct net_device *alloc_netdev_mq(int sizeof_priv, const char *name,
> alloc_size = (sizeof(*dev) + NETDEV_ALIGN_CONST +
> (sizeof(struct net_device_subqueue) * (queue_count - 1))) &
> ~NETDEV_ALIGN_CONST;
> - alloc_size += sizeof_priv + NETDEV_ALIGN_CONST;
> + if (sizeof_priv)
> + alloc_size += sizeof_priv + NETDEV_ALIGN_CONST;
>
> p = kzalloc(alloc_size, GFP_KERNEL);
> if (!p) {
IMHO this second "+ NETDEV_ALIGN_CONST" is needed here because of "~NETDEV_ALIGN_CONST".
Regards,
Jarek P.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net-2.6.26 2/2] Do not allocate unneeded memory for dev->priv alignment.
2008-04-07 17:44 ` Jarek Poplawski
@ 2008-04-08 8:42 ` Pavel Emelyanov
2008-04-08 9:22 ` Jarek Poplawski
0 siblings, 1 reply; 5+ messages in thread
From: Pavel Emelyanov @ 2008-04-08 8:42 UTC (permalink / raw)
To: Jarek Poplawski; +Cc: Linux Netdev List, Stephen Hemminger, Patrick McHardy
Jarek Poplawski wrote:
> Pavel Emelyanov wrote, On 04/07/2008 06:31 PM:
> ...
>
>> ---
>> net/core/dev.c | 3 ++-
>> 1 files changed, 2 insertions(+), 1 deletions(-)
>>
>> diff --git a/net/core/dev.c b/net/core/dev.c
>> index 7aa0112..80e103a 100644
>> --- a/net/core/dev.c
>> +++ b/net/core/dev.c
>> @@ -4000,7 +4000,8 @@ struct net_device *alloc_netdev_mq(int sizeof_priv, const char *name,
>> alloc_size = (sizeof(*dev) + NETDEV_ALIGN_CONST +
>> (sizeof(struct net_device_subqueue) * (queue_count - 1))) &
>> ~NETDEV_ALIGN_CONST;
>> - alloc_size += sizeof_priv + NETDEV_ALIGN_CONST;
>> + if (sizeof_priv)
>> + alloc_size += sizeof_priv + NETDEV_ALIGN_CONST;
>>
>> p = kzalloc(alloc_size, GFP_KERNEL);
>> if (!p) {
>
>
> IMHO this second "+ NETDEV_ALIGN_CONST" is needed here because of "~NETDEV_ALIGN_CONST".
Hmm, AFAIC, the net_device alignment is done earlier, while this one
makes sense in case the priv pointer alignment.
> Regards,
> Jarek P.
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net-2.6.26 2/2] Do not allocate unneeded memory for dev->priv alignment.
2008-04-08 8:42 ` Pavel Emelyanov
@ 2008-04-08 9:22 ` Jarek Poplawski
2008-04-16 9:17 ` David Miller
0 siblings, 1 reply; 5+ messages in thread
From: Jarek Poplawski @ 2008-04-08 9:22 UTC (permalink / raw)
To: Pavel Emelyanov; +Cc: Linux Netdev List, Stephen Hemminger, Patrick McHardy
On Tue, Apr 08, 2008 at 12:42:27PM +0400, Pavel Emelyanov wrote:
> Jarek Poplawski wrote:
> > Pavel Emelyanov wrote, On 04/07/2008 06:31 PM:
> > ...
> >
> >> ---
> >> net/core/dev.c | 3 ++-
> >> 1 files changed, 2 insertions(+), 1 deletions(-)
> >>
> >> diff --git a/net/core/dev.c b/net/core/dev.c
> >> index 7aa0112..80e103a 100644
> >> --- a/net/core/dev.c
> >> +++ b/net/core/dev.c
> >> @@ -4000,7 +4000,8 @@ struct net_device *alloc_netdev_mq(int sizeof_priv, const char *name,
> >> alloc_size = (sizeof(*dev) + NETDEV_ALIGN_CONST +
> >> (sizeof(struct net_device_subqueue) * (queue_count - 1))) &
> >> ~NETDEV_ALIGN_CONST;
> >> - alloc_size += sizeof_priv + NETDEV_ALIGN_CONST;
> >> + if (sizeof_priv)
> >> + alloc_size += sizeof_priv + NETDEV_ALIGN_CONST;
> >>
> >> p = kzalloc(alloc_size, GFP_KERNEL);
> >> if (!p) {
> >
> >
> > IMHO this second "+ NETDEV_ALIGN_CONST" is needed here because of "~NETDEV_ALIGN_CONST".
>
> Hmm, AFAIC, the net_device alignment is done earlier, while this one
> makes sense in case the priv pointer alignment.
Hmm, one NETDEV_ALIGN_CONST is later used just for net_device alignment,
and you could not fit this struct after "~NETDEV_ALIGN_CONST" without
adding anything. So you should probably skip "~NETDEV_ALIGN_CONST" in
this no priv case too?
Jarek P.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net-2.6.26 2/2] Do not allocate unneeded memory for dev->priv alignment.
2008-04-08 9:22 ` Jarek Poplawski
@ 2008-04-16 9:17 ` David Miller
0 siblings, 0 replies; 5+ messages in thread
From: David Miller @ 2008-04-16 9:17 UTC (permalink / raw)
To: jarkao2; +Cc: xemul, netdev, shemminger, kaber
From: Jarek Poplawski <jarkao2@gmail.com>
Date: Tue, 8 Apr 2008 09:22:53 +0000
> On Tue, Apr 08, 2008 at 12:42:27PM +0400, Pavel Emelyanov wrote:
> > Hmm, AFAIC, the net_device alignment is done earlier, while this one
> > makes sense in case the priv pointer alignment.
>
> Hmm, one NETDEV_ALIGN_CONST is later used just for net_device alignment,
> and you could not fit this struct after "~NETDEV_ALIGN_CONST" without
> adding anything. So you should probably skip "~NETDEV_ALIGN_CONST" in
> this no priv case too?
The Linux NETDEV Patch Robot has determined that these other
NETDEV_ALIGN_CONST instances need to be retained, therefore
Pavel's patch will be applied to net-2.6.26.
*beep* *beep*
Thank you for your valuable feedback.
*beep* *beep*
Keep hacking.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2008-04-16 9:17 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-07 16:31 [PATCH net-2.6.26 2/2] Do not allocate unneeded memory for dev->priv alignment Pavel Emelyanov
2008-04-07 17:44 ` Jarek Poplawski
2008-04-08 8:42 ` Pavel Emelyanov
2008-04-08 9:22 ` Jarek Poplawski
2008-04-16 9:17 ` David Miller
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).