--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by Microsoft Visio, SVG Export sched_hier_per_port.svg Page-1 -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
+ xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="6.25057in" height="7.26839in"
+ viewBox="0 0 450.041 523.324" xml:space="preserve" color-interpolation-filters="sRGB" class="st8">
+ <v:documentProperties v:langID="2057" v:metric="true" v:viewMarkup="false"/>
+
+ <style type="text/css">
+ <![CDATA[
+ .st1 {fill:#0070c0;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+ .st2 {marker-end:url(#mrkr13-71);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st3 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.37313432835821}
+ .st4 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st5 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+ .st6 {fill:#000000;font-family:Calibri;font-size:1.16666em}
+ .st7 {font-size:1em}
+ .st8 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+ ]]>
+ </style>
+
+ <defs id="Markers">
+ <g id="lend13">
+ <path d="M 3 1 L 0 0 L 3 -1 L 3 1 " style="stroke:none"/>
+ </g>
+ <marker id="mrkr13-71" class="st3" v:arrowType="13" v:arrowSize="2" v:setback="8.04" refX="-8.04" orient="auto"
+ markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend13" transform="scale(-2.68,-2.68) "/>
+ </marker>
+ </defs>
+ <g v:mID="0" v:index="1" v:groupContext="foregroundPage">
+ <title>Page-1</title>
+ <v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
+ v:shadowOffsetY="-8.50394"/>
+ <v:layer v:name="Connector" v:index="0"/>
+ <g id="group234-1" transform="translate(0.375,-12.7124)" v:mID="234" v:groupContext="group">
+ <title>Sheet.234</title>
+ <g id="shape1-2" v:mID="1" v:groupContext="shape" transform="translate(265.039,-113.796)">
+ <title>Sheet.1</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape2-4" v:mID="2" v:groupContext="shape" transform="translate(265.039,-98.3577)">
+ <title>Sheet.2</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape3-6" v:mID="3" v:groupContext="shape" transform="translate(265.039,-82.9192)">
+ <title>Sheet.3</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape4-8" v:mID="4" v:groupContext="shape" transform="translate(265.039,-67.4807)">
+ <title>Sheet.4</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape6-10" v:mID="6" v:groupContext="shape" transform="translate(288.197,-113.796)">
+ <title>Sheet.6</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape7-12" v:mID="7" v:groupContext="shape" transform="translate(288.197,-98.3577)">
+ <title>Sheet.7</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape8-14" v:mID="8" v:groupContext="shape" transform="translate(288.197,-82.9192)">
+ <title>Sheet.8</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape9-16" v:mID="9" v:groupContext="shape" transform="translate(288.197,-67.4807)">
+ <title>Sheet.9</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape10-18" v:mID="10" v:groupContext="shape" transform="translate(311.355,-113.796)">
+ <title>Sheet.10</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape11-20" v:mID="11" v:groupContext="shape" transform="translate(311.355,-98.3577)">
+ <title>Sheet.11</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape12-22" v:mID="12" v:groupContext="shape" transform="translate(311.355,-82.9192)">
+ <title>Sheet.12</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape13-24" v:mID="13" v:groupContext="shape" transform="translate(311.355,-67.4807)">
+ <title>Sheet.13</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape14-26" v:mID="14" v:groupContext="shape" transform="translate(334.513,-113.796)">
+ <title>Sheet.14</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape15-28" v:mID="15" v:groupContext="shape" transform="translate(334.513,-98.3577)">
+ <title>Sheet.15</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape16-30" v:mID="16" v:groupContext="shape" transform="translate(334.513,-82.9192)">
+ <title>Sheet.16</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape17-32" v:mID="17" v:groupContext="shape" transform="translate(334.513,-67.4807)">
+ <title>Sheet.17</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape26-34" v:mID="26" v:groupContext="shape" transform="translate(199.484,-113.968)">
+ <title>Sheet.26</title>
+ <rect x="0" y="507.713" width="19.5132" height="15.6106" class="st1"/>
+ </g>
+ <g id="shape27-36" v:mID="27" v:groupContext="shape" transform="translate(199.484,-98.3577)">
+ <title>Sheet.27</title>
+ <rect x="0" y="507.713" width="19.5132" height="15.6106" class="st1"/>
+ </g>
+ <g id="shape28-38" v:mID="28" v:groupContext="shape" transform="translate(199.484,-82.7471)">
+ <title>Sheet.28</title>
+ <rect x="0" y="507.713" width="19.5132" height="15.6106" class="st1"/>
+ </g>
+ <g id="shape29-40" v:mID="29" v:groupContext="shape" transform="translate(199.484,-67.1365)">
+ <title>Sheet.29</title>
+ <rect x="0" y="507.713" width="19.5132" height="15.6106" class="st1"/>
+ </g>
+ <g id="shape30-42" v:mID="30" v:groupContext="shape" transform="translate(68.9749,-115.97)">
+ <title>Sheet.30</title>
+ <rect x="0" y="508.004" width="19.1493" height="15.3195" class="st1"/>
+ </g>
+ <g id="shape31-44" v:mID="31" v:groupContext="shape" transform="translate(68.9749,-100.65)">
+ <title>Sheet.31</title>
+ <rect x="0" y="508.004" width="19.1493" height="15.3195" class="st1"/>
+ </g>
+ <g id="shape32-46" v:mID="32" v:groupContext="shape" transform="translate(68.9749,-85.3307)">
+ <title>Sheet.32</title>
+ <rect x="0" y="508.004" width="19.1493" height="15.3195" class="st1"/>
+ </g>
+ <g id="shape33-48" v:mID="33" v:groupContext="shape" transform="translate(68.9749,-70.0112)">
+ <title>Sheet.33</title>
+ <rect x="0" y="508.004" width="19.1493" height="15.3195" class="st1"/>
+ </g>
+ <g id="shape40-50" v:mID="40" v:groupContext="shape" transform="translate(67.8551,-198.425)">
+ <title>Sheet.40</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape42-52" v:mID="42" v:groupContext="shape" transform="translate(198.153,-205.871)">
+ <title>Sheet.42</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape44-54" v:mID="44" v:groupContext="shape" transform="translate(297.427,-205.871)">
+ <title>Sheet.44</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape46-56" v:mID="46" v:groupContext="shape" transform="translate(170.852,-306.005)">
+ <title>Sheet.46</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape47-58" v:mID="47" v:groupContext="shape" transform="translate(255.236,-388.69)">
+ <title>Sheet.47</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape48-60" v:mID="48" v:groupContext="shape" transform="translate(341.169,-317.821)">
+ <title>Sheet.48</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape49-62" v:mID="49" v:groupContext="shape" transform="translate(344.583,-470.722)">
+ <title>Sheet.49</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape50-64" v:mID="50" v:groupContext="shape" transform="translate(426.955,-399.855)">
+ <title>Sheet.50</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape51-66" v:mID="51" v:groupContext="shape" v:layerMember="0" transform="translate(86.747,-217.661)">
+ <title>Dynamic connector</title>
+ <path d="M0 523.32 L79.21 440.59" class="st2"/>
+ </g>
+ <g id="shape52-72" v:mID="52" v:groupContext="shape" v:layerMember="0" transform="translate(71.6902,-131.289)">
+ <title>Dynamic connector.52</title>
+ <path d="M6.9 523.32 L7.21 468.25" class="st2"/>
+ </g>
+ <g id="shape157-77" v:mID="157" v:groupContext="shape" v:layerMember="0" transform="translate(202.193,-129.579)">
+ <title>Dynamic connector.157</title>
+ <path d="M7.05 523.32 L7.11 459.09" class="st2"/>
+ </g>
+ <g id="shape158-82" v:mID="158" v:groupContext="shape" v:layerMember="0" transform="translate(206.384,-227.814)">
+ <title>Dynamic connector.158</title>
+ <path d="M0 523.32 L-18.25 456.38" class="st2"/>
+ </g>
+ <g id="shape159-87" v:mID="159" v:groupContext="shape" v:layerMember="0" transform="translate(299.837,-223.969)">
+ <title>Dynamic connector.159</title>
+ <path d="M0 523.32 L-99.6 444.53" class="st2"/>
+ </g>
+ <g id="shape160-92" v:mID="160" v:groupContext="shape" v:layerMember="0" transform="translate(295.944,-129.235)">
+ <title>Dynamic connector.160</title>
+ <path d="M2.77 523.32 L10.05 458.6" class="st2"/>
+ </g>
+ <g id="shape161-97" v:mID="161" v:groupContext="shape" v:layerMember="0" transform="translate(277.428,-129.235)">
+ <title>Dynamic connector.161</title>
+ <path d="M0 523.32 L23.4 457.41" class="st2"/>
+ </g>
+ <g id="shape162-102" v:mID="162" v:groupContext="shape" v:layerMember="0" transform="translate(322.104,-129.235)">
+ <title>Dynamic connector.162</title>
+ <path d="M-2.1 523.32 L-10.52 458.55" class="st2"/>
+ </g>
+ <g id="shape163-107" v:mID="163" v:groupContext="shape" v:layerMember="0" transform="translate(341.288,-129.235)">
+ <title>Dynamic connector.163</title>
+ <path d="M0 523.32 L-24.59 457.29" class="st2"/>
+ </g>
+ <g id="shape164-112" v:mID="164" v:groupContext="shape" v:layerMember="0" transform="translate(111.288,-84.3465)">
+ <title>Dynamic connector.164</title>
+ <path d="M0 516.63 L69.49 515.85" class="st4"/>
+ </g>
+ <g id="shape165-115" v:mID="165" v:groupContext="shape" v:layerMember="0" transform="translate(189.998,-324.99)">
+ <title>Dynamic connector.165</title>
+ <path d="M0 523.32 L59.82 464.71" class="st2"/>
+ </g>
+ <g id="shape166-120" v:mID="166" v:groupContext="shape" v:layerMember="0" transform="translate(343.721,-336.095)">
+ <title>Dynamic connector.166</title>
+ <path d="M0 523.32 L-59.4 474.34" class="st2"/>
+ </g>
+ <g id="shape167-125" v:mID="167" v:groupContext="shape" v:layerMember="0" transform="translate(274.631,-407.412)">
+ <title>Dynamic connector.167</title>
+ <path d="M0 523.32 L64.01 464.55" class="st2"/>
+ </g>
+ <g id="shape168-130" v:mID="168" v:groupContext="shape" v:layerMember="0" transform="translate(429.657,-418.308)">
+ <title>Dynamic connector.168</title>
+ <path d="M0 523.32 L-56.3 474.89" class="st2"/>
+ </g>
+ <g id="shape170-135" v:mID="170" v:groupContext="shape" v:layerMember="0" transform="translate(70.9299,-2.87469)">
+ <title>Dynamic connector.170</title>
+ <path d="M6.65 523.32 L7.36 468.25" class="st2"/>
+ </g>
+ <g id="shape171-140" v:mID="171" v:groupContext="shape" v:layerMember="0" transform="translate(201.964,1.13687E-13)">
+ <title>Dynamic connector.171</title>
+ <path d="M6.93 523.32 L7.19 468.25" class="st2"/>
+ </g>
+ <g id="shape172-145" v:mID="172" v:groupContext="shape" v:layerMember="0" transform="translate(267.581,-0.34415)">
+ <title>Dynamic connector.172</title>
+ <path d="M7.07 523.32 L7.1 468.25" class="st2"/>
+ </g>
+ <g id="shape173-150" v:mID="173" v:groupContext="shape" v:layerMember="0" transform="translate(290.626,-0.34415)">
+ <title>Dynamic connector.173</title>
+ <path d="M6.98 523.32 L7.16 468.25" class="st2"/>
+ </g>
+ <g id="shape174-155" v:mID="174" v:groupContext="shape" v:layerMember="0" transform="translate(328.373,-0.34415)">
+ <title>Dynamic connector.174</title>
+ <path d="M-6.86 523.32 L-7.23 468.25" class="st2"/>
+ </g>
+ <g id="shape175-160" v:mID="175" v:groupContext="shape" v:layerMember="0" transform="translate(336.683,-0.344153)">
+ <title>Dynamic connector.175</title>
+ <path d="M6.77 523.32 L7.29 468.25" class="st2"/>
+ </g>
+ <g id="shape176-165" v:mID="176" v:groupContext="shape" transform="translate(3.59712E-14,-85.0395)">
+ <title>Sheet.176</title>
+ <desc>Queue</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="26.2205" cy="502.064" width="52.45" height="42.5197"/>
+ <rect x="0" y="480.804" width="52.4409" height="42.5197" class="st5"/>
+ <text x="7.19" y="506.26" class="st6" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Queue</text> </g>
+ <g id="shape177-168" v:mID="177" v:groupContext="shape" transform="translate(265.039,-113.796)">
+ <title>Sheet.177</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape178-170" v:mID="178" v:groupContext="shape" transform="translate(265.039,-98.3577)">
+ <title>Sheet.178</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape179-172" v:mID="179" v:groupContext="shape" transform="translate(265.039,-82.9192)">
+ <title>Sheet.179</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape180-174" v:mID="180" v:groupContext="shape" transform="translate(265.039,-67.4807)">
+ <title>Sheet.180</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape181-176" v:mID="181" v:groupContext="shape" transform="translate(288.197,-113.796)">
+ <title>Sheet.181</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape182-178" v:mID="182" v:groupContext="shape" transform="translate(288.197,-98.3577)">
+ <title>Sheet.182</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape183-180" v:mID="183" v:groupContext="shape" transform="translate(288.197,-82.9192)">
+ <title>Sheet.183</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape184-182" v:mID="184" v:groupContext="shape" transform="translate(288.197,-67.4807)">
+ <title>Sheet.184</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape185-184" v:mID="185" v:groupContext="shape" transform="translate(311.355,-113.796)">
+ <title>Sheet.185</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape186-186" v:mID="186" v:groupContext="shape" transform="translate(311.355,-98.3577)">
+ <title>Sheet.186</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape187-188" v:mID="187" v:groupContext="shape" transform="translate(311.355,-82.9192)">
+ <title>Sheet.187</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape188-190" v:mID="188" v:groupContext="shape" transform="translate(311.355,-67.4807)">
+ <title>Sheet.188</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape189-192" v:mID="189" v:groupContext="shape" transform="translate(334.513,-113.796)">
+ <title>Sheet.189</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape190-194" v:mID="190" v:groupContext="shape" transform="translate(334.513,-98.3577)">
+ <title>Sheet.190</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape191-196" v:mID="191" v:groupContext="shape" transform="translate(334.513,-82.9192)">
+ <title>Sheet.191</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape192-198" v:mID="192" v:groupContext="shape" transform="translate(334.513,-67.4807)">
+ <title>Sheet.192</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape193-200" v:mID="193" v:groupContext="shape" transform="translate(199.484,-113.968)">
+ <title>Sheet.193</title>
+ <rect x="0" y="507.713" width="19.5132" height="15.6106" class="st1"/>
+ </g>
+ <g id="shape194-202" v:mID="194" v:groupContext="shape" transform="translate(199.484,-98.3577)">
+ <title>Sheet.194</title>
+ <rect x="0" y="507.713" width="19.5132" height="15.6106" class="st1"/>
+ </g>
+ <g id="shape195-204" v:mID="195" v:groupContext="shape" transform="translate(199.484,-82.7471)">
+ <title>Sheet.195</title>
+ <rect x="0" y="507.713" width="19.5132" height="15.6106" class="st1"/>
+ </g>
+ <g id="shape196-206" v:mID="196" v:groupContext="shape" transform="translate(199.484,-67.1365)">
+ <title>Sheet.196</title>
+ <rect x="0" y="507.713" width="19.5132" height="15.6106" class="st1"/>
+ </g>
+ <g id="shape197-208" v:mID="197" v:groupContext="shape" transform="translate(68.9749,-115.97)">
+ <title>Sheet.197</title>
+ <rect x="0" y="508.004" width="19.1493" height="15.3195" class="st1"/>
+ </g>
+ <g id="shape198-210" v:mID="198" v:groupContext="shape" transform="translate(68.9749,-100.65)">
+ <title>Sheet.198</title>
+ <rect x="0" y="508.004" width="19.1493" height="15.3195" class="st1"/>
+ </g>
+ <g id="shape199-212" v:mID="199" v:groupContext="shape" transform="translate(68.9749,-85.3307)">
+ <title>Sheet.199</title>
+ <rect x="0" y="508.004" width="19.1493" height="15.3195" class="st1"/>
+ </g>
+ <g id="shape200-214" v:mID="200" v:groupContext="shape" transform="translate(68.9749,-70.0112)">
+ <title>Sheet.200</title>
+ <rect x="0" y="508.004" width="19.1493" height="15.3195" class="st1"/>
+ </g>
+ <g id="shape201-216" v:mID="201" v:groupContext="shape" transform="translate(67.8551,-198.425)">
+ <title>Sheet.201</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape202-218" v:mID="202" v:groupContext="shape" transform="translate(198.153,-205.871)">
+ <title>Sheet.202</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape203-220" v:mID="203" v:groupContext="shape" transform="translate(297.427,-205.871)">
+ <title>Sheet.203</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape204-222" v:mID="204" v:groupContext="shape" transform="translate(170.852,-306.005)">
+ <title>Sheet.204</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape205-224" v:mID="205" v:groupContext="shape" transform="translate(255.236,-388.69)">
+ <title>Sheet.205</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape206-226" v:mID="206" v:groupContext="shape" transform="translate(341.169,-317.821)">
+ <title>Sheet.206</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape207-228" v:mID="207" v:groupContext="shape" transform="translate(344.583,-470.722)">
+ <title>Sheet.207</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape208-230" v:mID="208" v:groupContext="shape" transform="translate(426.955,-399.855)">
+ <title>Sheet.208</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape209-232" v:mID="209" v:groupContext="shape" v:layerMember="0" transform="translate(86.747,-217.661)">
+ <title>Dynamic connector.209</title>
+ <path d="M0 523.32 L79.21 440.59" class="st2"/>
+ </g>
+ <g id="shape210-237" v:mID="210" v:groupContext="shape" v:layerMember="0" transform="translate(71.6902,-131.289)">
+ <title>Dynamic connector.210</title>
+ <path d="M6.9 523.32 L7.21 468.25" class="st2"/>
+ </g>
+ <g id="shape211-242" v:mID="211" v:groupContext="shape" v:layerMember="0" transform="translate(202.193,-129.579)">
+ <title>Dynamic connector.211</title>
+ <path d="M7.05 523.32 L7.11 459.09" class="st2"/>
+ </g>
+ <g id="shape212-247" v:mID="212" v:groupContext="shape" v:layerMember="0" transform="translate(206.384,-227.814)">
+ <title>Dynamic connector.212</title>
+ <path d="M0 523.32 L-18.25 456.38" class="st2"/>
+ </g>
+ <g id="shape213-252" v:mID="213" v:groupContext="shape" v:layerMember="0" transform="translate(299.837,-223.969)">
+ <title>Dynamic connector.213</title>
+ <path d="M0 523.32 L-99.6 444.53" class="st2"/>
+ </g>
+ <g id="shape214-257" v:mID="214" v:groupContext="shape" v:layerMember="0" transform="translate(295.944,-129.235)">
+ <title>Dynamic connector.214</title>
+ <path d="M2.77 523.32 L10.05 458.6" class="st2"/>
+ </g>
+ <g id="shape215-262" v:mID="215" v:groupContext="shape" v:layerMember="0" transform="translate(277.428,-129.235)">
+ <title>Dynamic connector.215</title>
+ <path d="M0 523.32 L23.4 457.41" class="st2"/>
+ </g>
+ <g id="shape216-267" v:mID="216" v:groupContext="shape" v:layerMember="0" transform="translate(322.104,-129.235)">
+ <title>Dynamic connector.216</title>
+ <path d="M-2.1 523.32 L-10.52 458.55" class="st2"/>
+ </g>
+ <g id="shape217-272" v:mID="217" v:groupContext="shape" v:layerMember="0" transform="translate(341.288,-129.235)">
+ <title>Dynamic connector.217</title>
+ <path d="M0 523.32 L-24.59 457.29" class="st2"/>
+ </g>
+ <g id="shape218-277" v:mID="218" v:groupContext="shape" v:layerMember="0" transform="translate(111.288,-84.3465)">
+ <title>Dynamic connector.218</title>
+ <path d="M0 516.63 L69.49 515.85" class="st4"/>
+ </g>
+ <g id="shape219-280" v:mID="219" v:groupContext="shape" v:layerMember="0" transform="translate(189.998,-324.99)">
+ <title>Dynamic connector.219</title>
+ <path d="M0 523.32 L59.82 464.71" class="st2"/>
+ </g>
+ <g id="shape220-285" v:mID="220" v:groupContext="shape" v:layerMember="0" transform="translate(343.721,-336.095)">
+ <title>Dynamic connector.220</title>
+ <path d="M0 523.32 L-59.4 474.34" class="st2"/>
+ </g>
+ <g id="shape221-290" v:mID="221" v:groupContext="shape" v:layerMember="0" transform="translate(274.631,-407.412)">
+ <title>Dynamic connector.221</title>
+ <path d="M0 523.32 L64.01 464.55" class="st2"/>
+ </g>
+ <g id="shape222-295" v:mID="222" v:groupContext="shape" v:layerMember="0" transform="translate(429.657,-418.308)">
+ <title>Dynamic connector.222</title>
+ <path d="M0 523.32 L-56.3 474.89" class="st2"/>
+ </g>
+ <g id="shape223-300" v:mID="223" v:groupContext="shape" v:layerMember="0" transform="translate(70.9299,-2.87469)">
+ <title>Dynamic connector.223</title>
+ <path d="M6.65 523.32 L7.36 468.25" class="st2"/>
+ </g>
+ <g id="shape224-305" v:mID="224" v:groupContext="shape" v:layerMember="0" transform="translate(201.964,1.13687E-13)">
+ <title>Dynamic connector.224</title>
+ <path d="M6.93 523.32 L7.19 468.25" class="st2"/>
+ </g>
+ <g id="shape225-310" v:mID="225" v:groupContext="shape" v:layerMember="0" transform="translate(267.581,-0.34415)">
+ <title>Dynamic connector.225</title>
+ <path d="M7.07 523.32 L7.1 468.25" class="st2"/>
+ </g>
+ <g id="shape226-315" v:mID="226" v:groupContext="shape" v:layerMember="0" transform="translate(290.626,-0.34415)">
+ <title>Dynamic connector.226</title>
+ <path d="M6.98 523.32 L7.16 468.25" class="st2"/>
+ </g>
+ <g id="shape227-320" v:mID="227" v:groupContext="shape" v:layerMember="0" transform="translate(328.373,-0.34415)">
+ <title>Dynamic connector.227</title>
+ <path d="M-6.86 523.32 L-7.23 468.25" class="st2"/>
+ </g>
+ <g id="shape228-325" v:mID="228" v:groupContext="shape" v:layerMember="0" transform="translate(336.683,-0.344153)">
+ <title>Dynamic connector.228</title>
+ <path d="M6.77 523.32 L7.29 468.25" class="st2"/>
+ </g>
+ <g id="shape230-330" v:mID="230" v:groupContext="shape" transform="translate(9.92126,-185.273)">
+ <title>Sheet.230</title>
+ <desc>Traffic Class</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="26.2205" cy="499.003" width="52.45" height="48.6423"/>
+ <rect x="0" y="474.681" width="52.4409" height="48.6423" class="st5"/>
+ <text x="8.18" y="494.8" class="st6" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Traffic<v:newlineChar/><tspan
+ x="12.05" dy="1.2em" class="st7">Class</tspan></text> </g>
+ <g id="shape231-334" v:mID="231" v:groupContext="shape" transform="translate(113.386,-297.638)">
+ <title>Sheet.231</title>
+ <desc>Pipe</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="26.2205" cy="499.003" width="52.45" height="48.6423"/>
+ <rect x="0" y="474.681" width="52.4409" height="48.6423" class="st5"/>
+ <text x="13.84" y="503.2" class="st6" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Pipe</text> </g>
+ <g id="shape232-337" v:mID="232" v:groupContext="shape" transform="translate(185.669,-382.677)">
+ <title>Sheet.232</title>
+ <desc>Subport</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="32.5984" cy="499.003" width="65.2" height="48.6423"/>
+ <rect x="0" y="474.681" width="65.1969" height="48.6423" class="st5"/>
+ <text x="9.87" y="503.2" class="st6" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Subport</text> </g>
+ <g id="shape233-340" v:mID="233" v:groupContext="shape" transform="translate(284.882,-461.594)">
+ <title>Sheet.233</title>
+ <desc>Port</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="32.5984" cy="499.003" width="65.2" height="48.6423"/>
+ <rect x="0" y="474.681" width="65.1969" height="48.6423" class="st5"/>
+ <text x="20.51" y="503.2" class="st6" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Port</text> </g>
+ </g>
+ </g>
+</svg>
| | | | token bucket per pipe. |
| | | | |
+---+--------------------+----------------------------+---------------------------------------------------------------+
- | 4 | Traffic Class (TC) | 4 | #. TCs of the same pipe handled in strict priority order. |
+ | 4 | Traffic Class (TC) | 13 | #. TCs of the same pipe handled in strict priority order. |
| | | | |
| | | | #. Upper limit enforced per TC at the pipe level. |
| | | | |
| | | | adjusted value that is shared by all the subport pipes. |
| | | | |
+---+--------------------+----------------------------+---------------------------------------------------------------+
- | 5 | Queue | 4 | #. Queues of the same TC are serviced using Weighted Round |
- | | | | Robin (WRR) according to predefined weights. |
+ | 5 | Queue | High priority TCs: 1, | #. All the high priority TCs (TC0, TC1, ...,TC11) have |
+ | | | Lowest priority TC: 4 | exactly 1 queue, while the lowest priority TC (TC12), |
+ | | | | called Best Effort (BE), has 4 queues. |
+ | | | | |
+ | | | | #. Queues of the lowest priority TC (BE) are serviced using |
+ | | | | Weighted Round Robin (WRR) according to predefined weights|
+ | | | | weights. |
| | | | |
+---+--------------------+----------------------------+---------------------------------------------------------------+
Strict priority scheduling of traffic classes within the same pipe is implemented by the pipe dequeue state machine,
which selects the queues in ascending order.
-Therefore, queues 0..3 (associated with TC 0, highest priority TC) are handled before
-queues 4..7 (TC 1, lower priority than TC 0),
-which are handled before queues 8..11 (TC 2),
-which are handled before queues 12..15 (TC 3, lowest priority TC).
+Therefore, queue 0 (associated with TC 0, highest priority TC) is handled before
+queue 1 (TC 1, lower priority than TC 0),
+which is handled before queue 2 (TC 2, lower priority than TC 1) and it conitnues until queues of all TCs except the
+lowest priority TC are handled. At last, queues 12..15 (best effort TC, lowest priority TC) are handled.
Upper Limit Enforcement
'''''''''''''''''''''''
| # | Subport or pipe field | Unit | Description |
| | | | |
+===+=======================+=======+=======================================================================+
- | 1 | tc_time | Bytes | Time of the next update (upper limit refill) for the 4 TCs of the |
+ | 1 | tc_time | Bytes | Time of the next update (upper limit refill) for the TCs of the |
| | | | current subport / pipe. |
| | | | |
| | | | See Section `Internal Time Reference`_ for the |
| | | | explanation of why the time is maintained in byte units. |
| | | | |
+---+-----------------------+-------+-----------------------------------------------------------------------+
- | 2 | tc_period | Bytes | Time between two consecutive updates for the 4 TCs of the current |
+ | 2 | tc_period | Bytes | Time between two consecutive updates for the all TCs of the current |
| | | | subport / pipe. This is expected to be many times bigger than the |
| | | | typical value of the token bucket tb_period. |
| | | | |
Weighted Round Robin (WRR)
""""""""""""""""""""""""""
-The evolution of the WRR design solution from simple to complex is shown in :numref:`table_qos_12`.
+The evolution of the WRR design solution for the lowest priority traffic class (best effort TC) from simple to complex is shown in :numref:`table_qos_12`.
.. _table_qos_12:
| | | |
+-----+---------------------------+-------------------------------------------------------------------------+
-Typically, the subport TC oversubscription feature is enabled only for the lowest priority traffic class (TC 3),
+Typically, the subport TC oversubscription feature is enabled only for the lowest priority traffic class,
which is typically used for best effort traffic,
with the management plane preventing this condition from occurring for the other (higher priority) traffic classes.
-To ease implementation, it is also assumed that the upper limit for subport TC 3 is set to 100% of the subport rate,
-and that the upper limit for pipe TC 3 is set to 100% of pipe rate for all subport member pipes.
+To ease implementation, it is also assumed that the upper limit for subport best effort TC is set to 100% of the subport rate,
+and that the upper limit for pipe best effort TC is set to 100% of pipe rate for all subport member pipes.
Implementation Overview
'''''''''''''''''''''''
The algorithm computes a watermark, which is periodically updated based on the current demand experienced by the subport member pipes,
-whose purpose is to limit the amount of traffic that each pipe is allowed to send for TC 3.
+whose purpose is to limit the amount of traffic that each pipe is allowed to send for best effort TC.
The watermark is computed at the subport level at the beginning of each traffic class upper limit enforcement period and
the same value is used by all the subport member pipes throughout the current enforcement period.
illustrates how the watermark computed as subport level at the beginning of each period is propagated to all subport member pipes.
At the beginning of the current enforcement period (which coincides with the end of the previous enforcement period),
-the value of the watermark is adjusted based on the amount of bandwidth allocated to TC 3 at the beginning of the previous period that
+the value of the watermark is adjusted based on the amount of bandwidth allocated to best effort TC at the beginning of the previous period that
was not left unused by the subport member pipes at the end of the previous period.
-If there was subport TC 3 bandwidth left unused,
+If there was subport best effort TC bandwidth left unused,
the value of the watermark for the current period is increased to encourage the subport member pipes to consume more bandwidth.
-Otherwise, the value of the watermark is decreased to enforce equality of bandwidth consumption among subport member pipes for TC 3.
+Otherwise, the value of the watermark is decreased to enforce equality of bandwidth consumption among subport member pipes for best effort TC.
The increase or decrease in the watermark value is done in small increments,
so several enforcement periods might be required to reach the equilibrium state.
-This state can change at any moment due to variations in the demand experienced by the subport member pipes for TC 3, for example,
+This state can change at any moment due to variations in the demand experienced by the subport member pipes for best effort TC, for example,
as a result of demand increase (when the watermark needs to be lowered) or demand decrease (when the watermark needs to be increased).
When demand is low, the watermark is set high to prevent it from impeding the subport member pipes from consuming more bandwidth.
| | | |
| | | tc3_cons = subport_tc3_credits_per_period - subport_tc3_credits; |
| | | |
- | | | tc3_cons_max = subport_tc3_credits_per_period - (tc0_cons + tc1_cons + |
- | | | tc2_cons); |
+ | | | tc4_cons = subport_tc4_credits_per_period - subport_tc4_credits; |
+ | | | |
+ | | | tc5_cons = subport_tc5_credits_per_period - subport_tc5_credits; |
+ | | | |
+ | | | tc6_cons = subport_tc6_credits_per_period - subport_tc6_credits; |
+ | | | |
+ | | | tc7_cons = subport_tc7_credits_per_period - subport_tc7_credits; |
+ | | | |
+ | | | tc8_cons = subport_tc8_credits_per_period - subport_tc8_credits; |
| | | |
- | | | if(tc3_consumption > (tc3_consumption_max - MTU)){ |
+ | | | tc9_cons = subport_tc9_credits_per_period - subport_tc9_credits; |
+ | | | |
+ | | | tc10_cons = subport_tc10_credits_per_period - subport_tc10_credits; |
+ | | | |
+ | | | tc11_cons = subport_tc11_credits_per_period - subport_tc11_credits; |
+ | | | |
+ | | | tc_be_cons_max = subport_tc_be_credits_per_period - (tc0_cons + tc1_cons + |
+ | | | tc2_cons + tc3_cons + tc4_cons + tc5_cons + tc6_cons + tc7_cons + tc8_cons + |
+ | | | tc9_cons + tc10_cons + tc11_cons); |
+ | | | |
+ | | | if(tc_be_consumption > (tc_be_consumption_max - MTU)){ |
| | | |
| | | wm -= wm >> 7; |
| | | |
tc 3 wred inv prob = 10 10 10
tc 3 wred weight = 9 9 9
+ tc 4 wred min = 28 22 16
+ tc 4 wred max = 32 32 32
+ tc 4 wred inv prob = 10 10 10
+ tc 4 wred weight = 9 9 9
+
+ tc 5 wred min = 28 22 16
+ tc 5 wred max = 32 32 32
+ tc 5 wred inv prob = 10 10 10
+ tc 5 wred weight = 9 9 9
+
+ tc 6 wred min = 28 22 16
+ tc 6 wred max = 32 32 32
+ tc 6 wred inv prob = 10 10 10
+ tc 6 wred weight = 9 9 9
+
+ tc 7 wred min = 28 22 16
+ tc 7 wred max = 32 32 32
+ tc 7 wred inv prob = 10 10 10
+ tc 7 wred weight = 9 9 9
+
+ tc 8 wred min = 28 22 16
+ tc 8 wred max = 32 32 32
+ tc 8 wred inv prob = 10 10 10
+ tc 8 wred weight = 9 9 9
+
+ tc 9 wred min = 28 22 16
+ tc 9 wred max = 32 32 32
+ tc 9 wred inv prob = 10 10 10
+ tc 9 wred weight = 9 9 9
+
+
+ tc 10 wred min = 28 22 16
+ tc 10 wred max = 32 32 32
+ tc 10 wred inv prob = 10 10 10
+ tc 10 wred weight = 9 9 9
+
+ tc 11 wred min = 28 22 16
+ tc 11 wred max = 32 32 32
+ tc 11 wred inv prob = 10 10 10
+ tc 11 wred weight = 9 9 9
+
+ tc 12 wred min = 28 22 16
+ tc 12 wred max = 32 32 32
+ tc 12 wred inv prob = 10 10 10
+ tc 12 wred weight = 9 9 9
+
With this configuration file, the RED configuration that applies to green,
yellow and red packets in traffic class 0 is shown in :numref:`table_qos_18`.
with two or three threads per each packet flow configuration being used.
The RX thread reads packets from the RX port,
classifies the packets based on the double VLAN (outer and inner) and
-the lower two bytes of the IP destination address and puts them into the ring queue.
+the lower byte of the IP destination address and puts them into the ring queue.
The worker thread dequeues the packets from the ring and calls the QoS scheduler enqueue/dequeue functions.
If a separate TX core is used, these are sent to the TX ring.
Otherwise, they are sent directly to the TX port.
frame overhead = 24
number of subports per port = 1
- number of pipes per subport = 4096
- queue sizes = 64 64 64 64
; Subport configuration
[subport 0]
+ number of pipes per subport = 4096
+ queue sizes = 64 64 64 64 64 64 64 64 64 64 64 64 64
tb rate = 1250000000; Bytes per second
tb size = 1000000; Bytes
tc 0 rate = 1250000000; Bytes per second
tc 1 rate = 1250000000; Bytes per second
tc 2 rate = 1250000000; Bytes per second
tc 3 rate = 1250000000; Bytes per second
+ tc 4 rate = 1250000000; Bytes per second
+ tc 5 rate = 1250000000; Bytes per second
+ tc 6 rate = 1250000000; Bytes per second
+ tc 7 rate = 1250000000; Bytes per second
+ tc 8 rate = 1250000000; Bytes per second
+ tc 9 rate = 1250000000; Bytes per second
+ tc 10 rate = 1250000000; Bytes per second
+ tc 11 rate = 1250000000; Bytes per second
+ tc 12 rate = 1250000000; Bytes per second
+
tc period = 10; Milliseconds
tc oversubscription period = 10; Milliseconds
tc 1 rate = 305175; Bytes per second
tc 2 rate = 305175; Bytes per second
tc 3 rate = 305175; Bytes per second
+ tc 4 rate = 305175; Bytes per second
+ tc 5 rate = 305175; Bytes per second
+ tc 6 rate = 305175; Bytes per second
+ tc 7 rate = 305175; Bytes per second
+ tc 8 rate = 305175; Bytes per second
+ tc 9 rate = 305175; Bytes per second
+ tc 10 rate = 305175; Bytes per second
+ tc 11 rate = 305175; Bytes per second
+ tc 12 rate = 305175; Bytes per second
tc period = 40; Milliseconds
tc 0 oversubscription weight = 1
tc 1 oversubscription weight = 1
tc 2 oversubscription weight = 1
tc 3 oversubscription weight = 1
-
- tc 0 wrr weights = 1 1 1 1
- tc 1 wrr weights = 1 1 1 1
- tc 2 wrr weights = 1 1 1 1
- tc 3 wrr weights = 1 1 1 1
+ tc 4 oversubscription weight = 1
+ tc 5 oversubscription weight = 1
+ tc 6 oversubscription weight = 1
+ tc 7 oversubscription weight = 1
+ tc 8 oversubscription weight = 1
+ tc 9 oversubscription weight = 1
+ tc 10 oversubscription weight = 1
+ tc 11 oversubscription weight = 1
+ tc 12 oversubscription weight = 1
+
+ tc 12 wrr weights = 1 1 1 1
; RED params per traffic class and color (Green / Yellow / Red)
tc 3 wred inv prob = 10 10 10
tc 3 wred weight = 9 9 9
+ tc 4 wred min = 48 40 32
+ tc 4 wred max = 64 64 64
+ tc 4 wred inv prob = 10 10 10
+ tc 4 wred weight = 9 9 9
+
+ tc 5 wred min = 48 40 32
+ tc 5 wred max = 64 64 64
+ tc 5 wred inv prob = 10 10 10
+ tc 5 wred weight = 9 9 9
+
+ tc 6 wred min = 48 40 32
+ tc 6 wred max = 64 64 64
+ tc 6 wred inv prob = 10 10 10
+ tc 6 wred weight = 9 9 9
+
+ tc 7 wred min = 48 40 32
+ tc 7 wred max = 64 64 64
+ tc 7 wred inv prob = 10 10 10
+ tc 7 wred weight = 9 9 9
+
+ tc 8 wred min = 48 40 32
+ tc 8 wred max = 64 64 64
+ tc 8 wred inv prob = 10 10 10
+ tc 8 wred weight = 9 9 9
+
+ tc 9 wred min = 48 40 32
+ tc 9 wred max = 64 64 64
+ tc 9 wred inv prob = 10 10 10
+ tc 9 wred weight = 9 9 9
+
+ tc 10 wred min = 48 40 32
+ tc 10 wred max = 64 64 64
+ tc 10 wred inv prob = 10 10 10
+ tc 10 wred weight = 9 9 9
+
+ tc 11 wred min = 48 40 32
+ tc 11 wred max = 64 64 64
+ tc 11 wred inv prob = 10 10 10
+ tc 11 wred weight = 9 9 9
+
+ tc 12 wred min = 48 40 32
+ tc 12 wred max = 64 64 64
+ tc 12 wred inv prob = 10 10 10
+ tc 12 wred weight = 9 9 9
+
Interactive mode
~~~~~~~~~~~~~~~~
| Pipe | Config (4k) | Traffic shaped (token bucket) | Inner VLAN tag |
| | | | |
+----------------+-------------------------+--------------------------------------------------+----------------------------------+
- | Traffic Class | 4 | TCs of the same pipe services in strict priority | Destination IP address (0.0.X.0) |
+ | Traffic Class | 13 | TCs of the same pipe services in strict priority | Destination IP address (0.0.0.X) |
| | | | |
+----------------+-------------------------+--------------------------------------------------+----------------------------------+
- | Queue | 4 | Queue of the same TC serviced in WRR | Destination IP address (0.0.0.X) |
- | | | | |
+ | Queue | High Priority TC: 1, | Queue of lowest priority traffic | Destination IP address (0.0.0.X) |
+ | | Lowest Priority TC: 4 | class (Best effort) serviced in WRR | |
+----------------+-------------------------+--------------------------------------------------+----------------------------------+
Please refer to the "QoS Scheduler" chapter in the *DPDK Programmer's Guide* for more information about these parameters.