From: Thomas Lamprecht <t.lamprecht@proxmox.com>
To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>,
Hannes Laimer <h.laimer@proxmox.com>
Subject: Re: [pve-devel] [PATCH v1 pve-common 1/5] replace rate with out/in-rate in setup_tc_rate_limit and tap_rate_limit
Date: Sat, 6 Feb 2021 15:29:09 +0100 [thread overview]
Message-ID: <58efd38e-a7c8-d60e-a3be-9ac0e5cc198a@proxmox.com> (raw)
In-Reply-To: <20200911100816.80543-2-h.laimer@proxmox.com>
On 11.09.20 12:08, Hannes Laimer wrote:
> Signed-off-by: Hannes Laimer <h.laimer@proxmox.com>
> ---
> src/PVE/Network.pm | 36 +++++++++++++++++++++---------------
> 1 file changed, 21 insertions(+), 15 deletions(-)
>
> diff --git a/src/PVE/Network.pm b/src/PVE/Network.pm
> index 12536c7..3e7a1c1 100644
> --- a/src/PVE/Network.pm
> +++ b/src/PVE/Network.pm
> @@ -82,7 +82,7 @@ our $ipv4_mask_hash_localnet = {
> };
>
> sub setup_tc_rate_limit {
> - my ($iface, $rate, $burst) = @_;
> + my ($iface, $outrate, $inrate, $burst) = @_;
>
> # these are allowed / expected to fail, e.g. when there is no previous rate limit to remove
> eval { run_command("/sbin/tc class del dev $iface parent 1: classid 1:1 >/dev/null 2>&1"); };
> @@ -90,29 +90,35 @@ sub setup_tc_rate_limit {
> eval { run_command("/sbin/tc qdisc del dev $iface ingress >/dev/null 2>&1"); };
> eval { run_command("/sbin/tc qdisc del dev $iface root >/dev/null 2>&1"); };
>
> - return if !$rate;
> -
> # tbf does not work for unknown reason
> #$TC qdisc add dev $DEV root tbf rate $RATE latency 100ms burst $BURST
> # so we use htb instead
> - run_command("/sbin/tc qdisc add dev $iface root handle 1: htb default 1");
> - run_command("/sbin/tc class add dev $iface parent 1: classid 1:1 " .
> - "htb rate ${rate}bps burst ${burst}b");
> -
> - run_command("/sbin/tc qdisc add dev $iface handle ffff: ingress");
> - run_command("/sbin/tc filter add dev $iface parent ffff: " .
> - "prio 50 basic " .
> - "police rate ${rate}bps burst ${burst}b mtu 64kb " .
> - "drop");
> +
> + # inrate limits the egress of the tap device (=> inrate of the VM)
> + if($inrate) {
> + run_command("/sbin/tc qdisc add dev $iface root handle 1: htb default 1");
> + run_command("/sbin/tc class add dev $iface parent 1: classid 1:1 " .
> + "htb rate ${inrate}bps burst ${burst}b");
> + }
please transform run_command to array usage in a separate commit, that string
handling was always ugly and may break or result in command injection if it
gets called with a non-checked $iface (e.g., contains whitespaces or, well,
command injections).
> +
> + # outrate limits the ingress of the tap device (=> outrate of the VM)
> + if($outrate) {
> + run_command("/sbin/tc qdisc add dev $iface handle ffff: ingress");
> + run_command("/sbin/tc filter add dev $iface parent ffff: " .
> + "prio 50 basic " .
> + "police rate ${outrate}bps burst ${burst}b mtu 64kb " .
> + "drop")
> + }
> }
>
> sub tap_rate_limit {
> - my ($iface, $rate) = @_;
> + my ($iface, $outrate, $inrate) = @_;
please keep this backward compatible, i.e., if @_ only gets called with two
elements use it for both, $inrate and $outrate.
>
> - $rate = int($rate*1024*1024) if $rate;
> + $outrate = int($outrate*1024*1024) if $outrate;
> + $inrate = int($inrate*1024*1024) if $inrate;
> my $burst = 1024*1024;
>
> - setup_tc_rate_limit($iface, $rate, $burst);
> + setup_tc_rate_limit($iface, $outrate, $inrate, $burst);
> }
>
> sub read_bridge_mtu {
>
next prev parent reply other threads:[~2021-02-06 14:29 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-11 10:08 [pve-devel] [PATCH v1 series 0/5] limit out and inrate of network device Hannes Laimer
2020-09-11 10:08 ` [pve-devel] [PATCH v1 pve-common 1/5] replace rate with out/in-rate in setup_tc_rate_limit and tap_rate_limit Hannes Laimer
2021-02-06 14:29 ` Thomas Lamprecht [this message]
2020-09-11 10:08 ` [pve-devel] [PATCH v1 pve-common 2/5] add out/in-rate parameter to tap_plug sub, keep version with just rate param Hannes Laimer
2021-02-06 14:22 ` Thomas Lamprecht
2021-04-29 14:57 ` Thomas Lamprecht
2020-09-11 10:08 ` [pve-devel] [PATCH v1 pve-network 3/5] " Hannes Laimer
2020-09-11 10:08 ` [pve-devel] [PATCH v1 qemu-server 4/5] add fields inrate and outrate to net_fmt, map rate of old configs to out/inrate Hannes Laimer
2020-09-11 10:08 ` [pve-devel] [PATCH v1 pve-manager 5/5] out/in-rate in network edit, keep rate to still be able to open old configs Hannes Laimer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=58efd38e-a7c8-d60e-a3be-9ac0e5cc198a@proxmox.com \
--to=t.lamprecht@proxmox.com \
--cc=h.laimer@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal