• S
    Improve block job rate limiting for small bandwidth values · f14a39cc
    Sascha Silbe 提交于
    ratelimit_calculate_delay() previously reset the accounting every time
    slice, no matter how much data had been processed before. This had (at
    least) two consequences:
    
    1. The minimum speed is rather large, e.g. 5 MiB/s for commit and stream.
    
       Not sure if there are real-world use cases where this would be a
       problem. Mirroring and backup over a slow link (e.g. DSL) would
       come to mind, though.
    
    2. Tests for block job operations (e.g. cancel) were rather racy
    
       All block jobs currently use a time slice of 100ms. That's a
       reasonable value to get smooth output during regular
       operation. However this also meant that the state of block jobs
       changed every 100ms, no matter how low the configured limit was. On
       busy hosts, qemu often transferred additional chunks until the test
       case had a chance to cancel the job.
    
    Fix the block job rate limit code to delay for more than one time
    slice to address the above issues. To make it easier to handle
    oversized chunks we switch the semantics from returning a delay
    _before_ the current request to a delay _after_ the current
    request. If necessary, this delay consists of multiple time slice
    units.
    
    Since the mirror job sends multiple chunks in one go even if the rate
    limit was exceeded in between, we need to keep track of the start of
    the current time slice so we can correctly re-compute the delay for
    the updated amount of data.
    
    The minimum bandwidth now is 1 data unit per time slice. The block
    jobs are currently passing the amount of data transferred in sectors
    and using 100ms time slices, so this translates to 5120
    bytes/second. With chunk sizes usually being O(512KiB), tests have
    plenty of time (O(100s)) to operate on block jobs. The chance of a
    race condition now is fairly remote, except possibly on insanely
    loaded systems.
    Signed-off-by: NSascha Silbe <silbe@linux.vnet.ibm.com>
    Message-id: 1467127721-9564-2-git-send-email-silbe@linux.vnet.ibm.com
    Reviewed-by: NMax Reitz <mreitz@redhat.com>
    Signed-off-by: NMax Reitz <mreitz@redhat.com>
    f14a39cc
stream.c 6.7 KB