* [Patch net-next] tcp_metrics: rearrange fields to avoid holes
@ 2013-07-31 2:48 Cong Wang
2013-07-31 3:08 ` Eric Dumazet
0 siblings, 1 reply; 12+ messages in thread
From: Cong Wang @ 2013-07-31 2:48 UTC (permalink / raw)
To: netdev
Cc: David S. Miller, Eric Dumazet, Yuchung Cheng, Neal Cardwell,
Cong Wang
From: Cong Wang <amwang@redhat.com>
On x86_64, before this patch:
struct tcp_fastopen_metrics {
u16 mss; /* 0 2 */
u16 syn_loss:10; /* 2: 6 2 */
/* XXX 6 bits hole, try to pack */
/* XXX 4 bytes hole, try to pack */
long unsigned int last_syn_loss; /* 8 8 */
struct tcp_fastopen_cookie cookie; /* 16 17 */
/* size: 40, cachelines: 1, members: 4 */
/* sum members: 29, holes: 1, sum holes: 4 */
/* bit holes: 1, sum bit holes: 6 bits */
/* padding: 7 */
/* last cacheline: 40 bytes */
};
after this patch:
struct tcp_fastopen_metrics {
u16 mss; /* 0 2 */
u16 syn_loss:10; /* 2: 6 2 */
/* XXX 6 bits hole, try to pack */
struct tcp_fastopen_cookie cookie; /* 4 17 */
/* XXX 3 bytes hole, try to pack */
long unsigned int last_syn_loss; /* 24 8 */
/* size: 32, cachelines: 1, members: 4 */
/* sum members: 29, holes: 1, sum holes: 3 */
/* bit holes: 1, sum bit holes: 6 bits */
/* last cacheline: 32 bytes */
};
On 32bit, the 4-byte hole should not exist, so this patch probably
doesn't change anything.
Cc: Eric Dumazet <edumazet@google.com>
Cc: Yuchung Cheng <ycheng@google.com>
Cc: Neal Cardwell <ncardwell@google.com>
Cc: David S. Miller <davem@davemloft.net>
Signed-off-by: Cong Wang <amwang@redhat.com>
---
diff --git a/net/ipv4/tcp_metrics.c b/net/ipv4/tcp_metrics.c
index 10b3796..438393f 100644
--- a/net/ipv4/tcp_metrics.c
+++ b/net/ipv4/tcp_metrics.c
@@ -25,8 +25,8 @@ int sysctl_tcp_nometrics_save __read_mostly;
struct tcp_fastopen_metrics {
u16 mss;
u16 syn_loss:10; /* Recurring Fast Open SYN losses */
- unsigned long last_syn_loss; /* Last Fast Open SYN loss */
struct tcp_fastopen_cookie cookie;
+ unsigned long last_syn_loss; /* Last Fast Open SYN loss */
};
struct tcp_metrics_block {
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [Patch net-next] tcp_metrics: rearrange fields to avoid holes
2013-07-31 2:48 [Patch net-next] tcp_metrics: rearrange fields to avoid holes Cong Wang
@ 2013-07-31 3:08 ` Eric Dumazet
2013-07-31 3:13 ` Cong Wang
0 siblings, 1 reply; 12+ messages in thread
From: Eric Dumazet @ 2013-07-31 3:08 UTC (permalink / raw)
To: Cong Wang
Cc: netdev, David S. Miller, Eric Dumazet, Yuchung Cheng,
Neal Cardwell
On Wed, 2013-07-31 at 10:48 +0800, Cong Wang wrote:
> From: Cong Wang <amwang@redhat.com>
>
> On x86_64, before this patch:
>
> struct tcp_fastopen_metrics {
> u16 mss; /* 0 2 */
> u16 syn_loss:10; /* 2: 6 2 */
>
> /* XXX 6 bits hole, try to pack */
> /* XXX 4 bytes hole, try to pack */
>
> long unsigned int last_syn_loss; /* 8 8 */
> struct tcp_fastopen_cookie cookie; /* 16 17 */
>
> /* size: 40, cachelines: 1, members: 4 */
> /* sum members: 29, holes: 1, sum holes: 4 */
> /* bit holes: 1, sum bit holes: 6 bits */
> /* padding: 7 */
> /* last cacheline: 40 bytes */
> };
>
> after this patch:
>
> struct tcp_fastopen_metrics {
> u16 mss; /* 0 2 */
> u16 syn_loss:10; /* 2: 6 2 */
>
> /* XXX 6 bits hole, try to pack */
>
> struct tcp_fastopen_cookie cookie; /* 4 17 */
>
> /* XXX 3 bytes hole, try to pack */
>
> long unsigned int last_syn_loss; /* 24 8 */
>
> /* size: 32, cachelines: 1, members: 4 */
> /* sum members: 29, holes: 1, sum holes: 3 */
> /* bit holes: 1, sum bit holes: 6 bits */
> /* last cacheline: 32 bytes */
> };
>
> On 32bit, the 4-byte hole should not exist, so this patch probably
> doesn't change anything.
>
> Cc: Eric Dumazet <edumazet@google.com>
> Cc: Yuchung Cheng <ycheng@google.com>
> Cc: Neal Cardwell <ncardwell@google.com>
> Cc: David S. Miller <davem@davemloft.net>
> Signed-off-by: Cong Wang <amwang@redhat.com>
Oh well, this patch is pure noise...
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Patch net-next] tcp_metrics: rearrange fields to avoid holes
2013-07-31 3:08 ` Eric Dumazet
@ 2013-07-31 3:13 ` Cong Wang
2013-07-31 3:24 ` Eric Dumazet
2013-07-31 6:26 ` David Miller
0 siblings, 2 replies; 12+ messages in thread
From: Cong Wang @ 2013-07-31 3:13 UTC (permalink / raw)
To: Eric Dumazet
Cc: netdev, David S. Miller, Eric Dumazet, Yuchung Cheng,
Neal Cardwell
On Tue, 2013-07-30 at 20:08 -0700, Eric Dumazet wrote:
>
> Oh well, this patch is pure noise...
>
>
Mind to be specific?
I know saving 8 bytes is not interesting for you, but it is for me,
since I need some room in struct tcp_metrics_block for union inet_addr.
With this patch, I don't have to make struct tcp_metrics_block expand to
3 cachelines. :)
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Patch net-next] tcp_metrics: rearrange fields to avoid holes
2013-07-31 3:13 ` Cong Wang
@ 2013-07-31 3:24 ` Eric Dumazet
2013-07-31 3:35 ` Joe Perches
2013-07-31 3:37 ` Cong Wang
2013-07-31 6:26 ` David Miller
1 sibling, 2 replies; 12+ messages in thread
From: Eric Dumazet @ 2013-07-31 3:24 UTC (permalink / raw)
To: Cong Wang
Cc: netdev, David S. Miller, Eric Dumazet, Yuchung Cheng,
Neal Cardwell
On Wed, 2013-07-31 at 11:13 +0800, Cong Wang wrote:
> On Tue, 2013-07-30 at 20:08 -0700, Eric Dumazet wrote:
> >
> > Oh well, this patch is pure noise...
> >
> >
>
> Mind to be specific?
>
> I know saving 8 bytes is not interesting for you, but it is for me,
> since I need some room in struct tcp_metrics_block for union inet_addr.
> With this patch, I don't have to make struct tcp_metrics_block expand to
> 3 cachelines. :)
Do you see how this explanation is rather different than the one you
gave in the changelog ?
Its 3 lines, instead of all this pahole noise.
And it would be more logical to put the "unsigned long last_syn_loss" at
the beginning of the structure, instead after an array of 17 bytes.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Patch net-next] tcp_metrics: rearrange fields to avoid holes
2013-07-31 3:24 ` Eric Dumazet
@ 2013-07-31 3:35 ` Joe Perches
2013-07-31 3:40 ` Cong Wang
2013-07-31 3:37 ` Cong Wang
1 sibling, 1 reply; 12+ messages in thread
From: Joe Perches @ 2013-07-31 3:35 UTC (permalink / raw)
To: Eric Dumazet
Cc: Cong Wang, netdev, David S. Miller, Eric Dumazet, Yuchung Cheng,
Neal Cardwell
On Tue, 2013-07-30 at 20:24 -0700, Eric Dumazet wrote:
> On Wed, 2013-07-31 at 11:13 +0800, Cong Wang wrote:
> > On Tue, 2013-07-30 at 20:08 -0700, Eric Dumazet wrote:
> > > Oh well, this patch is pure noise...
> > Mind to be specific?
> >
> > I know saving 8 bytes is not interesting for you, but it is for me,
> > since I need some room in struct tcp_metrics_block for union inet_addr.
> > With this patch, I don't have to make struct tcp_metrics_block expand to
> > 3 cachelines. :)
>
> Do you see how this explanation is rather different than the one you
> gave in the changelog ?
Eric, do you see how your own original reply was unwarranted?
> And it would be more logical to put the "unsigned long last_syn_loss" at
> the beginning of the structure, instead after an array of 17 bytes.
True, using "unsigned long" instead of "long unsigned int"
would likely be better too.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Patch net-next] tcp_metrics: rearrange fields to avoid holes
2013-07-31 3:24 ` Eric Dumazet
2013-07-31 3:35 ` Joe Perches
@ 2013-07-31 3:37 ` Cong Wang
2013-07-31 3:57 ` Eric Dumazet
1 sibling, 1 reply; 12+ messages in thread
From: Cong Wang @ 2013-07-31 3:37 UTC (permalink / raw)
To: Eric Dumazet
Cc: netdev, David S. Miller, Eric Dumazet, Yuchung Cheng,
Neal Cardwell
On Tue, 2013-07-30 at 20:24 -0700, Eric Dumazet wrote:
> On Wed, 2013-07-31 at 11:13 +0800, Cong Wang wrote:
> > On Tue, 2013-07-30 at 20:08 -0700, Eric Dumazet wrote:
> > >
> > > Oh well, this patch is pure noise...
> > >
> > >
> >
> > Mind to be specific?
> >
> > I know saving 8 bytes is not interesting for you, but it is for me,
> > since I need some room in struct tcp_metrics_block for union inet_addr.
> > With this patch, I don't have to make struct tcp_metrics_block expand to
> > 3 cachelines. :)
>
> Do you see how this explanation is rather different than the one you
> gave in the changelog ?
>
> Its 3 lines, instead of all this pahole noise.
So, you mean this patch only makes sense after my union inet_addr? If
so, I will merge it into my inet_addr patch.
>
> And it would be more logical to put the "unsigned long last_syn_loss" at
> the beginning of the structure, instead after an array of 17 bytes.
>
Agreed.
Thanks!
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Patch net-next] tcp_metrics: rearrange fields to avoid holes
2013-07-31 3:35 ` Joe Perches
@ 2013-07-31 3:40 ` Cong Wang
0 siblings, 0 replies; 12+ messages in thread
From: Cong Wang @ 2013-07-31 3:40 UTC (permalink / raw)
To: Joe Perches
Cc: Eric Dumazet, netdev, David S. Miller, Eric Dumazet,
Yuchung Cheng, Neal Cardwell
On Tue, 2013-07-30 at 20:35 -0700, Joe Perches wrote:
> True, using "unsigned long" instead of "long unsigned int"
> would likely be better too.
"long unsigned int" is the output of pahole, not the source code.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Patch net-next] tcp_metrics: rearrange fields to avoid holes
2013-07-31 3:37 ` Cong Wang
@ 2013-07-31 3:57 ` Eric Dumazet
0 siblings, 0 replies; 12+ messages in thread
From: Eric Dumazet @ 2013-07-31 3:57 UTC (permalink / raw)
To: Cong Wang
Cc: netdev, David S. Miller, Eric Dumazet, Yuchung Cheng,
Neal Cardwell
On Wed, 2013-07-31 at 11:37 +0800, Cong Wang wrote:
> So, you mean this patch only makes sense after my union inet_addr? If
> so, I will merge it into my inet_addr patch.
What about removing the noise from changelog, and give us the true
story ?
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Patch net-next] tcp_metrics: rearrange fields to avoid holes
2013-07-31 3:13 ` Cong Wang
2013-07-31 3:24 ` Eric Dumazet
@ 2013-07-31 6:26 ` David Miller
2013-08-01 2:48 ` Cong Wang
1 sibling, 1 reply; 12+ messages in thread
From: David Miller @ 2013-07-31 6:26 UTC (permalink / raw)
To: amwang; +Cc: eric.dumazet, netdev, edumazet, ycheng, ncardwell
From: Cong Wang <amwang@redhat.com>
Date: Wed, 31 Jul 2013 11:13:22 +0800
> I know saving 8 bytes is not interesting for you, but it is for me,
> since I need some room in struct tcp_metrics_block for union inet_addr.
> With this patch, I don't have to make struct tcp_metrics_block expand to
> 3 cachelines. :)
Cong, please.
Instead of making code accomodate an unnecessarily large "union
inet_addr", make a small version of it that accomodates this use case
and doesn't have the extra fields.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Patch net-next] tcp_metrics: rearrange fields to avoid holes
2013-07-31 6:26 ` David Miller
@ 2013-08-01 2:48 ` Cong Wang
2013-08-01 7:15 ` David Miller
0 siblings, 1 reply; 12+ messages in thread
From: Cong Wang @ 2013-08-01 2:48 UTC (permalink / raw)
To: David Miller; +Cc: eric.dumazet, netdev, edumazet, ycheng, ncardwell
On Tue, 2013-07-30 at 23:26 -0700, David Miller wrote:
> From: Cong Wang <amwang@redhat.com>
> Date: Wed, 31 Jul 2013 11:13:22 +0800
>
> > I know saving 8 bytes is not interesting for you, but it is for me,
> > since I need some room in struct tcp_metrics_block for union inet_addr.
> > With this patch, I don't have to make struct tcp_metrics_block expand to
> > 3 cachelines. :)
>
> Cong, please.
>
> Instead of making code accomodate an unnecessarily large "union
> inet_addr", make a small version of it that accomodates this use case
> and doesn't have the extra fields.
Please teach me how to do that?
The fields not used by inetpeer are sin_port and scope_id etc., and
sin_port is in the middle of sockaddr* structs.
Hmm, maybe just define a new struct by kicking the last field from
struct sockaddr_{in,in6}, so that we can at least shrink 4 bytes.
Except this, I have no idea how to do that.
Thanks!
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Patch net-next] tcp_metrics: rearrange fields to avoid holes
2013-08-01 2:48 ` Cong Wang
@ 2013-08-01 7:15 ` David Miller
2013-08-01 8:13 ` Cong Wang
0 siblings, 1 reply; 12+ messages in thread
From: David Miller @ 2013-08-01 7:15 UTC (permalink / raw)
To: amwang; +Cc: eric.dumazet, netdev, edumazet, ycheng, ncardwell
From: Cong Wang <amwang@redhat.com>
Date: Thu, 01 Aug 2013 10:48:31 +0800
> Please teach me how to do that?
struct inet_addr {
union {
u32 v4;
u32 v6[4];
};
};
ie. exactly what that code is using already.
And it's called called inetpeer_addr, we have it already, there is no
need to make something new.
Making this code use a structure with completely unnecessary and
unused members is pointless and a step backwards.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Patch net-next] tcp_metrics: rearrange fields to avoid holes
2013-08-01 7:15 ` David Miller
@ 2013-08-01 8:13 ` Cong Wang
0 siblings, 0 replies; 12+ messages in thread
From: Cong Wang @ 2013-08-01 8:13 UTC (permalink / raw)
To: David Miller; +Cc: eric.dumazet, netdev, edumazet, ycheng, ncardwell
On Thu, 2013-08-01 at 00:15 -0700, David Miller wrote:
> From: Cong Wang <amwang@redhat.com>
> Date: Thu, 01 Aug 2013 10:48:31 +0800
>
> > Please teach me how to do that?
>
> struct inet_addr {
> union {
> u32 v4;
> u32 v6[4];
> };
> };
>
> ie. exactly what that code is using already.
>
> And it's called called inetpeer_addr, we have it already, there is no
> need to make something new.
>
> Making this code use a structure with completely unnecessary and
> unused members is pointless and a step backwards.
Ah, I was thinking to keep it compatible with sockaddr*, actually this
is indeed unnecessary. I am going to define something like:
struct inet_addr_base {
union {
struct in_addr sin_addr;
struct in6_addr sin6_addr;
};
unsigned short int sin_family;
};
which could used by bridge multicast code too.
Thanks for the hint.
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2013-08-01 8:14 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-07-31 2:48 [Patch net-next] tcp_metrics: rearrange fields to avoid holes Cong Wang
2013-07-31 3:08 ` Eric Dumazet
2013-07-31 3:13 ` Cong Wang
2013-07-31 3:24 ` Eric Dumazet
2013-07-31 3:35 ` Joe Perches
2013-07-31 3:40 ` Cong Wang
2013-07-31 3:37 ` Cong Wang
2013-07-31 3:57 ` Eric Dumazet
2013-07-31 6:26 ` David Miller
2013-08-01 2:48 ` Cong Wang
2013-08-01 7:15 ` David Miller
2013-08-01 8:13 ` Cong Wang
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).