[Libguestfs] [PATCH nbdkit] Add new filter for rate-limiting connections.
Eric Blake
eblake at redhat.com
Fri Mar 8 12:38:10 UTC 2019
On 3/5/19 4:38 AM, Richard W.M. Jones wrote:
> ---
> filters/delay/nbdkit-delay-filter.pod | 4 +-
> filters/rate/nbdkit-rate-filter.pod | 84 +++++++++
> configure.ac | 2 +
> filters/rate/bucket.h | 62 +++++++
> filters/rate/bucket.c | 173 +++++++++++++++++++
> filters/rate/rate.c | 235 ++++++++++++++++++++++++++
> TODO | 9 +
> filters/rate/Makefile.am | 64 +++++++
> tests/Makefile.am | 6 +-
> tests/test-rate.sh | 60 +++++++
> 10 files changed, 697 insertions(+), 2 deletions(-)
I see I was too slow in reviewing this before you pushed (that's okay,
overall it looks reasonable).
> +
> +=item nbdkit --filter=rate memory size=64M connection-rate=50K rate=1M
> +
> +Limit each connection to S<50 Kbps>. Additionally the total bandwidth
> +across all connections to the server is limited to S<1 Mbps>.
If there are more than 40 clients, does this setup fairly service all of
them at a lower per-client rate?
> +=head1 NOTES
> +
> +The rate filter approximates the bandwidth used by the NBD protocol on
> +the wire. Some operations such as zeroing and trimming are
> +effectively free (because only a tiny NBD message is sent over the
> +network) and so do not count against the bandwidth limit. NBD and TCP
> +protocol overhead is not included, so you may find that other tools
> +such as L<tc(8)> and L<iptables(8)> give more accurate results.
> +
> +There are separate bandwidth limits for read and write (ie. upload and
> +download to the server).
> +
Is it worth mentioning that the blocksize filter can be used to ensure
smoother spreading of the bandwidth? (If a large client request is
broken into 128k max packets, that hits the network in a smoother
pattern than a single request).
> +++ b/TODO
> @@ -129,6 +129,15 @@ Suggestions for filters
> * nbdkit-cache-filter should handle ENOSPC errors automatically by
> reclaiming blocks from the cache
>
> +nbdkit-rate-filter:
> +
> +* allow other kinds of traffic shaping such as VBR
> +
> +* limit traffic per client (ie. per IP address)
> +
> +* split large requests to avoid long, lumpy sleeps when request size
> + is much larger than rate limit
Can't you pair the blocksize filter in front of this one to accomplish
that already?
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20190308/256a75e9/attachment.sig>
More information about the Libguestfs
mailing list