From: Martin KaFai Lau <kafai@fb.com>
To: Steffen Klassert <steffen.klassert@secunet.com>
Cc: <netdev@vger.kernel.org>,
Hannes Frederic Sowa <hannes@stressinduktion.org>,
<kernel-team@fb.com>
Subject: Re: [RFC PATCH net-next 10/10] ipv6: Create percpu rt6_info
Date: Mon, 13 Apr 2015 13:16:17 -0700 [thread overview]
Message-ID: <20150413201617.GA2211108@devbig242.prn2.facebook.com> (raw)
In-Reply-To: <20150413105944.GE8928@secunet.com>
On Mon, Apr 13, 2015 at 12:59:44PM +0200, Steffen Klassert wrote:
> On Fri, Apr 10, 2015 at 06:59:36PM -0700, Martin KaFai Lau wrote:
>
> > diff --git a/include/uapi/linux/ipv6_route.h b/include/uapi/linux/ipv6_route.h
> > index 2be7bd1..f6598d1 100644
> > --- a/include/uapi/linux/ipv6_route.h
> > +++ b/include/uapi/linux/ipv6_route.h
> > @@ -34,6 +34,7 @@
> > #define RTF_PREF(pref) ((pref) << 27)
> > #define RTF_PREF_MASK 0x18000000
> >
> > +#define RTF_PCPU 0x40000000
>
> This percpu flag is something internal, should IMO not be added
> to the uapi.
Make sense. Where may be the right place for it?
It seems 'uapi/linux/ipv6_route.h' is the one which has all IPv6 flags laid out.
It makes modification easier since it tells us which bit is still available.
How about we add a comment to 'uapi/linux/ipv6_route.h' and move the '#define'
to 'linux/ipv6_route.h'?
>
> > @@ -1978,8 +2100,13 @@ static void ip6_rt_copy_init(struct rt6_info *rt,
> > static struct rt6_info *ip6_rt_cache_alloc(struct rt6_info *ort,
> > const struct in6_addr *dest)
> > {
> > - struct rt6_info *rt = ip6_dst_alloc(dev_net(ort->dst.dev), ort->dst.dev,
> > - 0, ort->rt6i_table);
> > + struct rt6_info *rt;
> > +
> > + if (ort->rt6i_flags & RTF_PCPU)
> > + ort = (struct rt6_info *)ort->dst.from;
> > +
> > + rt = __ip6_dst_alloc(dev_net(ort->dst.dev), ort->dst.dev,
> > + 0, ort->rt6i_table);
>
> Why don't you allocate the percpu resources for cached routes?
> I think using ip6_dst_alloc() would be better here, cached routes
> could benefit from this too.
Not sure if we want to open up percpu cache opportunity for RTF_CACHE
route after receiving ICMPv6 too-big from remote peers and some of our machines
have a lot of CPU (like 40), so I opt not to do it.
If we do this, we probably need to modify the gc and its related counting also.
> And in particular rt6_release() tries
> to free the percpu resources unconditionally when the route is removed
> from the fib tree. This crashes if the percpu resources are not allocated.
Good catch and will fix in v2.
Thanks,
--Martin
next prev parent reply other threads:[~2015-04-13 20:16 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-11 1:59 [RFC PATCH net-next 00/10] ipv6: Only create RTF_CACHE route after encountering pmtu exception Martin KaFai Lau
2015-04-11 1:59 ` [RFC PATCH net-next 01/10] ipv6: Remove external dependency on rt6i_dst and rt6i_src Martin KaFai Lau
2015-04-11 1:59 ` [RFC PATCH net-next 02/10] ipv6: Remove external dependency on rt6i_gateway and RTF_ANYCAST Martin KaFai Lau
2015-04-11 1:59 ` [RFC PATCH net-next 03/10] ipv6: Combine rt6_alloc_cow and rt6_alloc_clone Martin KaFai Lau
2015-04-11 1:59 ` [RFC PATCH net-next 04/10] ipv6: Only create RTF_CACHE routes after encountering pmtu exception Martin KaFai Lau
2015-04-11 1:59 ` [RFC PATCH net-next 05/10] ipv6: Allow pmtu update on /128 via gateway route Martin KaFai Lau
2015-04-11 1:59 ` [RFC PATCH net-next 06/10] ipv6: Avoid deleting RTF_CACHE route from ip6_route_del() Martin KaFai Lau
2015-04-11 1:59 ` [RFC PATCH net-next 07/10] ipv6: Extend the route lookups to low priority metrics Martin KaFai Lau
2015-04-11 1:59 ` [RFC PATCH net-next 08/10] ipv6: Do not use inetpeer when creating RTF_CACHE route for /128 via gateway entry Martin KaFai Lau
2015-04-13 11:06 ` Steffen Klassert
2015-04-13 17:51 ` Martin KaFai Lau
2015-04-11 1:59 ` [RFC PATCH net-next 09/10] ipv6: Break up ip6_rt_copy() Martin KaFai Lau
2015-04-11 1:59 ` [RFC PATCH net-next 10/10] ipv6: Create percpu rt6_info Martin KaFai Lau
2015-04-13 10:59 ` Steffen Klassert
2015-04-13 20:16 ` Martin KaFai Lau [this message]
2015-04-13 21:46 ` Hannes Frederic Sowa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150413201617.GA2211108@devbig242.prn2.facebook.com \
--to=kafai@fb.com \
--cc=hannes@stressinduktion.org \
--cc=kernel-team@fb.com \
--cc=netdev@vger.kernel.org \
--cc=steffen.klassert@secunet.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.