Re: [RFC PATCH v2] net: sched: convert qdisc linked list to hashtable
From: Eric Dumazet <hidden>
Date: 2016-07-08 13:52:24
Also in:
lkml
From: Eric Dumazet <hidden>
Date: 2016-07-08 13:52:24
Also in:
lkml
On Fri, 2016-07-08 at 13:07 +0200, Thomas Graf wrote:
On 07/07/16 at 10:36pm, Jiri Kosina wrote:quoted
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index f45929c..630838e 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h@@ -52,6 +52,7 @@ #include <uapi/linux/netdevice.h> #include <uapi/linux/if_bonding.h> #include <uapi/linux/pkt_cls.h> +#include <linux/hashtable.h> struct netpoll_info; struct device;@@ -1778,6 +1779,7 @@ struct net_device { unsigned int num_tx_queues; unsigned int real_num_tx_queues; struct Qdisc *qdisc; + DECLARE_HASHTABLE (qdisc_hash, 16);This blows up net_device to an insane size: 64K * sizeof(struct hlist_head). Can we allocate this on demand for net_devices where it is actually needed? The majority of virtual devices won't need this. Doesn't have to be rhashtable, can still be fixed size but at least allocate it.
Jiri probably misread the API and should have used : DECLARE_HASHTABLE (qdisc_hash, 4); Google has a very similar patch with 16 buckets, and it is 'good enough', although we do not hit the qdisc_tree_reduce_backlog() penalty.