* [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; 10+ 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] 10+ 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; 10+ 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] 10+ 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; 10+ 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] 10+ 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; 10+ 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] 10+ 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; 10+ 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] 10+ 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; 10+ 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] 10+ 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; 10+ 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] 10+ 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; 10+ 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] 10+ 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; 10+ 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] 10+ 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; 10+ 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] 10+ messages in thread
end of thread, other threads:[~2013-08-29 20:43 UTC | newest] Thread overview: 10+ 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
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).