* [PATCH net-next 0/3] pf_packet updates
@ 2013-08-28 20:13 Daniel Borkmann
2013-08-28 20:13 ` [PATCH net-next 1/3] net: packet: add randomized fanout scheduler Daniel Borkmann
` (3 more replies)
0 siblings, 4 replies; 13+ messages in thread
From: Daniel Borkmann @ 2013-08-28 20:13 UTC (permalink / raw)
To: davem; +Cc: netdev
Daniel Borkmann (3):
net: packet: add random fanout scheduler
net: packet: use reciprocal_divide in fanout_demux_hash
net: packet: document available fanout policies
Documentation/networking/packet_mmap.txt | 8 ++++++++
include/uapi/linux/if_packet.h | 1 +
net/packet/af_packet.c | 15 +++++++++++++--
3 files changed, 22 insertions(+), 2 deletions(-)
--
1.7.11.7
^ permalink raw reply [flat|nested] 13+ messages in thread* [PATCH net-next 1/3] net: packet: add randomized fanout scheduler 2013-08-28 20:13 [PATCH net-next 0/3] pf_packet updates Daniel Borkmann @ 2013-08-28 20:13 ` Daniel Borkmann 2013-08-28 20:13 ` [PATCH net-next 2/3] net: packet: use reciprocal_divide in fanout_demux_hash Daniel Borkmann ` (2 subsequent siblings) 3 siblings, 0 replies; 13+ messages in thread From: Daniel Borkmann @ 2013-08-28 20:13 UTC (permalink / raw) To: davem; +Cc: netdev We currently allow for different fanout scheduling policies in pf_packet such as scheduling by skb's rxhash, round-robin, by cpu, and rollover. Also allow for a random, equidistributed selection of the socket from the fanout process group. Signed-off-by: Daniel Borkmann <dborkman@redhat.com> --- include/uapi/linux/if_packet.h | 1 + net/packet/af_packet.c | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/include/uapi/linux/if_packet.h b/include/uapi/linux/if_packet.h index b950c02..dbf0666 100644 --- a/include/uapi/linux/if_packet.h +++ b/include/uapi/linux/if_packet.h @@ -56,6 +56,7 @@ struct sockaddr_ll { #define PACKET_FANOUT_LB 1 #define PACKET_FANOUT_CPU 2 #define PACKET_FANOUT_ROLLOVER 3 +#define PACKET_FANOUT_RND 4 #define PACKET_FANOUT_FLAG_ROLLOVER 0x1000 #define PACKET_FANOUT_FLAG_DEFRAG 0x8000 diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 6c53dd9..91596f5 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -88,7 +88,7 @@ #include <linux/virtio_net.h> #include <linux/errqueue.h> #include <linux/net_tstamp.h> - +#include <linux/reciprocal_div.h> #ifdef CONFIG_INET #include <net/inet_common.h> #endif @@ -1158,6 +1158,13 @@ static unsigned int fanout_demux_cpu(struct packet_fanout *f, return smp_processor_id() % num; } +static unsigned int fanout_demux_rnd(struct packet_fanout *f, + struct sk_buff *skb, + unsigned int num) +{ + return reciprocal_divide(prandom_u32(), num); +} + static unsigned int fanout_demux_rollover(struct packet_fanout *f, struct sk_buff *skb, unsigned int idx, unsigned int skip, @@ -1215,6 +1222,9 @@ static int packet_rcv_fanout(struct sk_buff *skb, struct net_device *dev, case PACKET_FANOUT_CPU: idx = fanout_demux_cpu(f, skb, num); break; + case PACKET_FANOUT_RND: + idx = fanout_demux_rnd(f, skb, num); + break; case PACKET_FANOUT_ROLLOVER: idx = fanout_demux_rollover(f, skb, 0, (unsigned int) -1, num); break; @@ -1284,6 +1294,7 @@ static int fanout_add(struct sock *sk, u16 id, u16 type_flags) case PACKET_FANOUT_HASH: case PACKET_FANOUT_LB: case PACKET_FANOUT_CPU: + case PACKET_FANOUT_RND: break; default: return -EINVAL; -- 1.7.11.7 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH net-next 2/3] net: packet: use reciprocal_divide in fanout_demux_hash 2013-08-28 20:13 [PATCH net-next 0/3] pf_packet updates Daniel Borkmann 2013-08-28 20:13 ` [PATCH net-next 1/3] net: packet: add randomized fanout scheduler Daniel Borkmann @ 2013-08-28 20:13 ` Daniel Borkmann 2013-08-29 1:47 ` Cong Wang 2013-08-28 20:13 ` [PATCH net-next 3/3] net: packet: document available fanout policies Daniel Borkmann 2013-08-29 5:39 ` [PATCH net-next 0/3] pf_packet updates David Miller 3 siblings, 1 reply; 13+ messages in thread From: Daniel Borkmann @ 2013-08-28 20:13 UTC (permalink / raw) To: davem; +Cc: netdev Instead of hard-coding reciprocal_divide function, use the inline function from reciprocal_div.h. Signed-off-by: Daniel Borkmann <dborkman@redhat.com> --- net/packet/af_packet.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 91596f5..130e2ea 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -1135,7 +1135,7 @@ static unsigned int fanout_demux_hash(struct packet_fanout *f, struct sk_buff *skb, unsigned int num) { - return (((u64)skb->rxhash) * num) >> 32; + return reciprocal_divide(skb->rxhash, num); } static unsigned int fanout_demux_lb(struct packet_fanout *f, -- 1.7.11.7 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH net-next 2/3] net: packet: use reciprocal_divide in fanout_demux_hash 2013-08-28 20:13 ` [PATCH net-next 2/3] net: packet: use reciprocal_divide in fanout_demux_hash Daniel Borkmann @ 2013-08-29 1:47 ` Cong Wang 0 siblings, 0 replies; 13+ messages in thread From: Cong Wang @ 2013-08-29 1:47 UTC (permalink / raw) To: netdev On Wed, 28 Aug 2013 at 20:13 GMT, Daniel Borkmann <dborkman@redhat.com> wrote: > Instead of hard-coding reciprocal_divide function, use the inline > function from reciprocal_div.h. > Then you should #include <linux/reciprocal_div.h> directly? ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH net-next 3/3] net: packet: document available fanout policies 2013-08-28 20:13 [PATCH net-next 0/3] pf_packet updates Daniel Borkmann 2013-08-28 20:13 ` [PATCH net-next 1/3] net: packet: add randomized fanout scheduler Daniel Borkmann 2013-08-28 20:13 ` [PATCH net-next 2/3] net: packet: use reciprocal_divide in fanout_demux_hash Daniel Borkmann @ 2013-08-28 20:13 ` Daniel Borkmann 2013-08-29 5:39 ` [PATCH net-next 0/3] pf_packet updates David Miller 3 siblings, 0 replies; 13+ messages in thread From: Daniel Borkmann @ 2013-08-28 20:13 UTC (permalink / raw) To: davem; +Cc: netdev Update documentation to add fanout policies that are available. Signed-off-by: Daniel Borkmann <dborkman@redhat.com> --- Documentation/networking/packet_mmap.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Documentation/networking/packet_mmap.txt b/Documentation/networking/packet_mmap.txt index 8572796..c012236 100644 --- a/Documentation/networking/packet_mmap.txt +++ b/Documentation/networking/packet_mmap.txt @@ -543,6 +543,14 @@ TPACKET_V2 --> TPACKET_V3: In the AF_PACKET fanout mode, packet reception can be load balanced among processes. This also works in combination with mmap(2) on packet sockets. +Currently implemented fanout policies are: + + - PACKET_FANOUT_HASH: schedule to socket by skb's rxhash + - PACKET_FANOUT_LB: schedule to socket by round-robin + - PACKET_FANOUT_CPU: schedule to socket by CPU packet arrives on + - PACKET_FANOUT_RND: schedule to socket by random selection + - PACKET_FANOUT_ROLLOVER: if one socket is full, rollover to another + Minimal example code by David S. Miller (try things like "./test eth0 hash", "./test eth0 lb", etc.): -- 1.7.11.7 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH net-next 0/3] pf_packet updates 2013-08-28 20:13 [PATCH net-next 0/3] pf_packet updates Daniel Borkmann ` (2 preceding siblings ...) 2013-08-28 20:13 ` [PATCH net-next 3/3] net: packet: document available fanout policies Daniel Borkmann @ 2013-08-29 5:39 ` David Miller 2013-08-29 6:20 ` Daniel Borkmann 2013-08-29 10:25 ` Eric Dumazet 3 siblings, 2 replies; 13+ messages in thread From: David Miller @ 2013-08-29 5:39 UTC (permalink / raw) To: dborkman; +Cc: netdev From: Daniel Borkmann <dborkman@redhat.com> Date: Wed, 28 Aug 2013 22:13:08 +0200 > Daniel Borkmann (3): > net: packet: add random fanout scheduler > net: packet: use reciprocal_divide in fanout_demux_hash > net: packet: document available fanout policies Please add the missing reciprocal_divide.h include to the second patch, as per Eric Dumazet's feedback, and resubmit this series. Thanks. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH net-next 0/3] pf_packet updates 2013-08-29 5:39 ` [PATCH net-next 0/3] pf_packet updates David Miller @ 2013-08-29 6:20 ` Daniel Borkmann 2013-08-29 20:43 ` David Miller 2013-08-29 10:25 ` Eric Dumazet 1 sibling, 1 reply; 13+ messages in thread From: Daniel Borkmann @ 2013-08-29 6:20 UTC (permalink / raw) To: David Miller; +Cc: netdev, Cong Wang On 08/29/2013 07:39 AM, David Miller wrote: > From: Daniel Borkmann <dborkman@redhat.com> > Date: Wed, 28 Aug 2013 22:13:08 +0200 > >> Daniel Borkmann (3): >> net: packet: add random fanout scheduler >> net: packet: use reciprocal_divide in fanout_demux_hash >> net: packet: document available fanout policies > > Please add the missing reciprocal_divide.h include to the second > patch, as per Eric Dumazet's feedback, and resubmit this series. That is already the case in the first patch of the series. It adds: ... +#include <linux/reciprocal_div.h> ... ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH net-next 0/3] pf_packet updates 2013-08-29 6:20 ` Daniel Borkmann @ 2013-08-29 20:43 ` David Miller 0 siblings, 0 replies; 13+ messages in thread From: David Miller @ 2013-08-29 20:43 UTC (permalink / raw) To: dborkman; +Cc: netdev, amwang From: Daniel Borkmann <dborkman@redhat.com> Date: Thu, 29 Aug 2013 08:20:14 +0200 > On 08/29/2013 07:39 AM, David Miller wrote: >> From: Daniel Borkmann <dborkman@redhat.com> >> Date: Wed, 28 Aug 2013 22:13:08 +0200 >> >>> Daniel Borkmann (3): >>> net: packet: add random fanout scheduler >>> net: packet: use reciprocal_divide in fanout_demux_hash >>> net: packet: document available fanout policies >> >> Please add the missing reciprocal_divide.h include to the second >> patch, as per Eric Dumazet's feedback, and resubmit this series. > > That is already the case in the first patch of the series. It adds: > > ... > +#include <linux/reciprocal_div.h> Series applied, thanks Daniel. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH net-next 0/3] pf_packet updates 2013-08-29 5:39 ` [PATCH net-next 0/3] pf_packet updates David Miller 2013-08-29 6:20 ` Daniel Borkmann @ 2013-08-29 10:25 ` Eric Dumazet 2013-08-29 16:53 ` David Miller 1 sibling, 1 reply; 13+ messages in thread From: Eric Dumazet @ 2013-08-29 10:25 UTC (permalink / raw) To: David Miller; +Cc: dborkman, netdev On Thu, 2013-08-29 at 01:39 -0400, David Miller wrote: > From: Daniel Borkmann <dborkman@redhat.com> > Date: Wed, 28 Aug 2013 22:13:08 +0200 > > > Daniel Borkmann (3): > > net: packet: add random fanout scheduler > > net: packet: use reciprocal_divide in fanout_demux_hash > > net: packet: document available fanout policies > > Please add the missing reciprocal_divide.h include to the second > patch, as per Eric Dumazet's feedback, and resubmit this series. (It was Cong Wang feedback ;) ) Thanks ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH net-next 0/3] pf_packet updates 2013-08-29 10:25 ` Eric Dumazet @ 2013-08-29 16:53 ` David Miller 0 siblings, 0 replies; 13+ messages in thread From: David Miller @ 2013-08-29 16:53 UTC (permalink / raw) To: eric.dumazet; +Cc: dborkman, netdev From: Eric Dumazet <eric.dumazet@gmail.com> Date: Thu, 29 Aug 2013 03:25:45 -0700 > On Thu, 2013-08-29 at 01:39 -0400, David Miller wrote: >> From: Daniel Borkmann <dborkman@redhat.com> >> Date: Wed, 28 Aug 2013 22:13:08 +0200 >> >> > Daniel Borkmann (3): >> > net: packet: add random fanout scheduler >> > net: packet: use reciprocal_divide in fanout_demux_hash >> > net: packet: document available fanout policies >> >> Please add the missing reciprocal_divide.h include to the second >> patch, as per Eric Dumazet's feedback, and resubmit this series. > > (It was Cong Wang feedback ;) ) Sorry Eric, I am just too anxious to give you credit everywhere that I can. :-) Anyways, thanks for explaining Daniel, I've put these patches back into the to-apply queue. Thanks! ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH net-next 0/3] PF_PACKET updates @ 2013-12-06 10:36 Daniel Borkmann 2013-12-10 1:24 ` David Miller 0 siblings, 1 reply; 13+ messages in thread From: Daniel Borkmann @ 2013-12-06 10:36 UTC (permalink / raw) To: davem; +Cc: netdev, brouer Patch descriptions in individual patches. In order to avoid a possible merge conflict, we suggest to take the first patch through net tree, merge net into net-next and apply the remaining two patches on top of it. Dave, please let us know if you like to handle this differently than suggested. For patch 3 we'll send a man-page update as a follow-up. Thanks ! Daniel Borkmann (3): packet: fix send path when running with proto == 0 net: dev: move inline skb_needs_linearize helper to header packet: introduce PACKET_QDISC_BYPASS socket option Documentation/networking/packet_mmap.txt | 31 ++++++ include/linux/skbuff.h | 18 ++++ include/uapi/linux/if_packet.h | 1 + net/core/dev.c | 15 --- net/packet/af_packet.c | 156 +++++++++++++++++++++++-------- net/packet/internal.h | 1 + 6 files changed, 170 insertions(+), 52 deletions(-) -- 1.8.3.1 ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH net-next 0/3] PF_PACKET updates 2013-12-06 10:36 [PATCH net-next 0/3] PF_PACKET updates Daniel Borkmann @ 2013-12-10 1:24 ` David Miller 0 siblings, 0 replies; 13+ messages in thread From: David Miller @ 2013-12-10 1:24 UTC (permalink / raw) To: dborkman; +Cc: netdev, brouer From: Daniel Borkmann <dborkman@redhat.com> Date: Fri, 6 Dec 2013 11:36:14 +0100 > Patch descriptions in individual patches. > > In order to avoid a possible merge conflict, we suggest to take > the first patch through net tree, merge net into net-next and > apply the remaining two patches on top of it. Dave, please let > us know if you like to handle this differently than suggested. > > For patch 3 we'll send a man-page update as a follow-up. Patch #1 applied to 'net' and queued up for -stable. Patch #2 and #3 applied to 'net-next'. Thanks! ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH net-next 0/3] pf_packet updates @ 2014-01-12 16:22 Daniel Borkmann 0 siblings, 0 replies; 13+ messages in thread From: Daniel Borkmann @ 2014-01-12 16:22 UTC (permalink / raw) To: davem; +Cc: netdev Daniel Borkmann (3): packet: improve socket create/bind latency in some cases packet: don't unconditionally schedule() in case of MSG_DONTWAIT packet: use percpu mmap tx frame pending refcount net/packet/af_packet.c | 105 +++++++++++++++++++++++++++++++++++++++---------- net/packet/diag.c | 1 + net/packet/internal.h | 2 +- 3 files changed, 86 insertions(+), 22 deletions(-) -- 1.7.11.7 ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2014-01-12 16:22 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-08-28 20:13 [PATCH net-next 0/3] pf_packet updates Daniel Borkmann 2013-08-28 20:13 ` [PATCH net-next 1/3] net: packet: add randomized fanout scheduler Daniel Borkmann 2013-08-28 20:13 ` [PATCH net-next 2/3] net: packet: use reciprocal_divide in fanout_demux_hash Daniel Borkmann 2013-08-29 1:47 ` Cong Wang 2013-08-28 20:13 ` [PATCH net-next 3/3] net: packet: document available fanout policies Daniel Borkmann 2013-08-29 5:39 ` [PATCH net-next 0/3] pf_packet updates David Miller 2013-08-29 6:20 ` Daniel Borkmann 2013-08-29 20:43 ` David Miller 2013-08-29 10:25 ` Eric Dumazet 2013-08-29 16:53 ` David Miller -- strict thread matches above, loose matches on Subject: below -- 2013-12-06 10:36 [PATCH net-next 0/3] PF_PACKET updates Daniel Borkmann 2013-12-10 1:24 ` David Miller 2014-01-12 16:22 [PATCH net-next 0/3] pf_packet updates Daniel Borkmann
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.