• J
    net sched actions: dump more than TCA_ACT_MAX_PRIO actions per batch · 90825b23
    Jamal Hadi Salim 提交于
    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 thus maintaining backward compat.
    
    Some results dumping 1.5M actions below:
    first an unpatched tc which doesnt understand these features...
    
    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 app which sets its
    receive buffer to about 32K.
    Signed-off-by: NJamal Hadi Salim <jhs@mojatatu.com>
    Reviewed-by: NJiri Pirko <jiri@mellanox.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    90825b23
act_api.c 27.2 KB