Traffic Shaping

Traffic Shaping

Traffic Shaping involves in queueing traffic rather than dropping it.

Traffic Shaping terminology-

Tc - Time interval (in milliseconds) over which the committed burst (Bc) can be sent. Tc = Bc/CIR

Bc - Committed burst size (in bits). This is the amount of traffic that can be sent over an interval Tc

CIR - Committed Information Rate (in bits per second). The rate defined in the traffic contract

Shaped Rate - The rate at which a particular traffic is shaped. It could be same as CIR or higher than CIR.

Be - Excess burst size (in bits). This is the number of bits that can be sent beyond Bc

A Cisco router divides 1 second into multiple sub-seconds. Above, 1 second is divided into 8 intervals (125ms each). Each interval is called Tc. During each Tc, the router sends a burst of traffic which is called Bc.

For example, to achieve a CIR (contract rate) of 128Kbps, the Cisco router will send 16000 bits (Bc = 128000 * 0.125) during the first interval and stop sending any further traffic until the next interval. So, if the access link speed is 1.544Mbps, it will take the Cisco router 10.3ms to send 16000 bits. For the rest of the interval, it will not send any traffic.

Traffic Shaping with no Excess Burst:

Traffic shaping involves the concept of Token Bucket. In the token bucket scenario, each token lets you send 1 bit. The size of the token bucket is Bc. There are two actions that revolve around token bucket and the tokens-

    1. Re-filling of bucket with new tokens
    2. Consumption of tokens by the Shaper to earn the right to send packets

At the beginning of each Tc interval, the token bucket is filled with tokens, but no more than Bc. If there is not enough room in the bucket as the tokens were not used up in the previous interval, some tokens spill out. Those spilled tokens cant be used.

Every time a packet is sent, the Shaper spends tokens from the bucket to buy the right to forward the packet. When the Shaper tries to send the packet, and there are not enough tokens in the bucket, the Shaper must wait until the next interval when the bucket is refilled.

In Cisco IOS, traffic shaping with no excess burst can be configured using shape average <shaping-rate> command from policy-map configuration mode. The "shaping-rate" could be same as CIR or slightly higher than CIR but less than access-link rate.

The following example shows the configuration of average traffic shaping. Traffic shaping is applied to outgoing TCP traffic generated via Iperf.

Traffic shaping with no excess burst

class-map P5001
 match access-group 101
!
policy-map SHAPE
 class 5001
  shape average percent 50
!
interface fastethernet 0/1
 bandwidth 1000
 service-policy output SHAPE
!

Cisco recommends only the shaping rate should be specified and the inbuilt algorithm will calculate appropriate Bc. Cisco IOS chooses Tc=24ms here. The Bc is calculated as 12000 bits. The Increment value indicates the number of tokens replenished every Tc interval. Also note, the Shaping Active suggests no shaping. The reason being if there is no traffic flowing through the interface, shaping will not be in effect. The Byte Limit indicates the size of the token bucket.

output

Router# show policy-map interface fastethernet 0/1
 FastEthernet0/1
  Service-policy output: SHAPE
    Class-map: P5001 (match-all)
      5368 packets, 7598188 bytes
      5 minute offered rate 99000 bps, drop rate 0 bps
      Match: access-group 101
      Traffic Shaping
           Target/Average   Byte   Sustain   Excess    Interval  Increment
             Rate           Limit  bits/int  bits/int  (ms)      (bytes)
               50 (%)                0 (ms)      0 (ms)
           500000/500000    3000   12000     12000     24        1500
        Adapt  Queue     Packets   Bytes     Packets   Bytes     Shaping
        Active Depth                         Delayed   Delayed   Active
        -      0         5367      7597242   5343      7587026   no
    Class-map: class-default (match-any)
      457 packets, 33974 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any

When Iperf was initiated to generate TCP traffic with 4 different flows, the maximum throughput it could achieve was 481kbps (~500kbps). This is almost equal to the shaping rate 500kbps.

Iperf output

C:\>iperf -c 192.168.2.10 -p 5001 -P 4 -t 60
------------------------------------------------------------
Client connecting to 192.168.2.10, TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[1912] local 192.168.1.10 port 1053 connected with 192.168.2.10 port 5001
[1880] local 192.168.1.10 port 1054 connected with 192.168.2.10 port 5001
[1864] local 192.168.1.10 port 1055 connected with 192.168.2.10 port 5001
[1848] local 192.168.1.10 port 1056 connected with 192.168.2.10 port 5001
[ ID] Interval       Transfer     Bandwidth
[1864]  0.0-60.5 sec   888 KBytes   120 Kbits/sec
[1848]  0.0-60.9 sec   896 KBytes   120 Kbits/sec
[1880]  0.0-61.2 sec   904 KBytes   121 Kbits/sec
[1912]  0.0-61.2 sec   904 KBytes   121 Kbits/sec
[SUM]  0.0-61.2 sec  3.51 MBytes   481 Kbits/sec

Traffic Shaping with Excess Burst:

Traffic shaping implements Be by making the token bucket bigger; of the size of (Bc + Be). There are now Bc+Be worth of tokens in the bucket. Still, at the start of each interval Tc, the Shaper fills the bucket with Bc amount of tokens. However, if due to inactivity during some interval (like in figure 1 above), the bucket can accommodate those Bc worth of tokens since its size has been increased. Now, in the next Tc interval, if there are more bits to send, the Shaper can use these Bc+Be tokens to send that amount of bits. In essence, exceed the shaping rate as long as there are extra tokens left in the bucket.

The diagram below shows that since there was no activity during fifth Tc interval, the Shaper used up those extra tokens and sent Bc+Be worth of bits in the sixth interval.

Shaping at Peak rate:

With shape peak, CB shaping allows Bc+Be bits to be sent every interval even if there has been no period of inactivity. The Shaper replenishes Bc+Be tokens into the bucket.

In Cisco IOS, peak traffic shaping can be configured using shape peak <shaping-rate> command from policy-map configuration mode.

The following example shows the configuration of peak traffic shaping. Traffic shaping is applied to outgoing TCP traffic generated via Iperf.

peak traffic shaping

class-map P5001
 match access-group 101
!
policy-map SHAPE
 class 5001
  shape peak percent 50
!
interface fastethernet 0/1
 bandwidth 1000
 service-policy output SHAPE
!

Again, the Cisco IOS calculates the appropriate Bc and Be values. It uses Tc=24ms.

Router output

Router# show policy-map interface fastethernet 0/1
 FastEthernet0/1
  Service-policy output: SHAPE
    Class-map: P5001 (match-all)
      5335 packets, 7555414 bytes
      5 minute offered rate 95000 bps, drop rate 0 bps
      Match: access-group 101
      Traffic Shaping
           Target/Average   Byte   Sustain   Excess    Interval  Increment
             Rate           Limit  bits/int  bits/int  (ms)      (bytes)
               50 (%)                0 (ms)      0 (ms)
          1000000/500000    3000   12000     12000     24        3000
        Adapt  Queue     Packets   Bytes     Packets   Bytes     Shaping
        Active Depth                         Delayed   Delayed   Active
        -      0         5334      7554468   5317      7550502   no
    Class-map: class-default (match-any)
      170 packets, 12700 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any

The Iperf output shows that the maximum throughput achieved this time is almost double than average shaping rate.

Iperf output

C:\>iperf -c 192.168.2.10 -p 5001 -P 4 -t 60
------------------------------------------------------------
Client connecting to 192.168.2.10, TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[1912] local 192.168.1.10 port 1061 connected with 192.168.2.10 port 5001
[1880] local 192.168.1.10 port 1062 connected with 192.168.2.10 port 5001
[1864] local 192.168.1.10 port 1063 connected with 192.168.2.10 port 5001
[1848] local 192.168.1.10 port 1064 connected with 192.168.2.10 port 5001
[ ID] Interval       Transfer     Bandwidth
[1864]  0.0-60.4 sec  1.73 MBytes   240 Kbits/sec
[1880]  0.0-60.5 sec  1.73 MBytes   240 Kbits/sec
[1912]  0.0-60.5 sec  1.73 MBytes   240 Kbits/sec
[1848]  0.0-60.5 sec  1.73 MBytes   240 Kbits/sec
[SUM]  0.0-60.5 sec  6.93 MBytes   960 Kbits/sec