* [PATCH net-2.6.25 0/4] [NET]: Bloat, bloat and more bloat
@ 2008-01-05 13:39 Ilpo Järvinen
2008-01-05 13:39 ` [PATCH 1/4] [NETFILTER]: Kill some supper dupper bloatry Ilpo Järvinen
2008-01-05 14:46 ` [PATCH net-2.6.25 0/4] [NET]: Bloat, bloat and more bloat Arnaldo Carvalho de Melo
0 siblings, 2 replies; 29+ messages in thread
From: Ilpo Järvinen @ 2008-01-05 13:39 UTC (permalink / raw)
To: David Miller; +Cc: netdev, Arnaldo Carvalho de Melo
Hi Dave,
After Arnaldo got codiff's inline instrumentation bugs fixed
(thanks! :-)), I got my .c-inline-bloat-o-meter to power up
reliably after some tweaking and bug fixing on my behalf...
It shows some very high readings every now and then in the
code under net/.
...Aand... we've a sovereign winner, though it was only fifth
on a kernel wide list (arch/ excluded due to number of
reasons) :-/.
Hall of (unquestionable) fame (measured per inline, top 10 under
net/):
-4496 ctnetlink_parse_tuple netfilter/nf_conntrack_netlink.c
-2165 ctnetlink_dump_tuples netfilter/nf_conntrack_netlink.c
-2115 __ip_vs_get_out_rt ipv4/ipvs/ip_vs_xmit.c
-1924 xfrm_audit_helper_pktinfo xfrm/xfrm_state.c
-1799 ctnetlink_parse_tuple_proto netfilter/nf_conntrack_netlink.c
-1268 ctnetlink_parse_tuple_ip netfilter/nf_conntrack_netlink.c
-1093 ctnetlink_exp_dump_expect netfilter/nf_conntrack_netlink.c
-1060 ccid3_update_send_interval dccp/ccids/ccid3.c
-983 ctnetlink_dump_tuples_proto netfilter/nf_conntrack_netlink.c
-827 ctnetlink_exp_dump_tuple netfilter/nf_conntrack_netlink.c
Removing inlines is done iteratively because e.g., uninlining
ctnetlink_parse_tuple affected ..._{proto,ip} prices as well.
i386/gcc (GCC) 4.1.2 20070626 (Red Hat 4.1.2-13)/allyesconfig
except CONFIG_FORCED_INLINING. Tried without some CONFIG.*DEBUG
as well and got slightly better numbers for some functions, yet
the number don't differ enough to be that meaningful, ie., if
there's bloat somewhere, removing DEBUGs won't make it go away.
...After this first aid we're at least below 1k :-).
--
i.
^ permalink raw reply [flat|nested] 29+ messages in thread
* [PATCH 1/4] [NETFILTER]: Kill some supper dupper bloatry
2008-01-05 13:39 [PATCH net-2.6.25 0/4] [NET]: Bloat, bloat and more bloat Ilpo Järvinen
@ 2008-01-05 13:39 ` Ilpo Järvinen
2008-01-05 13:39 ` [PATCH 2/4] [IPVS]: Kill some bloat Ilpo Järvinen
2008-01-06 7:11 ` [PATCH 1/4] [NETFILTER]: Kill some supper dupper bloatry David Miller
2008-01-05 14:46 ` [PATCH net-2.6.25 0/4] [NET]: Bloat, bloat and more bloat Arnaldo Carvalho de Melo
1 sibling, 2 replies; 29+ messages in thread
From: Ilpo Järvinen @ 2008-01-05 13:39 UTC (permalink / raw)
To: David Miller; +Cc: netdev, Arnaldo Carvalho de Melo, Ilpo Järvinen
From: =?ISO-8859-1?q?Ilpo_J=E4rvinen?= <ilpo.jarvinen@helsinki.fi>
/me awards the bloatiest-of-all-net/-.c-code award to
nf_conntrack_netlink.c, congratulations to all the authors :-/!
Hall of (unquestionable) fame (measured per inline, top 10 under
net/):
-4496 ctnetlink_parse_tuple netfilter/nf_conntrack_netlink.c
-2165 ctnetlink_dump_tuples netfilter/nf_conntrack_netlink.c
-2115 __ip_vs_get_out_rt ipv4/ipvs/ip_vs_xmit.c
-1924 xfrm_audit_helper_pktinfo xfrm/xfrm_state.c
-1799 ctnetlink_parse_tuple_proto netfilter/nf_conntrack_netlink.c
-1268 ctnetlink_parse_tuple_ip netfilter/nf_conntrack_netlink.c
-1093 ctnetlink_exp_dump_expect netfilter/nf_conntrack_netlink.c
-1060 void ccid3_update_send_interval dccp/ccids/ccid3.c
-983 ctnetlink_dump_tuples_proto netfilter/nf_conntrack_netlink.c
-827 ctnetlink_exp_dump_tuple netfilter/nf_conntrack_netlink.c
(i386 / gcc (GCC) 4.1.2 20070626 (Red Hat 4.1.2-13) /
allyesconfig except CONFIG_FORCED_INLINING)
...and I left < 200 byte gains as future work item.
After iterative inline removal, I finally have this:
net/netfilter/nf_conntrack_netlink.c:
ctnetlink_exp_fill_info | -1104
ctnetlink_new_expect | -1572
ctnetlink_fill_info | -1303
ctnetlink_new_conntrack | -2230
ctnetlink_get_expect | -341
ctnetlink_del_expect | -352
ctnetlink_expect_event | -1110
ctnetlink_conntrack_event | -1548
ctnetlink_del_conntrack | -729
ctnetlink_get_conntrack | -728
10 functions changed, 11017 bytes removed, diff: -11017
net/netfilter/nf_conntrack_netlink.c:
ctnetlink_parse_tuple | +419
dump_nat_seq_adj | +183
ctnetlink_dump_counters | +166
ctnetlink_dump_tuples | +261
ctnetlink_exp_dump_expect | +633
ctnetlink_change_status | +460
6 functions changed, 2122 bytes added, diff: +2122
net/netfilter/nf_conntrack_netlink.o:
16 functions changed, 2122 bytes added, 11017 bytes removed, diff: -8895
Without a number of CONFIG.*DEBUGs, I got this:
net/netfilter/nf_conntrack_netlink.o:
16 functions changed, 2122 bytes added, 11029 bytes removed, diff: -8907
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
---
net/netfilter/nf_conntrack_netlink.c | 12 ++++++------
1 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c
index d93d58d..38141f1 100644
--- a/net/netfilter/nf_conntrack_netlink.c
+++ b/net/netfilter/nf_conntrack_netlink.c
@@ -95,7 +95,7 @@ nla_put_failure:
return -1;
}
-static inline int
+static int
ctnetlink_dump_tuples(struct sk_buff *skb,
const struct nf_conntrack_tuple *tuple)
{
@@ -205,7 +205,7 @@ nla_put_failure:
}
#ifdef CONFIG_NF_CT_ACCT
-static inline int
+static int
ctnetlink_dump_counters(struct sk_buff *skb, const struct nf_conn *ct,
enum ip_conntrack_dir dir)
{
@@ -284,7 +284,7 @@ nla_put_failure:
}
#ifdef CONFIG_NF_NAT_NEEDED
-static inline int
+static int
dump_nat_seq_adj(struct sk_buff *skb, const struct nf_nat_seq *natseq, int type)
{
struct nlattr *nest_parms;
@@ -648,7 +648,7 @@ ctnetlink_parse_tuple_proto(struct nlattr *attr,
return ret;
}
-static inline int
+static int
ctnetlink_parse_tuple(struct nlattr *cda[], struct nf_conntrack_tuple *tuple,
enum ctattr_tuple type, u_int8_t l3num)
{
@@ -888,7 +888,7 @@ out:
return err;
}
-static inline int
+static int
ctnetlink_change_status(struct nf_conn *ct, struct nlattr *cda[])
{
unsigned long d;
@@ -1349,7 +1349,7 @@ nla_put_failure:
return -1;
}
-static inline int
+static int
ctnetlink_exp_dump_expect(struct sk_buff *skb,
const struct nf_conntrack_expect *exp)
{
--
1.5.0.6
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 2/4] [IPVS]: Kill some bloat
2008-01-05 13:39 ` [PATCH 1/4] [NETFILTER]: Kill some supper dupper bloatry Ilpo Järvinen
@ 2008-01-05 13:39 ` Ilpo Järvinen
2008-01-05 13:39 ` [PATCH 3/4] [XFRM]: " Ilpo Järvinen
2008-01-06 7:12 ` [PATCH 2/4] [IPVS]: " David Miller
2008-01-06 7:11 ` [PATCH 1/4] [NETFILTER]: Kill some supper dupper bloatry David Miller
1 sibling, 2 replies; 29+ messages in thread
From: Ilpo Järvinen @ 2008-01-05 13:39 UTC (permalink / raw)
To: David Miller; +Cc: netdev, Arnaldo Carvalho de Melo, Ilpo Järvinen
From: =?ISO-8859-1?q?Ilpo_J=E4rvinen?= <ilpo.jarvinen@helsinki.fi>
net/ipv4/ipvs/ip_vs_xmit.c:
ip_vs_icmp_xmit | -638
ip_vs_tunnel_xmit | -674
ip_vs_nat_xmit | -716
ip_vs_dr_xmit | -682
4 functions changed, 2710 bytes removed, diff: -2710
net/ipv4/ipvs/ip_vs_xmit.c:
__ip_vs_get_out_rt | +595
1 function changed, 595 bytes added, diff: +595
net/ipv4/ipvs/ip_vs_xmit.o:
5 functions changed, 595 bytes added, 2710 bytes removed, diff: -2115
Without some CONFIG.*DEBUGs:
net/ipv4/ipvs/ip_vs_xmit.o:
5 functions changed, 383 bytes added, 1513 bytes removed, diff: -1130
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
---
net/ipv4/ipvs/ip_vs_xmit.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/net/ipv4/ipvs/ip_vs_xmit.c b/net/ipv4/ipvs/ip_vs_xmit.c
index 1e96bf8..8436bf8 100644
--- a/net/ipv4/ipvs/ip_vs_xmit.c
+++ b/net/ipv4/ipvs/ip_vs_xmit.c
@@ -59,7 +59,7 @@ __ip_vs_dst_check(struct ip_vs_dest *dest, u32 rtos, u32 cookie)
return dst;
}
-static inline struct rtable *
+static struct rtable *
__ip_vs_get_out_rt(struct ip_vs_conn *cp, u32 rtos)
{
struct rtable *rt; /* Route to the other host */
--
1.5.0.6
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 3/4] [XFRM]: Kill some bloat
2008-01-05 13:39 ` [PATCH 2/4] [IPVS]: Kill some bloat Ilpo Järvinen
@ 2008-01-05 13:39 ` Ilpo Järvinen
2008-01-05 13:39 ` [PATCH 4/4] [CCID3]: " Ilpo Järvinen
` (2 more replies)
2008-01-06 7:12 ` [PATCH 2/4] [IPVS]: " David Miller
1 sibling, 3 replies; 29+ messages in thread
From: Ilpo Järvinen @ 2008-01-05 13:39 UTC (permalink / raw)
To: David Miller; +Cc: netdev, Arnaldo Carvalho de Melo, Ilpo Järvinen
From: =?ISO-8859-1?q?Ilpo_J=E4rvinen?= <ilpo.jarvinen@helsinki.fi>
net/xfrm/xfrm_state.c:
xfrm_audit_state_delete | -589
xfrm_replay_check | -542
xfrm_audit_state_icvfail | -520
xfrm_audit_state_add | -589
xfrm_audit_state_replay_overflow | -523
xfrm_audit_state_notfound_simple | -509
xfrm_audit_state_notfound | -521
7 functions changed, 3793 bytes removed, diff: -3793
net/xfrm/xfrm_state.c:
xfrm_audit_helper_pktinfo | +522
xfrm_audit_helper_sainfo | +598
2 functions changed, 1120 bytes added, diff: +1120
net/xfrm/xfrm_state.o:
9 functions changed, 1120 bytes added, 3793 bytes removed, diff: -2673
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
---
net/xfrm/xfrm_state.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
index 4dec655..81b0fce 100644
--- a/net/xfrm/xfrm_state.c
+++ b/net/xfrm/xfrm_state.c
@@ -2008,8 +2008,8 @@ void __init xfrm_state_init(void)
}
#ifdef CONFIG_AUDITSYSCALL
-static inline void xfrm_audit_helper_sainfo(struct xfrm_state *x,
- struct audit_buffer *audit_buf)
+static void xfrm_audit_helper_sainfo(struct xfrm_state *x,
+ struct audit_buffer *audit_buf)
{
struct xfrm_sec_ctx *ctx = x->security;
u32 spi = ntohl(x->id.spi);
@@ -2036,8 +2036,8 @@ static inline void xfrm_audit_helper_sainfo(struct xfrm_state *x,
audit_log_format(audit_buf, " spi=%u(0x%x)", spi, spi);
}
-static inline void xfrm_audit_helper_pktinfo(struct sk_buff *skb, u16 family,
- struct audit_buffer *audit_buf)
+static void xfrm_audit_helper_pktinfo(struct sk_buff *skb, u16 family,
+ struct audit_buffer *audit_buf)
{
struct iphdr *iph4;
struct ipv6hdr *iph6;
--
1.5.0.6
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 4/4] [CCID3]: Kill some bloat
2008-01-05 13:39 ` [PATCH 3/4] [XFRM]: " Ilpo Järvinen
@ 2008-01-05 13:39 ` Ilpo Järvinen
2008-01-05 14:44 ` Arnaldo Carvalho de Melo
2008-01-06 7:13 ` David Miller
2008-01-06 0:29 ` [PATCH 3/4] [XFRM]: " Herbert Xu
2008-01-06 7:13 ` David Miller
2 siblings, 2 replies; 29+ messages in thread
From: Ilpo Järvinen @ 2008-01-05 13:39 UTC (permalink / raw)
To: David Miller; +Cc: netdev, Arnaldo Carvalho de Melo, Ilpo Järvinen
From: =?ISO-8859-1?q?Ilpo_J=E4rvinen?= <ilpo.jarvinen@helsinki.fi>
Without a number of CONFIG.*DEBUG:
net/dccp/ccids/ccid3.c:
ccid3_hc_tx_update_x | -170
ccid3_hc_tx_packet_sent | -175
ccid3_hc_tx_packet_recv | -169
ccid3_hc_tx_no_feedback_timer | -192
ccid3_hc_tx_send_packet | -144
5 functions changed, 850 bytes removed, diff: -850
net/dccp/ccids/ccid3.c:
ccid3_update_send_interval | +191
1 function changed, 191 bytes added, diff: +191
net/dccp/ccids/ccid3.o:
6 functions changed, 191 bytes added, 850 bytes removed, diff: -659
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
---
net/dccp/ccids/ccid3.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/net/dccp/ccids/ccid3.c b/net/dccp/ccids/ccid3.c
index 00b5f11..8a817dd 100644
--- a/net/dccp/ccids/ccid3.c
+++ b/net/dccp/ccids/ccid3.c
@@ -97,7 +97,7 @@ static inline u64 rfc3390_initial_rate(struct sock *sk)
/*
* Recalculate t_ipi and delta (should be called whenever X changes)
*/
-static inline void ccid3_update_send_interval(struct ccid3_hc_tx_sock *hctx)
+static void ccid3_update_send_interval(struct ccid3_hc_tx_sock *hctx)
{
/* Calculate new t_ipi = s / X_inst (X_inst is in 64 * bytes/second) */
hctx->ccid3hctx_t_ipi = scaled_div32(((u64)hctx->ccid3hctx_s) << 6,
--
1.5.0.6
^ permalink raw reply related [flat|nested] 29+ messages in thread
* Re: [PATCH 4/4] [CCID3]: Kill some bloat
2008-01-05 13:39 ` [PATCH 4/4] [CCID3]: " Ilpo Järvinen
@ 2008-01-05 14:44 ` Arnaldo Carvalho de Melo
2008-01-06 7:13 ` David Miller
1 sibling, 0 replies; 29+ messages in thread
From: Arnaldo Carvalho de Melo @ 2008-01-05 14:44 UTC (permalink / raw)
To: Ilpo Järvinen; +Cc: David Miller, netdev
Em Sat, Jan 05, 2008 at 03:39:08PM +0200, Ilpo Järvinen escreveu:
> From: =?ISO-8859-1?q?Ilpo_J=E4rvinen?= <ilpo.jarvinen@helsinki.fi>
>
> Without a number of CONFIG.*DEBUG:
>
> net/dccp/ccids/ccid3.c:
> ccid3_hc_tx_update_x | -170
> ccid3_hc_tx_packet_sent | -175
> ccid3_hc_tx_packet_recv | -169
> ccid3_hc_tx_no_feedback_timer | -192
> ccid3_hc_tx_send_packet | -144
> 5 functions changed, 850 bytes removed, diff: -850
>
> net/dccp/ccids/ccid3.c:
> ccid3_update_send_interval | +191
> 1 function changed, 191 bytes added, diff: +191
>
> net/dccp/ccids/ccid3.o:
> 6 functions changed, 191 bytes added, 850 bytes removed, diff: -659
>
> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
Acked-by: Arnaldo Carvalho de Melo <acme@redhat.com>
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH net-2.6.25 0/4] [NET]: Bloat, bloat and more bloat
2008-01-05 13:39 [PATCH net-2.6.25 0/4] [NET]: Bloat, bloat and more bloat Ilpo Järvinen
2008-01-05 13:39 ` [PATCH 1/4] [NETFILTER]: Kill some supper dupper bloatry Ilpo Järvinen
@ 2008-01-05 14:46 ` Arnaldo Carvalho de Melo
2008-01-09 11:35 ` Ilpo Järvinen
1 sibling, 1 reply; 29+ messages in thread
From: Arnaldo Carvalho de Melo @ 2008-01-05 14:46 UTC (permalink / raw)
To: Ilpo Järvinen; +Cc: David Miller, netdev
Em Sat, Jan 05, 2008 at 03:39:04PM +0200, Ilpo Järvinen escreveu:
> Hi Dave,
>
> After Arnaldo got codiff's inline instrumentation bugs fixed
> (thanks! :-)), I got my .c-inline-bloat-o-meter to power up
> reliably after some tweaking and bug fixing on my behalf...
> It shows some very high readings every now and then in the
> code under net/.
Thank you for the reports and for showing how these tools can be put to
good use!
If you have any further suggestions on how to make codiff and the
dwarves to be of more help or find any other bug, please let me know.
- Arnaldo
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 3/4] [XFRM]: Kill some bloat
2008-01-05 13:39 ` [PATCH 3/4] [XFRM]: " Ilpo Järvinen
2008-01-05 13:39 ` [PATCH 4/4] [CCID3]: " Ilpo Järvinen
@ 2008-01-06 0:29 ` Herbert Xu
2008-01-06 3:25 ` Paul Moore
` (2 more replies)
2008-01-06 7:13 ` David Miller
2 siblings, 3 replies; 29+ messages in thread
From: Herbert Xu @ 2008-01-06 0:29 UTC (permalink / raw)
To: Ilpo J??rvinen; +Cc: davem, netdev, acme, ilpo.jarvinen, paul.moore, latten
Ilpo J??rvinen <ilpo.jarvinen@helsinki.fi> wrote:
>
> Signed-off-by: Ilpo J??rvinen <ilpo.jarvinen@helsinki.fi>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
> #ifdef CONFIG_AUDITSYSCALL
> -static inline void xfrm_audit_helper_sainfo(struct xfrm_state *x,
> - struct audit_buffer *audit_buf)
> +static void xfrm_audit_helper_sainfo(struct xfrm_state *x,
> + struct audit_buffer *audit_buf)
We should never use inline except when it's on the fast path and this
is definitely not a fast path. If a function ends up being called
just once the compiler will most likely inline it anyway, making the
use of the keyword inline redundant.
Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 3/4] [XFRM]: Kill some bloat
2008-01-06 0:29 ` [PATCH 3/4] [XFRM]: " Herbert Xu
@ 2008-01-06 3:25 ` Paul Moore
2008-01-06 7:16 ` David Miller
2008-01-07 8:21 ` Ilpo Järvinen
2 siblings, 0 replies; 29+ messages in thread
From: Paul Moore @ 2008-01-06 3:25 UTC (permalink / raw)
To: Herbert Xu, Ilpo J??rvinen; +Cc: davem, netdev, acme, latten
On Saturday 05 January 2008 7:29:35 pm Herbert Xu wrote:
> Ilpo J??rvinen <ilpo.jarvinen@helsinki.fi> wrote:
> > Signed-off-by: Ilpo J??rvinen <ilpo.jarvinen@helsinki.fi>
>
> Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
>
> > #ifdef CONFIG_AUDITSYSCALL
> > -static inline void xfrm_audit_helper_sainfo(struct xfrm_state *x,
> > - struct audit_buffer
> > *audit_buf) +static void xfrm_audit_helper_sainfo(struct xfrm_state *x,
> > + struct audit_buffer *audit_buf)
>
> We should never use inline except when it's on the fast path and this
> is definitely not a fast path. If a function ends up being called
> just once the compiler will most likely inline it anyway, making the
> use of the keyword inline redundant.
For the record the inline was there before the audit patch I submitted ...
then again, I suppose I could have removed the inline while I was at it, I
just didn't notice it. Sorry about that.
Thanks for fixing this guys.
--
paul moore
linux security @ hp
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 1/4] [NETFILTER]: Kill some supper dupper bloatry
2008-01-05 13:39 ` [PATCH 1/4] [NETFILTER]: Kill some supper dupper bloatry Ilpo Järvinen
2008-01-05 13:39 ` [PATCH 2/4] [IPVS]: Kill some bloat Ilpo Järvinen
@ 2008-01-06 7:11 ` David Miller
1 sibling, 0 replies; 29+ messages in thread
From: David Miller @ 2008-01-06 7:11 UTC (permalink / raw)
To: ilpo.jarvinen; +Cc: netdev, acme
From: "Ilpo_Järvinen" <ilpo.jarvinen@helsinki.fi>
Date: Sat, 5 Jan 2008 15:39:05 +0200
> 10 functions changed, 11017 bytes removed, diff: -11017
...
> 6 functions changed, 2122 bytes added, diff: +2122
Yikes, applied :-)
Thanks Ilpo.
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 2/4] [IPVS]: Kill some bloat
2008-01-05 13:39 ` [PATCH 2/4] [IPVS]: Kill some bloat Ilpo Järvinen
2008-01-05 13:39 ` [PATCH 3/4] [XFRM]: " Ilpo Järvinen
@ 2008-01-06 7:12 ` David Miller
1 sibling, 0 replies; 29+ messages in thread
From: David Miller @ 2008-01-06 7:12 UTC (permalink / raw)
To: ilpo.jarvinen; +Cc: netdev, acme
From: "Ilpo_Järvinen" <ilpo.jarvinen@helsinki.fi>
Date: Sat, 5 Jan 2008 15:39:06 +0200
> net/ipv4/ipvs/ip_vs_xmit.c:
> ip_vs_icmp_xmit | -638
> ip_vs_tunnel_xmit | -674
> ip_vs_nat_xmit | -716
> ip_vs_dr_xmit | -682
> 4 functions changed, 2710 bytes removed, diff: -2710
>
> net/ipv4/ipvs/ip_vs_xmit.c:
> __ip_vs_get_out_rt | +595
> 1 function changed, 595 bytes added, diff: +595
>
> net/ipv4/ipvs/ip_vs_xmit.o:
> 5 functions changed, 595 bytes added, 2710 bytes removed, diff: -2115
>
> Without some CONFIG.*DEBUGs:
>
> net/ipv4/ipvs/ip_vs_xmit.o:
> 5 functions changed, 383 bytes added, 1513 bytes removed, diff: -1130
>
> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
Applied, thanks.
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 3/4] [XFRM]: Kill some bloat
2008-01-05 13:39 ` [PATCH 3/4] [XFRM]: " Ilpo Järvinen
2008-01-05 13:39 ` [PATCH 4/4] [CCID3]: " Ilpo Järvinen
2008-01-06 0:29 ` [PATCH 3/4] [XFRM]: " Herbert Xu
@ 2008-01-06 7:13 ` David Miller
2 siblings, 0 replies; 29+ messages in thread
From: David Miller @ 2008-01-06 7:13 UTC (permalink / raw)
To: ilpo.jarvinen; +Cc: netdev, acme
From: "Ilpo_Järvinen" <ilpo.jarvinen@helsinki.fi>
Date: Sat, 5 Jan 2008 15:39:07 +0200
> From: =?ISO-8859-1?q?Ilpo_J=E4rvinen?= <ilpo.jarvinen@helsinki.fi>
>
> net/xfrm/xfrm_state.c:
> xfrm_audit_state_delete | -589
> xfrm_replay_check | -542
> xfrm_audit_state_icvfail | -520
> xfrm_audit_state_add | -589
> xfrm_audit_state_replay_overflow | -523
> xfrm_audit_state_notfound_simple | -509
> xfrm_audit_state_notfound | -521
> 7 functions changed, 3793 bytes removed, diff: -3793
>
> net/xfrm/xfrm_state.c:
> xfrm_audit_helper_pktinfo | +522
> xfrm_audit_helper_sainfo | +598
> 2 functions changed, 1120 bytes added, diff: +1120
>
> net/xfrm/xfrm_state.o:
> 9 functions changed, 1120 bytes added, 3793 bytes removed, diff: -2673
>
> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
Applied.
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 4/4] [CCID3]: Kill some bloat
2008-01-05 13:39 ` [PATCH 4/4] [CCID3]: " Ilpo Järvinen
2008-01-05 14:44 ` Arnaldo Carvalho de Melo
@ 2008-01-06 7:13 ` David Miller
1 sibling, 0 replies; 29+ messages in thread
From: David Miller @ 2008-01-06 7:13 UTC (permalink / raw)
To: ilpo.jarvinen; +Cc: netdev, acme
From: "Ilpo_Järvinen" <ilpo.jarvinen@helsinki.fi>
Date: Sat, 5 Jan 2008 15:39:08 +0200
> From: =?ISO-8859-1?q?Ilpo_J=E4rvinen?= <ilpo.jarvinen@helsinki.fi>
>
> Without a number of CONFIG.*DEBUG:
>
> net/dccp/ccids/ccid3.c:
> ccid3_hc_tx_update_x | -170
> ccid3_hc_tx_packet_sent | -175
> ccid3_hc_tx_packet_recv | -169
> ccid3_hc_tx_no_feedback_timer | -192
> ccid3_hc_tx_send_packet | -144
> 5 functions changed, 850 bytes removed, diff: -850
>
> net/dccp/ccids/ccid3.c:
> ccid3_update_send_interval | +191
> 1 function changed, 191 bytes added, diff: +191
>
> net/dccp/ccids/ccid3.o:
> 6 functions changed, 191 bytes added, 850 bytes removed, diff: -659
>
> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
Also applied, thanks.
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 3/4] [XFRM]: Kill some bloat
2008-01-06 0:29 ` [PATCH 3/4] [XFRM]: " Herbert Xu
2008-01-06 3:25 ` Paul Moore
@ 2008-01-06 7:16 ` David Miller
2008-01-07 7:13 ` Ilpo Järvinen
2008-01-08 0:23 ` Andi Kleen
2008-01-07 8:21 ` Ilpo Järvinen
2 siblings, 2 replies; 29+ messages in thread
From: David Miller @ 2008-01-06 7:16 UTC (permalink / raw)
To: herbert; +Cc: ilpo.jarvinen, netdev, acme, paul.moore, latten
From: Herbert Xu <herbert@gondor.apana.org.au>
Date: Sun, 06 Jan 2008 11:29:35 +1100
> We should never use inline except when it's on the fast path and this
> is definitely not a fast path. If a function ends up being called
> just once the compiler will most likely inline it anyway, making the
> use of the keyword inline redundant.
Similarly I question just about any inline usage at all in *.c files
these days.
I even would discourage it's use for fast-path cases as well.
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 3/4] [XFRM]: Kill some bloat
2008-01-06 7:16 ` David Miller
@ 2008-01-07 7:13 ` Ilpo Järvinen
2008-01-07 7:32 ` Herbert Xu
2008-01-08 0:23 ` Andi Kleen
1 sibling, 1 reply; 29+ messages in thread
From: Ilpo Järvinen @ 2008-01-07 7:13 UTC (permalink / raw)
To: David Miller
Cc: Herbert Xu, Netdev, Arnaldo Carvalho de Melo, paul.moore, latten
On Sat, 5 Jan 2008, David Miller wrote:
> From: Herbert Xu <herbert@gondor.apana.org.au>
> Date: Sun, 06 Jan 2008 11:29:35 +1100
>
> > We should never use inline except when it's on the fast path and this
> > is definitely not a fast path. If a function ends up being called
> > just once the compiler will most likely inline it anyway, making the
> > use of the keyword inline redundant.
>
> Similarly I question just about any inline usage at all in *.c files
> these days.
>
> I even would discourage it's use for fast-path cases as well.
There still seems to be good candidates for inline in *.c files, in worst
case I had +172 due to inline removed and ~60 are on +10-+90 range with
my gcc, later gccs might do better but I definately would just blindly
remove them all. Here's the other end of the list:
+35 static inline hci_encrypt_change_evt net/bluetooth/hci_event.c
+36 static __inline__ tcp_in_window net/ipv4/tcp_minisocks.c
+38 static inline hci_conn_complete_evt net/bluetooth/hci_event.c
+38 static inline hci_conn_request_evt net/bluetooth/hci_event.c
+42 static inline gred_wred_mode net/sched/sch_gred.c
+45 static inline secpath_has_nontransport net/xfrm/xfrm_policy.c
+52 static inline bool port_match net/netfilter/xt_tcpudp.c
+67 static inline dn_check_idf net/decnet/dn_nsp_in.c
+90 static inline __ieee80211_queue_stopped net/mac80211/tx.c
+172 static inline sctp_chunk_length_valid net/sctp/sm_statefuns.c
--
i.
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 3/4] [XFRM]: Kill some bloat
2008-01-07 7:13 ` Ilpo Järvinen
@ 2008-01-07 7:32 ` Herbert Xu
0 siblings, 0 replies; 29+ messages in thread
From: Herbert Xu @ 2008-01-07 7:32 UTC (permalink / raw)
To: Ilpo Järvinen
Cc: David Miller, Netdev, Arnaldo Carvalho de Melo, paul.moore,
latten
On Mon, Jan 07, 2008 at 09:13:22AM +0200, Ilpo Järvinen wrote:
>
> There still seems to be good candidates for inline in *.c files, in worst
> case I had +172 due to inline removed and ~60 are on +10-+90 range with
> my gcc, later gccs might do better but I definately would just blindly
> remove them all. Here's the other end of the list:
Right. If the inline helps the compiler perform code size optimisations
that it otherwise couldn't then it might be worthwhile.
So when in doubt, check the assembly :)
Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 3/4] [XFRM]: Kill some bloat
2008-01-06 0:29 ` [PATCH 3/4] [XFRM]: " Herbert Xu
2008-01-06 3:25 ` Paul Moore
2008-01-06 7:16 ` David Miller
@ 2008-01-07 8:21 ` Ilpo Järvinen
2008-01-07 10:02 ` Herbert Xu
2 siblings, 1 reply; 29+ messages in thread
From: Ilpo Järvinen @ 2008-01-07 8:21 UTC (permalink / raw)
To: Herbert Xu
Cc: David Miller, Netdev, Arnaldo Carvalho de Melo, paul.moore,
latten
On Sun, 6 Jan 2008, Herbert Xu wrote:
> is definitely not a fast path. If a function ends up being called
> just once the compiler will most likely inline it anyway, making the
> use of the keyword inline redundant.
Unexpected enough, even this logic seems to fail in a way with my gcc, I'm
yet to study it closer but it seems to me that e.g., uninlining only once
called tcp_fastretrans_alert is worth of at least 100 bytes (note that
it's not inlined by us, gcc did it all by itself)! Otherwise I'd fail to
understand why I got -270 bytes from uninlining tcp_moderate_cwnd which is
only 57 bytes as unlined with three call sites.
net/ipv4/tcp_input.c:
tcp_undo_cwr | -48
tcp_try_undo_recovery | -55
tcp_ack | -2941
3 functions changed, 3044 bytes removed, diff: -3044
net/ipv4/tcp_input.c:
tcp_moderate_cwnd | +57
tcp_fastretrans_alert | +2717
2 functions changed, 2774 bytes added, diff: +2774
net/ipv4/tcp_input.o:
5 functions changed, 2774 bytes added, 3044 bytes removed, diff: -270
I'll probably force uninlining of it without tcp_moderate_cwnd noise and
try a number of gcc versions.
--
i.
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 3/4] [XFRM]: Kill some bloat
2008-01-07 8:21 ` Ilpo Järvinen
@ 2008-01-07 10:02 ` Herbert Xu
0 siblings, 0 replies; 29+ messages in thread
From: Herbert Xu @ 2008-01-07 10:02 UTC (permalink / raw)
To: Ilpo Järvinen
Cc: David Miller, Netdev, Arnaldo Carvalho de Melo, paul.moore,
latten
On Mon, Jan 07, 2008 at 10:21:47AM +0200, Ilpo Järvinen wrote:
>
> Unexpected enough, even this logic seems to fail in a way with my gcc, I'm
> yet to study it closer but it seems to me that e.g., uninlining only once
> called tcp_fastretrans_alert is worth of at least 100 bytes (note that
> it's not inlined by us, gcc did it all by itself)! Otherwise I'd fail to
> understand why I got -270 bytes from uninlining tcp_moderate_cwnd which is
> only 57 bytes as unlined with three call sites.
Yeah I've studied this effect over the years in my maintainence of
the dash shell where size is paramount :)
On x86-32 due to the scarcity of registers local variables often end
up on the stack. In that case gcc will usually refer to them via %ebp
or %esp. It just so happens that if the offset is within 128 bytes
of the base register then the instruction can encode the offset with
just a single byte. However, if it exceeds 128 bytes the instruction
will take 4 bytes to encode the offset.
Since bigger functions are more likely to go over that threshold,
this explains some instances where uninlining ends up being bigger.
There are other similar issues, such as the branch offset which also
goes from 1 byte to 4 when you go over 128 bytes.
Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 3/4] [XFRM]: Kill some bloat
2008-01-06 7:16 ` David Miller
2008-01-07 7:13 ` Ilpo Järvinen
@ 2008-01-08 0:23 ` Andi Kleen
2008-01-08 1:54 ` David Miller
2008-01-08 10:57 ` Ilpo Järvinen
1 sibling, 2 replies; 29+ messages in thread
From: Andi Kleen @ 2008-01-08 0:23 UTC (permalink / raw)
To: David Miller; +Cc: herbert, ilpo.jarvinen, netdev, acme, paul.moore, latten
David Miller <davem@davemloft.net> writes:
> Similarly I question just about any inline usage at all in *.c files
Don't forget the .h files. Especially a lot of stuff in tcp.h should
be probably in some .c file and not be inline.
-Andi
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 3/4] [XFRM]: Kill some bloat
2008-01-08 0:23 ` Andi Kleen
@ 2008-01-08 1:54 ` David Miller
2008-01-08 2:05 ` Andi Kleen
2008-01-08 10:57 ` Ilpo Järvinen
1 sibling, 1 reply; 29+ messages in thread
From: David Miller @ 2008-01-08 1:54 UTC (permalink / raw)
To: andi; +Cc: herbert, ilpo.jarvinen, netdev, acme, paul.moore, latten
From: Andi Kleen <andi@firstfloor.org>
Date: Tue, 08 Jan 2008 01:23:11 +0100
> David Miller <davem@davemloft.net> writes:
>
> > Similarly I question just about any inline usage at all in *.c files
>
> Don't forget the .h files. Especially a lot of stuff in tcp.h should
> be probably in some .c file and not be inline.
I explicitly left them out.
Most of them are abstractions of common 2 or 3 instruction
calculations, and thus should stay inline.
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 3/4] [XFRM]: Kill some bloat
2008-01-08 1:54 ` David Miller
@ 2008-01-08 2:05 ` Andi Kleen
2008-01-08 2:08 ` [PATCH 3/4] [XFRM]: Kill some bloat II Andi Kleen
2008-01-08 3:37 ` [PATCH 3/4] [XFRM]: Kill some bloat David Miller
0 siblings, 2 replies; 29+ messages in thread
From: Andi Kleen @ 2008-01-08 2:05 UTC (permalink / raw)
To: David Miller
Cc: andi, herbert, ilpo.jarvinen, netdev, acme, paul.moore, latten
On Mon, Jan 07, 2008 at 05:54:58PM -0800, David Miller wrote:
> From: Andi Kleen <andi@firstfloor.org>
> Date: Tue, 08 Jan 2008 01:23:11 +0100
>
> > David Miller <davem@davemloft.net> writes:
> >
> > > Similarly I question just about any inline usage at all in *.c files
> >
> > Don't forget the .h files. Especially a lot of stuff in tcp.h should
> > be probably in some .c file and not be inline.
>
> I explicitly left them out.
>
> Most of them are abstractions of common 2 or 3 instruction
> calculations, and thus should stay inline.
Definitely not in tcp.h. It has quite a lot of very long functions, of
which very few really need to be inline: (AFAIK the only one where
it makes really sense is tcp_set_state due to constant evaluation;
although I never quite understood why the callers just didn't
call explicit functions to do these actions)
% awk ' { line++ } ; /^{/ { start = line } ; /^}/ { n++; r += line-start-2; } ; END { print r/n }' < include/net/tcp.h
9.48889
The average function length is 9 lines.
-Andi
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 3/4] [XFRM]: Kill some bloat II
2008-01-08 2:05 ` Andi Kleen
@ 2008-01-08 2:08 ` Andi Kleen
2008-01-08 3:37 ` [PATCH 3/4] [XFRM]: Kill some bloat David Miller
1 sibling, 0 replies; 29+ messages in thread
From: Andi Kleen @ 2008-01-08 2:08 UTC (permalink / raw)
To: Andi Kleen
Cc: David Miller, herbert, ilpo.jarvinen, netdev, acme, paul.moore,
latten
> % awk ' { line++ } ; /^{/ { start = line } ; /^}/ { n++; r += line-start-2; } ; END { print r/n }' < include/net/tcp.h
> 9.48889
>
> The average function length is 9 lines.
Actually 8 -- the awk hack had a off by one. Still too long.
-Andi
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 3/4] [XFRM]: Kill some bloat
2008-01-08 2:05 ` Andi Kleen
2008-01-08 2:08 ` [PATCH 3/4] [XFRM]: Kill some bloat II Andi Kleen
@ 2008-01-08 3:37 ` David Miller
2008-01-08 5:00 ` Andi Kleen
1 sibling, 1 reply; 29+ messages in thread
From: David Miller @ 2008-01-08 3:37 UTC (permalink / raw)
To: andi; +Cc: herbert, ilpo.jarvinen, netdev, acme, paul.moore, latten
From: Andi Kleen <andi@firstfloor.org>
Date: Tue, 8 Jan 2008 03:05:29 +0100
> On Mon, Jan 07, 2008 at 05:54:58PM -0800, David Miller wrote:
> > I explicitly left them out.
> >
> > Most of them are abstractions of common 2 or 3 instruction
> > calculations, and thus should stay inline.
>
> Definitely not in tcp.h. It has quite a lot of very long functions, of
> which very few really need to be inline: (AFAIK the only one where
> it makes really sense is tcp_set_state due to constant evaluation;
> although I never quite understood why the callers just didn't
> call explicit functions to do these actions)
>
> % awk ' { line++ } ; /^{/ { start = line } ; /^}/ { n++; r += line-start-2; } ; END { print r/n }' < include/net/tcp.h
> 9.48889
>
> The average function length is 9 lines.
The vast majority of them are one, two, and three liners.
There are about 4 or 5 inlines in there are in fact large and perhaps
should be removed, and these puff up your average.
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 3/4] [XFRM]: Kill some bloat
2008-01-08 3:37 ` [PATCH 3/4] [XFRM]: Kill some bloat David Miller
@ 2008-01-08 5:00 ` Andi Kleen
2008-01-08 5:10 ` David Miller
0 siblings, 1 reply; 29+ messages in thread
From: Andi Kleen @ 2008-01-08 5:00 UTC (permalink / raw)
To: David Miller
Cc: andi, herbert, ilpo.jarvinen, netdev, acme, paul.moore, latten
On Mon, Jan 07, 2008 at 07:37:00PM -0800, David Miller wrote:
> From: Andi Kleen <andi@firstfloor.org>
> Date: Tue, 8 Jan 2008 03:05:29 +0100
>
> > On Mon, Jan 07, 2008 at 05:54:58PM -0800, David Miller wrote:
> > > I explicitly left them out.
> > >
> > > Most of them are abstractions of common 2 or 3 instruction
> > > calculations, and thus should stay inline.
> >
> > Definitely not in tcp.h. It has quite a lot of very long functions, of
> > which very few really need to be inline: (AFAIK the only one where
> > it makes really sense is tcp_set_state due to constant evaluation;
> > although I never quite understood why the callers just didn't
> > call explicit functions to do these actions)
> >
> > % awk ' { line++ } ; /^{/ { start = line } ; /^}/ { n++; r += line-start-2; } ; END { print r/n }' < include/net/tcp.h
> > 9.48889
> >
> > The average function length is 9 lines.
>
> The vast majority of them are one, two, and three liners.
% awk ' { line++ } ; /^{/ { total++; start = line } ; /^}/ { len=line-start-3; if (len > 4) l++; if (len >= 10) k++; } ; END { print total, l, l/total, k, k/total }' < include/net/tcp.h
68 28 0.411765 20 0.294118
41% are over 4 lines, 29% are >= 10 lines.
-Andi
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 3/4] [XFRM]: Kill some bloat
2008-01-08 5:00 ` Andi Kleen
@ 2008-01-08 5:10 ` David Miller
2008-01-08 10:48 ` Ilpo Järvinen
0 siblings, 1 reply; 29+ messages in thread
From: David Miller @ 2008-01-08 5:10 UTC (permalink / raw)
To: andi; +Cc: herbert, ilpo.jarvinen, netdev, acme, paul.moore, latten
From: Andi Kleen <andi@firstfloor.org>
Date: Tue, 8 Jan 2008 06:00:07 +0100
> On Mon, Jan 07, 2008 at 07:37:00PM -0800, David Miller wrote:
> > The vast majority of them are one, two, and three liners.
>
> % awk ' { line++ } ; /^{/ { total++; start = line } ; /^}/ { len=line-start-3; if (len > 4) l++; if (len >= 10) k++; } ; END { print total, l, l/total, k, k/total }' < include/net/tcp.h
> 68 28 0.411765 20 0.294118
>
> 41% are over 4 lines, 29% are >= 10 lines.
Take out the comments and whitespace lines, your script is
too simplistic.
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 3/4] [XFRM]: Kill some bloat
2008-01-08 5:10 ` David Miller
@ 2008-01-08 10:48 ` Ilpo Järvinen
2008-01-10 13:53 ` Ilpo Järvinen
0 siblings, 1 reply; 29+ messages in thread
From: Ilpo Järvinen @ 2008-01-08 10:48 UTC (permalink / raw)
To: David Miller
Cc: andi, herbert, ilpo.jarvinen, netdev, acme, paul.moore, latten
On Mon, 7 Jan 2008, David Miller wrote:
> From: Andi Kleen <andi@firstfloor.org>
> Date: Tue, 8 Jan 2008 06:00:07 +0100
>
> > On Mon, Jan 07, 2008 at 07:37:00PM -0800, David Miller wrote:
> > > The vast majority of them are one, two, and three liners.
> >
> > % awk ' { line++ } ; /^{/ { total++; start = line } ; /^}/ { len=line-start-3; if (len > 4) l++; if (len >= 10) k++; } ; END { print total, l, l/total, k, k/total }' < include/net/tcp.h
> > 68 28 0.411765 20 0.294118
> >
> > 41% are over 4 lines, 29% are >= 10 lines.
>
> Take out the comments and whitespace lines, your script is
> too simplistic.
He should also remove these, which involve just syntactic casting to
please the compiler:
struct tcp_sock *tp = tcp_sk(sk);
struct inet_connection_sock *icsk = inet_csk(sk);
...and maybe some other similar ones. I'm sure that's going to make his
statistics even more questionable as is because we need tp all around.
But about his concerns, I spend couple of minutes in looking to it by
hand. These are likely to be a win:
tcp_set_state
tcp_prequeue
tcp_prequeue_init
tcp_openreq_init
...about rest I'm very unsure but there are some that probably are a
minor win as well.
tcp_dec_quickack_mode has only a single caller anyway so I'd doubt that
it's going to be significant, I thought moving it to .c earlier but
haven't just done that yet :-).
--
i.
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 3/4] [XFRM]: Kill some bloat
2008-01-08 0:23 ` Andi Kleen
2008-01-08 1:54 ` David Miller
@ 2008-01-08 10:57 ` Ilpo Järvinen
1 sibling, 0 replies; 29+ messages in thread
From: Ilpo Järvinen @ 2008-01-08 10:57 UTC (permalink / raw)
To: Andi Kleen
Cc: David Miller, Herbert Xu, Netdev, Arnaldo Carvalho de Melo,
paul.moore, latten
On Tue, 8 Jan 2008, Andi Kleen wrote:
> David Miller <davem@davemloft.net> writes:
>
> > Similarly I question just about any inline usage at all in *.c files
>
> Don't forget the .h files. Especially a lot of stuff in tcp.h should
> be probably in some .c file and not be inline.
I'm not forgetting them... :-)
My intention is to do the same for all headers as well but I'd really like
to get some actual number of bytes by measuring rather than taking them of
the hat.
...It just requires some work still to get the uninlining actually do the
right thing and actually testing it involves orders of magnitude more
exhaustive recompilation than .o only checking required so after finishing
the script I either has to setup n distcc master with a number of slaves
each or wait for some time for the results :-).
However, I suspect that anything in tcp.h won't match to something like
~5-10k like I've seen in three .c files already + one with debugging that
has even more than 10k (even if all in tcp.h summed up :-)).
--
i.
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH net-2.6.25 0/4] [NET]: Bloat, bloat and more bloat
2008-01-05 14:46 ` [PATCH net-2.6.25 0/4] [NET]: Bloat, bloat and more bloat Arnaldo Carvalho de Melo
@ 2008-01-09 11:35 ` Ilpo Järvinen
0 siblings, 0 replies; 29+ messages in thread
From: Ilpo Järvinen @ 2008-01-09 11:35 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo; +Cc: Netdev
[-- Attachment #1: Type: TEXT/PLAIN, Size: 1247 bytes --]
On Sat, 5 Jan 2008, Arnaldo Carvalho de Melo wrote:
> Em Sat, Jan 05, 2008 at 03:39:04PM +0200, Ilpo Järvinen escreveu:
> > Hi Dave,
> >
> > After Arnaldo got codiff's inline instrumentation bugs fixed
> > (thanks! :-)), I got my .c-inline-bloat-o-meter to power up
> > reliably after some tweaking and bug fixing on my behalf...
> > It shows some very high readings every now and then in the
> > code under net/.
>
> Thank you for the reports and for showing how these tools can be put to
> good use!
>
> If you have any further suggestions on how to make codiff and the
> dwarves to be of more help or find any other bug, please let me know.
It could use a bit less memory because my header inline checking attempt
on a machine with 2G+2G ends up like this:
$ codiff vmlinux.o.base vmlinux.o
libclasses: out of memory(inline_expansion__new)
$ ls -al vmlinux.o{,.base}
-rw-r----- 1 ijjarvin tkol 633132586 Jan 9 13:11 vmlinux.o
-rw-r----- 1 ijjarvin tkol 633132572 Jan 9 00:58 vmlinux.o.base
$
Considering that's only 0.6G+0.6G I've a problem in understanding why
codiff's number crunching eats up so much memory.
I just hope there isn't any O(n^2) or worse algos in it either once
the memory consumption gets resolved. :-)
--
i.
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 3/4] [XFRM]: Kill some bloat
2008-01-08 10:48 ` Ilpo Järvinen
@ 2008-01-10 13:53 ` Ilpo Järvinen
0 siblings, 0 replies; 29+ messages in thread
From: Ilpo Järvinen @ 2008-01-10 13:53 UTC (permalink / raw)
To: andi
Cc: David Miller, Herbert Xu, Netdev, Arnaldo Carvalho de Melo,
paul.moore, latten
[-- Attachment #1: Type: TEXT/PLAIN, Size: 4535 bytes --]
On Tue, 8 Jan 2008, Ilpo Järvinen wrote:
> On Mon, 7 Jan 2008, David Miller wrote:
>
> > From: Andi Kleen <andi@firstfloor.org>
> > Date: Tue, 8 Jan 2008 06:00:07 +0100
> >
> > > On Mon, Jan 07, 2008 at 07:37:00PM -0800, David Miller wrote:
> > > > The vast majority of them are one, two, and three liners.
> > >
> > > % awk ' { line++ } ; /^{/ { total++; start = line } ; /^}/ { len=line-start-3; if (len > 4) l++; if (len >= 10) k++; } ; END { print total, l, l/total, k, k/total }' < include/net/tcp.h
> > > 68 28 0.411765 20 0.294118
> > >
> > > 41% are over 4 lines, 29% are >= 10 lines.
> >
> > Take out the comments and whitespace lines, your script is
> > too simplistic.
In addition it triggered spuriously per struct/enum end brace :-) and
was using the last known function starting brace in there so no wonder
the numbers were that high... Counting with the corrected lines
(len=line-start-1) & spurious matches removed:
74 19 0.256757 7 0.0945946
Here are (finally) the measured bytes (couple of the functions are
missing because I had couple of bugs in the regexps and the #if trickery
at the inline resulted failed compiles):
12 funcs, 242+, 1697-, diff: -1455 tcp_set_state
13 funcs, 92+, 632-, diff: -540 tcp_is_cwnd_limited
12 funcs, 2836+, 3225-, diff: -389 tcp_current_ssthresh
5 funcs, 261+, 556-, diff: -295 tcp_prequeue
7 funcs, 2777+, 3049-, diff: -272 tcp_clear_retrans_hints_partial
11 funcs, 64+, 275-, diff: -211 tcp_win_from_space
6 funcs, 128+, 320-, diff: -192 tcp_prequeue_init
12 funcs, 45+, 209-, diff: -164 tcp_set_ca_state
7 funcs, 106+, 237-, diff: -131 tcp_fast_path_check
5 funcs, 167+, 291-, diff: -124 tcp_write_queue_purge
6 funcs, 43+, 160-, diff: -117 tcp_push_pending_frames
9 funcs, 55+, 159-, diff: -104 tcp_v4_check
6 funcs, 4+, 97-, diff: -93 tcp_packets_in_flight
7 funcs, 58+, 150-, diff: -92 tcp_fast_path_on
4 funcs, 4+, 91-, diff: -87 tcp_clear_options
6 funcs, 141+, 217-, diff: -76 tcp_openreq_init
8 funcs, 38+, 111-, diff: -73 tcp_unlink_write_queue
7 funcs, 32+, 103-, diff: -71 tcp_checksum_complete
7 funcs, 35+, 101-, diff: -66 __tcp_fast_path_on
5 funcs, 4+, 66-, diff: -62 tcp_receive_window
6 funcs, 67+, 128-, diff: -61 tcp_add_write_queue_tail
7 funcs, 30+, 86-, diff: -56 tcp_ca_event
6 funcs, 73+, 106-, diff: -33 tcp_paws_check
4 funcs, 4+, 36-, diff: -32 tcp_highest_sack_seq
6 funcs, 46+, 78-, diff: -32 tcp_fin_time
3 funcs, 4+, 35-, diff: -31 tcp_clear_all_retrans_hints
7 funcs, 30+, 51-, diff: -21 __tcp_add_write_queue_tail
3 funcs, 4+, 14-, diff: -10 tcp_enable_fack
4 funcs, 4+, 14-, diff: -10 keepalive_time_when
8 funcs, 66+, 73-, diff: -7 tcp_full_space
3 funcs, 4+, 5-, diff: -1 tcp_wnd_end
4 funcs, 97+, 97-, diff: +0 tcp_mib_init
3 funcs, 4+, 3-, diff: +1 tcp_skb_is_last
2 funcs, 4+, 2-, diff: +2 keepalive_intvl_when
2 funcs, 4+, 2-, diff: +2 tcp_is_fack
2 funcs, 4+, 2-, diff: +2 tcp_skb_mss
2 funcs, 4+, 2-, diff: +2 tcp_write_queue_empty
2 funcs, 4+, 2-, diff: +2 tcp_advance_highest_sack
2 funcs, 4+, 2-, diff: +2 tcp_advance_send_head
2 funcs, 4+, 2-, diff: +2 tcp_check_send_head
2 funcs, 4+, 2-, diff: +2 tcp_highest_sack_reset
2 funcs, 4+, 2-, diff: +2 tcp_init_send_head
2 funcs, 4+, 2-, diff: +2 tcp_sack_reset
6 funcs, 47+, 44-, diff: +3 tcp_space
5 funcs, 55+, 50-, diff: +5 tcp_too_many_orphans
3 funcs, 8+, 2-, diff: +6 tcp_minshall_update
3 funcs, 8+, 2-, diff: +6 tcp_update_wl
8 funcs, 25+, 14-, diff: +11 between
3 funcs, 14+, 2-, diff: +12 tcp_put_md5sig_pool
3 funcs, 14+, 2-, diff: +12 tcp_clear_xmit_timers
5 funcs, 30+, 17-, diff: +13 tcp_dec_pcount_approx_int
6 funcs, 33+, 20-, diff: +13 tcp_insert_write_queue_after
3 funcs, 17+, 2-, diff: +15 __tcp_checksum_complete
5 funcs, 17+, 2-, diff: +15 tcp_init_wl
4 funcs, 57+, 41-, diff: +16 tcp_dec_quickack_mode
4 funcs, 40+, 22-, diff: +18 __tcp_add_write_queue_head
5 funcs, 36+, 16-, diff: +20 tcp_highest_sack_combine
4 funcs, 40+, 18-, diff: +22 tcp_dec_pcount_approx
6 funcs, 29+, 5-, diff: +24 tcp_is_sack
4 funcs, 28+, 2-, diff: +26 tcp_is_reno
5 funcs, 50+, 24-, diff: +26 tcp_insert_write_queue_before
4 funcs, 83+, 56-, diff: +27 tcp_check_probe_timer
8 funcs, 69+, 14-, diff: +55 tcp_left_out
11 funcs, 2995+, 2893-, diff: +102 tcp_skb_pcount
30 funcs, 930+, 2-, diff: +928 before
--
i.
^ permalink raw reply [flat|nested] 29+ messages in thread
end of thread, other threads:[~2008-01-10 13:53 UTC | newest]
Thread overview: 29+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-01-05 13:39 [PATCH net-2.6.25 0/4] [NET]: Bloat, bloat and more bloat Ilpo Järvinen
2008-01-05 13:39 ` [PATCH 1/4] [NETFILTER]: Kill some supper dupper bloatry Ilpo Järvinen
2008-01-05 13:39 ` [PATCH 2/4] [IPVS]: Kill some bloat Ilpo Järvinen
2008-01-05 13:39 ` [PATCH 3/4] [XFRM]: " Ilpo Järvinen
2008-01-05 13:39 ` [PATCH 4/4] [CCID3]: " Ilpo Järvinen
2008-01-05 14:44 ` Arnaldo Carvalho de Melo
2008-01-06 7:13 ` David Miller
2008-01-06 0:29 ` [PATCH 3/4] [XFRM]: " Herbert Xu
2008-01-06 3:25 ` Paul Moore
2008-01-06 7:16 ` David Miller
2008-01-07 7:13 ` Ilpo Järvinen
2008-01-07 7:32 ` Herbert Xu
2008-01-08 0:23 ` Andi Kleen
2008-01-08 1:54 ` David Miller
2008-01-08 2:05 ` Andi Kleen
2008-01-08 2:08 ` [PATCH 3/4] [XFRM]: Kill some bloat II Andi Kleen
2008-01-08 3:37 ` [PATCH 3/4] [XFRM]: Kill some bloat David Miller
2008-01-08 5:00 ` Andi Kleen
2008-01-08 5:10 ` David Miller
2008-01-08 10:48 ` Ilpo Järvinen
2008-01-10 13:53 ` Ilpo Järvinen
2008-01-08 10:57 ` Ilpo Järvinen
2008-01-07 8:21 ` Ilpo Järvinen
2008-01-07 10:02 ` Herbert Xu
2008-01-06 7:13 ` David Miller
2008-01-06 7:12 ` [PATCH 2/4] [IPVS]: " David Miller
2008-01-06 7:11 ` [PATCH 1/4] [NETFILTER]: Kill some supper dupper bloatry David Miller
2008-01-05 14:46 ` [PATCH net-2.6.25 0/4] [NET]: Bloat, bloat and more bloat Arnaldo Carvalho de Melo
2008-01-09 11:35 ` Ilpo Järvinen
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).