Re: [RFC PATCH v2] net: sched: convert qdisc linked list to hashtable

From: Thomas Graf
Date: Fri Jul 08 2016 - 07:07:29 EST


On 07/07/16 at 10:36pm, Jiri Kosina wrote:
> 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.