From patchwork Tue Oct 29 13:19:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jasvinder Singh X-Patchwork-Id: 62147 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 1C6A6A00BE; Tue, 29 Oct 2019 13:19:53 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7C3311BEB1; Tue, 29 Oct 2019 13:19:51 +0100 (CET) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 3EAC21BEA8 for ; Tue, 29 Oct 2019 13:19:49 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 29 Oct 2019 05:19:48 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,243,1569308400"; d="scan'208";a="350963869" Received: from silpixa00381635.ir.intel.com (HELO silpixa00381635.ger.corp.intel.com) ([10.237.223.229]) by orsmga004.jf.intel.com with ESMTP; 29 Oct 2019 05:19:44 -0700 From: Jasvinder Singh To: dev@dpdk.org Cc: cristian.dumitrescu@intel.com, john.mcnamara@intel.com, marko.kovacevic@intel.com Date: Tue, 29 Oct 2019 13:19:40 +0000 Message-Id: <20191029131942.50298-1-jasvinder.singh@intel.com> X-Mailer: git-send-email 2.21.0 MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 1/3] sched: documentation update X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Updates documentation to reflect the changes in the qos scheduler library. Signed-off-by: Jasvinder Singh Acked-by: Cristian Dumitrescu --- .../prog_guide/img/sched_hier_per_port.png | Bin 58973 -> 0 bytes .../prog_guide/img/sched_hier_per_port.svg | Bin 0 -> 1463490 bytes doc/guides/prog_guide/qos_framework.rst | 112 ++++++++++++++---- 3 files changed, 90 insertions(+), 22 deletions(-) delete mode 100644 doc/guides/prog_guide/img/sched_hier_per_port.png create mode 100644 doc/guides/prog_guide/img/sched_hier_per_port.svg diff --git a/doc/guides/prog_guide/img/sched_hier_per_port.png b/doc/guides/prog_guide/img/sched_hier_per_port.png deleted file mode 100644 index 462e88aaab4418d8893137659a08ee43f97842d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58973 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 aKmY;|fB*y_009U<00Izz00f3h;Qs?U4yb1U literal 0 HcmV?d00001 diff --git a/doc/guides/prog_guide/qos_framework.rst b/doc/guides/prog_guide/qos_framework.rst index a7527b21c..476cdd953 100644 --- a/doc/guides/prog_guide/qos_framework.rst +++ b/doc/guides/prog_guide/qos_framework.rst @@ -136,7 +136,7 @@ Each queue hosts packets from one or multiple connections of the same type belon .. _figure_sched_hier_per_port: -.. figure:: img/sched_hier_per_port.* +.. figure:: img/sched_hier_per_port.svg Scheduling Hierarchy per Port @@ -171,7 +171,7 @@ The functionality of each hierarchical level is detailed in the following table. | | | | 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. | | | | | | @@ -183,8 +183,13 @@ The functionality of each hierarchical level is detailed in the following table. | | | | 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. | | | | | | +---+--------------------+----------------------------+---------------------------------------------------------------+ @@ -730,10 +735,10 @@ Implementation of Strict Priority Scheduling 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 ''''''''''''''''''''''' @@ -753,14 +758,14 @@ as described in :numref:`table_qos_10` and :numref:`table_qos_11`. | # | 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. | | | | | | @@ -815,7 +820,7 @@ as described in :numref:`table_qos_10` and :numref:`table_qos_11`. 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: @@ -977,33 +982,33 @@ with the third approach selected for implementation. | | | | +-----+---------------------------+-------------------------------------------------------------------------+ -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. @@ -1084,10 +1089,27 @@ The highest value for the watermark is picked as the highest rate configured for | | | | | | | 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; | | | | | @@ -1555,6 +1577,52 @@ A sample RED configuration is shown below. In this example, the queue size is 64 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`. From patchwork Tue Oct 29 13:19:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jasvinder Singh X-Patchwork-Id: 62148 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id D5F12A00BE; Tue, 29 Oct 2019 13:20:06 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 0DC9E1BECA; Tue, 29 Oct 2019 13:19:55 +0100 (CET) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 5DE211BEAF for ; Tue, 29 Oct 2019 13:19:50 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 29 Oct 2019 05:19:49 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,243,1569308400"; d="scan'208";a="350963877" Received: from silpixa00381635.ir.intel.com (HELO silpixa00381635.ger.corp.intel.com) ([10.237.223.229]) by orsmga004.jf.intel.com with ESMTP; 29 Oct 2019 05:19:47 -0700 From: Jasvinder Singh To: dev@dpdk.org Cc: cristian.dumitrescu@intel.com, john.mcnamara@intel.com, marko.kovacevic@intel.com Date: Tue, 29 Oct 2019 13:19:41 +0000 Message-Id: <20191029131942.50298-2-jasvinder.singh@intel.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191029131942.50298-1-jasvinder.singh@intel.com> References: <20191029131942.50298-1-jasvinder.singh@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 2/3] examples/qos_sched: documentation update X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Update documentation according to the changes made to qos sample app. Signed-off-by: Jasvinder Singh Acked-by: Cristian Dumitrescu --- doc/guides/sample_app_ug/qos_scheduler.rst | 92 +++++++++++++++++++--- 1 file changed, 81 insertions(+), 11 deletions(-) diff --git a/doc/guides/sample_app_ug/qos_scheduler.rst b/doc/guides/sample_app_ug/qos_scheduler.rst index cdd29d90c..b5010657a 100644 --- a/doc/guides/sample_app_ug/qos_scheduler.rst +++ b/doc/guides/sample_app_ug/qos_scheduler.rst @@ -22,7 +22,7 @@ There are two flavors of the runtime execution for this application, 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. @@ -129,18 +129,28 @@ The profile file has the following format: 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 @@ -156,17 +166,32 @@ The profile file has the following format: 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) @@ -191,6 +216,51 @@ The profile file has the following format: 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 ~~~~~~~~~~~~~~~~ @@ -295,11 +365,11 @@ This application classifies based on the QinQ double VLAN tags and the IP destin | 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. From patchwork Tue Oct 29 13:19:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jasvinder Singh X-Patchwork-Id: 62149 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0ED3DA00BE; Tue, 29 Oct 2019 13:20:15 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id AD14C1BEDD; Tue, 29 Oct 2019 13:19:56 +0100 (CET) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 2825E1BEA8 for ; Tue, 29 Oct 2019 13:19:50 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 29 Oct 2019 05:19:50 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,243,1569308400"; d="scan'208";a="350963885" Received: from silpixa00381635.ir.intel.com (HELO silpixa00381635.ger.corp.intel.com) ([10.237.223.229]) by orsmga004.jf.intel.com with ESMTP; 29 Oct 2019 05:19:49 -0700 From: Jasvinder Singh To: dev@dpdk.org Cc: cristian.dumitrescu@intel.com, john.mcnamara@intel.com, marko.kovacevic@intel.com Date: Tue, 29 Oct 2019 13:19:42 +0000 Message-Id: <20191029131942.50298-3-jasvinder.singh@intel.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191029131942.50298-1-jasvinder.singh@intel.com> References: <20191029131942.50298-1-jasvinder.singh@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 3/3] examples/ip_pipeline: documentation update X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Updates documentation for traffic manager cli as per the changes made to qos scheduler library. Signed-off-by: Jasvinder Singh Acked-by: Cristian Dumitrescu --- doc/guides/sample_app_ug/ip_pipeline.rst | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/doc/guides/sample_app_ug/ip_pipeline.rst b/doc/guides/sample_app_ug/ip_pipeline.rst index 4da0fcf89..56014be17 100644 --- a/doc/guides/sample_app_ug/ip_pipeline.rst +++ b/doc/guides/sample_app_ug/ip_pipeline.rst @@ -249,27 +249,35 @@ Traffic manager tmgr subport profile - + + + - + pps + qsize + + + Add traffic manager pipe profile :: tmgr pipe profile - + + + - + + Create traffic manager port :: tmgr rate spp - pps - qsize - - fo mtu cpu + fo + mtu + cpu Configure traffic manager subport ::