Wed, Apr 26, 2017 at 02:42:17PM CEST, j...@mojatatu.com wrote:
>From: Jamal Hadi Salim <j...@mojatatu.com>
>
>When you dump hundreds of thousands of actions, getting only 32 per
>dump batch even when the socket buffer and memory allocations allow
>is inefficient.
>
>With this change, the user will get as many as possibly fitting
>within the given constraints available to the kernel.
>
>The top level action TLV space is extended. An attribute
>TCA_ROOT_FLAGS is used to carry flags; flag TCA_FLAG_LARGE_DUMP_ON
>is set by the user indicating the user is capable of processing
>these large dumps. Older user space which doesnt set this flag
>doesnt get the large (than 32) batches.
>The kernel uses the TCA_ROOT_COUNT attribute to tell the user how many
>actions are put in a single batch. As such user space app knows how long
>to iterate (independent of the type of action being dumped)
>instead of hardcoded maximum of 32.
>
>Some results dumping 1.5M actions, first unpatched tc which the
>kernel doesnt help:
>
>prompt$ time -p tc actions ls action gact | grep index | wc -l
>1500000
>real 1388.43
>user 2.07
>sys 1386.79
>
>Now lets see a patched tc which sets the correct flags when requesting
>a dump:
>
>prompt$ time -p updatedtc actions ls action gact | grep index | wc -l
>1500000
>real 178.13
>user 2.02
>sys 176.96
>
>That is about 8x performance improvement for tc which sets its
>receive buffer to about 32K.
>
>Signed-off-by: Jamal Hadi Salim <j...@mojatatu.com>
>---

[...]

        
>+#define VALID_TCA_ROOT_FLAGS TCA_FLAG_LARGE_DUMP_ON
>+static inline bool tca_flags_valid(u32 act_flags)
>+{
>+      u32 invalid_flags_mask  = ~VALID_TCA_ROOT_FLAGS;
>+
>+      if (act_flags & invalid_flags_mask)
>+              return false;
>+
>+      return true;

This dance should either not be here (flag-per-attr) or should be in
netlink generic place. This is not TC specific at all.

I would still like to see the numbers prooving we need this.
Thanks

Reply via email to