hfsc: reduce hfsc_sched to 14 cachelines
authorFlorian Westphal <fw@strlen.de>
Mon, 4 Jul 2016 14:22:20 +0000 (16:22 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sat, 9 Jul 2016 03:08:39 +0000 (23:08 -0400)
hfsc_sched is huge (size: 920, cachelines: 15), but we can get it to 14
cachelines by placing level after filter_cnt (covering 4 byte hole) and
reducing period/nactive/flags to u32 (period is just a counter,
incremented when class becomes active -- 2**32 is plenty for this
purpose, also, long is only 32bit wide on 32bit platforms anyway).

cl_vtperiod is exported to userspace via tc_hfsc_stats, but its period
member is already u32, so no precision is lost there either.

Cc: Michal Soltys <soltys@ziu.info>
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/sch_hfsc.c

index dff92ea772fe34ad8bac9ca3a4d579868776665d..3ddc7bd74ecb38e76eb09060209df150c685319d 100644 (file)
@@ -115,9 +115,9 @@ struct hfsc_class {
        struct gnet_stats_basic_packed bstats;
        struct gnet_stats_queue qstats;
        struct gnet_stats_rate_est64 rate_est;
-       unsigned int    level;          /* class level in hierarchy */
        struct tcf_proto __rcu *filter_list; /* filter list */
        unsigned int    filter_cnt;     /* filter count */
+       unsigned int    level;          /* class level in hierarchy */
 
        struct hfsc_sched *sched;       /* scheduler data */
        struct hfsc_class *cl_parent;   /* parent class */
@@ -165,10 +165,10 @@ struct hfsc_class {
        struct runtime_sc cl_virtual;   /* virtual curve */
        struct runtime_sc cl_ulimit;    /* upperlimit curve */
 
-       unsigned long   cl_flags;       /* which curves are valid */
-       unsigned long   cl_vtperiod;    /* vt period sequence number */
-       unsigned long   cl_parentperiod;/* parent's vt period sequence number*/
-       unsigned long   cl_nactive;     /* number of active children */
+       u8              cl_flags;       /* which curves are valid */
+       u32             cl_vtperiod;    /* vt period sequence number */
+       u32             cl_parentperiod;/* parent's vt period sequence number*/
+       u32             cl_nactive;     /* number of active children */
 };
 
 struct hfsc_sched {