Define new 'bandwidth' element with possible child element 'inbound' and 'outbound' addressing incoming and outgoing traffic respectively: <bandwidth> <inbound average='1mbit' peak='2mbit' burst='5m'/> <outbound average='0.5mbit'/> </bandwidth> Leaving any element out means not to shape traffic in that direction. Accepted units are the same as 'tc' accepts. This element can be inserted into domain's 'interface' and 'network'. --- docs/formatdomain.html.in | 32 ++++++++++++++++++++++++++++ docs/formatnetwork.html.in | 30 ++++++++++++++++++++++++++ docs/schemas/domain.rng | 50 ++++++++++++++++++++++++++++++++++++++++++++ docs/schemas/network.rng | 50 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 162 insertions(+), 0 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 269fc30..766b2bc 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1825,6 +1825,38 @@ qemu-kvm -net nic,model=? /dev/null <span class="since">Since 0.8.8</span> </p> + <h5><a name="elementQoS">Quality of service</a></h5> + +<pre> + ... + <devices> + <interface type='network'> + <source network='default'/> + <target dev='vnet0'/> + <b><bandwidth> + <inbound average='1mbit' peak='0.5mbps' burst='1m'/> + <outbound average='128kbit' peak='256kbit' burst='256kbit'/> + </bandwidth></b> + </interface> + <devices> + ...</pre> + + <p> + This part of interface XML provides setting quality of service. Incoming + and outgoing traffic can be shaped independently. The + <code>bandwidth</code> element can have at most one <code>inbound</code> + and at most one <code>outbound</code> child elements. Leaving any of these + children element out result in no QoS applied on that traffic direction. + So, when you want to shape only domain's incoming traffic, use + <code>inbound</code> only, and vice versa. Each of these elements have one + mandatory attribute <code>average</code>. It specifies average bit rate on + interface being shaped. Then there are two optional attributes: + <code>peak</code>, which specifies maximum rate at which interface can send + data, and <code>burst</code>, amount of bytes that can be burst at + <code>peak</code> speed. Accepted values for attributes are decimal + numbers, optionally followed by unit. See <code>man tc</code> for more + details. + </p> <h4><a name="elementsInput">Input devices</a></h4> <p> diff --git a/docs/formatnetwork.html.in b/docs/formatnetwork.html.in index f9421c3..607e1aa 100644 --- a/docs/formatnetwork.html.in +++ b/docs/formatnetwork.html.in @@ -102,6 +102,36 @@ 0.4.2</span></dd> </dl> + <h5><a name="elementQoS">Quality of service</a></h5> + +<pre> + ... + <forward mode='nat' dev='eth0'/> + <b><bandwidth> + <inbound average='1mbit' peak='0.5mbps' burst='1m'/> + <outbound average='128kbit' peak='256kbit' burst='256kbit'/> + </bandwidth></b> + <mac address='00:16:3E:5D:C7:9E'/> + ...</pre> + + <p> + This part of network XML provides setting quality of service. Incoming + and outgoing traffic can be shaped independently. The + <code>bandwidth</code> element can have at most one <code>inbound</code> + and at most one <code>outbound</code> child elements. Leaving any of these + children element out result in no QoS applied on that traffic direction. + So, when you want to shape only network's incoming traffic, use + <code>inbound</code> only, and vice versa. Each of these elements have one + mandatory attribute <code>average</code>. It specifies average bit rate on + interface being shaped. Then there are two optional attributes: + <code>peak</code>, which specifies maximum rate at which bridge can send + data, and <code>burst</code>, amount of bytes that can be burst at + <code>peak</code> speed. Accepted values for attributes are decimal + numbers, optionally followed by unit. See <code>man tc</code> for + more details. The rate is shared equally within domains connected + to the network. + </p> + <h3><a name="elementsAddress">Addressing</a></h3> <p> diff --git a/docs/schemas/domain.rng b/docs/schemas/domain.rng index 8a4e3fe..e12f5b7 100644 --- a/docs/schemas/domain.rng +++ b/docs/schemas/domain.rng @@ -1170,6 +1170,9 @@ <optional> <ref name="deviceBoot"/> </optional> + <optional> + <ref name="bandwidth"/> + </optional> </interleave> </define> <define name="virtualPortProfile"> @@ -2349,6 +2352,43 @@ </element> </define> + <define name="bandwidth"> + <element name="bandwidth"> + <interleave> + <optional> + <element name="inbound"> + <ref name="bandwidth-attributes"/> + <empty/> + </element> + </optional> + <optional> + <element name="outbound"> + <ref name="bandwidth-attributes"/> + <empty/> + </element> + </optional> + </interleave> + </element> + </define> + + <define name="bandwidth-attributes"> + <interleave> + <attribute name="average"> + <ref name="speed"/> + </attribute> + <optional> + <attribute name="peak"> + <ref name="speed"/> + </attribute> + </optional> + <optional> + <attribute name='burst'> + <ref name="BurstSize"/> + </attribute> + </optional> + </interleave> + </define> + <!-- Optional hypervisor extensions in their own namespace: QEmu @@ -2520,4 +2560,14 @@ <param name="maxLength">39</param> </data> </define> + <define name="speed"> + <data type="string"> + <param name="pattern">[0-9]+(\.[0-9]+)?((Ki|k|mi|m|gi|g|ti|t|)?bit|(Ki|K|Mi|M|Gi|G|Ti|T)?Bps)?</param> + </data> + </define> + <define name="BurstSize"> + <data type="string"> + <param name="pattern">[0-9]+(\.[0-9]+)?(kb|k|mb|m|mbit|kbit|b|gb|g|gbit)?</param> + </data> + </define> </grammar> diff --git a/docs/schemas/network.rng b/docs/schemas/network.rng index 6d9f06b..8e86b05 100644 --- a/docs/schemas/network.rng +++ b/docs/schemas/network.rng @@ -110,6 +110,9 @@ </zeroOrMore> </element> </optional> + <optional> + <ref name="bandwidth"/> + </optional> <!-- <ip> element --> <zeroOrMore> @@ -172,4 +175,51 @@ </data> </define> + <define name="bandwidth"> + <element name="bandwidth"> + <interleave> + <optional> + <element name="inbound"> + <ref name="bandwidth-attributes"/> + <empty/> + </element> + </optional> + <optional> + <element name="outbound"> + <ref name="bandwidth-attributes"/> + <empty/> + </element> + </optional> + </interleave> + </element> + </define> + + <define name="bandwidth-attributes"> + <interleave> + <attribute name="average"> + <ref name="speed"/> + </attribute> + <optional> + <attribute name="peak"> + <ref name="speed"/> + </attribute> + </optional> + <optional> + <attribute name='burst'> + <ref name="BurstSize"/> + </attribute> + </optional> + </interleave> + </define> + + <define name="speed"> + <data type="string"> + <param name="pattern">[0-9]+(\.[0-9]+)?((Ki|k|mi|m|gi|g|ti|t|)?bit|(Ki|K|Mi|M|Gi|G|Ti|T)?Bps)?</param> + </data> + </define> + <define name="BurstSize"> + <data type="string"> + <param name="pattern">[0-9]+(\.[0-9]+)?(kb|k|mb|m|mbit|kbit|b|gb|g|gbit)?</param> + </data> + </define> </grammar> -- 1.7.5.rc3 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list