• Ilya Maximets's avatar
    openvswitch: meter: remove rate from the bucket size calculation · 7d742b50
    Ilya Maximets authored
    Implementation of meters supposed to be a classic token bucket with 2
    typical parameters: rate and burst size.
    
    Burst size in this schema is the maximum number of bytes/packets that
    could pass without being rate limited.
    
    Recent changes to userspace datapath made meter implementation to be
    in line with the kernel one, and this uncovered several issues.
    
    The main problem is that maximum bucket size for unknown reason
    accounts not only burst size, but also the numerical value of rate.
    This creates a lot of confusion around behavior of meters.
    
    For example, if rate is configured as 1000 pps and burst size set to 1,
    this should mean that meter will tolerate bursts of 1 packet at most,
    i.e. not a single packet above the rate should pass the meter.
    However, current implementation calculates maximum bucket size as
    (rate + burst size), so the effective bucket size will be 1001.  This
    means that first 1000 packets will not be rate limited and average
    rate might be twice as high as the configured rate.  This also makes
    it practically impossible to configure meter that will have burst size
    lower than the rate, which might be a desirable configuration if the
    rate is high.
    
    Inability to configure low values of a burst size and overall inability
    for a user to predict what will be a maximum and average rate from the
    configured parameters of a meter without looking at the OVS and kernel
    code might be also classified as a security issue, because drop meters
    are frequently used as a way of protection from DoS attacks.
    
    This change removes rate from the calculation of a bucket size, making
    it in line with the classic token bucket algorithm and essentially
    making the rate and burst tolerance being predictable from a users'
    perspective.
    
    Same change proposed for the userspace implementation.
    
    Fixes: 96fbc13d ("openvswitch: Add meter infrastructure")
    Signed-off-by: default avatarIlya Maximets <i.maximets@ovn.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    7d742b50
meter.c 17.9 KB