Internet DRAFT - draft-chen-nvo3-load-banlancing

draft-chen-nvo3-load-banlancing







Network Working Group                                            H. Chen
Internet-Draft                                                  W,. Song
Intended status: Standards Track                     Huawei Technologies
Expires: April 30, 2015                                 October 27, 2014


            Load balancing without packet reordering in NVO3
                   draft-chen-nvo3-load-banlancing-00

Abstract

   Traditional ECMP can not balance loads well in the data center
   network because it splits loads at the granularity of flow.  Packets
   belong to a single flow have to be delivered along the same path.
   Though it is able to avoid packet reordering, it may degrade the
   bandwidth utilization.

   This document describes method of splitting a single flow to across
   multiple parallel paths without causing packet reordering, which is
   more effective when large flows exist.  The specific path selection
   algorithm is NOT discussed in this document.

Requirements Language

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in [RFC2119].

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at http://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on April 30, 2015.







Chen & Song              Expires April 30, 2015                 [Page 1]

Internet-Draft               Load Balancing                 October 2014


Copyright Notice

   Copyright (c) 2014 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
   2.  Terminology . . . . . . . . . . . . . . . . . . . . . . . . .   3
   3.  Rational for flowlet-based splitting  . . . . . . . . . . . .   3
   4.  Flowlet-based load balancing  . . . . . . . . . . . . . . . .   5
     4.1.  Unicast . . . . . . . . . . . . . . . . . . . . . . . . .   5
     4.2.  Multicast . . . . . . . . . . . . . . . . . . . . . . . .   6
   5.  The state machine . . . . . . . . . . . . . . . . . . . . . .   6
   6.  Header extension examples . . . . . . . . . . . . . . . . . .   7
     6.1.  VXLAN header extension  . . . . . . . . . . . . . . . . .   7
     6.2.  NVGRE header extension  . . . . . . . . . . . . . . . . .   8
   7.  Acknowledge frame format  . . . . . . . . . . . . . . . . . .   9
   8.  Security Considerations . . . . . . . . . . . . . . . . . . .   9
   9.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .   9
   10. References  . . . . . . . . . . . . . . . . . . . . . . . . .   9
     10.1.  Normative References . . . . . . . . . . . . . . . . . .   9
     10.2.  Informative References . . . . . . . . . . . . . . . . .   9
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  10

1.  Introduction

   Large flows are not rare in current data center network.  Typical
   examples include: 1) large amount data copying during the process of
   virtual machine migration, 2) storage traffic when employing the
   iSCSI technique.  In order to increase bandwidth utilization, ECMP
   routing is introduced to balance the loads.  However, existing ECMP
   technique is splitting loads at the granularity of flow, which means
   all packets from to a single flow have to be delivered along the same
   path.  Though ECMP is able to avoid packet reordering, it may degrade
   the bandwidth utilization.





Chen & Song              Expires April 30, 2015                 [Page 2]

Internet-Draft               Load Balancing                 October 2014


   One basic idea to increase bandwidth utilization is splitting a
   single flow into several bursts of packets, and delivering them along
   parallel paths.  The requirement for the splitting method is that
   reordering can be avoided.  Flowlet-based splitting [FLARE]can meet
   above requirement.  Flowet is defined as bursts of packets from a
   single flow that are separated by large enough gaps.

   Utilizing the time gap between conseutive burst of packets from a
   single flow, flowlet-based ECMP is splitting large flow into flowlets
   provided that the time gap is larger than the path delay.  These
   flowets will be delivered along multiple parallel paths and reoriding
   will not happen due to the in-sequence arrival.

2.  Terminology

   This document makes use of the following terms, additional terms are
   defined in [RFC7348]:

   ECMP Equal-Cost Multipath

   iSCSI internet Small Computer Storage Interface

   NVGRE Network Virtualization using Generic Routing Encapsulation

   NVO3 Network Virtualization over layer 3

   VM Virtual Machine

   VXLAN Virtual eXtensible Local Area Network

3.  Rational for flowlet-based splitting

   In data center network more than 90% loads are delivered over TCP.
   For the TCP flow, packet reordering takes place when three or more
   packets are received before a "late" packet, and in this case TCP
   enters fast-retransmit mode which consumes extra bandwidth (which
   could potentially cause more loss, decreasing throughput) as it
   attempts to unnecessarily retransmit the delayed packet(s)[RFC2991].
   So per-packet ECMP which randomly hashes packets to paths is rarely
   used in modern data center network.

   MPTCP[RFC6182]is one feasible method to increase bandwidth without
   causing packet reorderding.  But it adds more complexity to an
   already complex transport layer burdened by new requirements such as
   low latency and burst tolerance in datacenters[CONGA].






Chen & Song              Expires April 30, 2015                 [Page 3]

Internet-Draft               Load Balancing                 October 2014


   Besides, load balancing is best done in the network.  The transport
   layer should NOT be complicated.  Specifically, the existing TCP
   protocol should be utilized without modification.

   Flowlet-based switching can meet above requirement especially for the
   leaf-spine topoligies in data center network.  Flowlets are bursts of
   packets from a single flow that are separated by large enough idle
   interval or we say the gaps.  Splitted into several flowlets, large
   flow can be delivered across multiple parallel paths, rather than be
   delivered along a single path all the while.  In this case, potential
   congestion can be avoided and bandwidth utilization get increased.

   The idle intervals between conseutive packets are inherent for the
   tcp flow due to TCP's burstiness.  As shown in Figure 1, given two
   consecutive packets in a TCP flow, if the first packet leaves the
   ingress NVE before the second packet reaches the egress NVE, the
   ingress NVE can route the second packet-and subsequent packets from
   this flow-on to other available path with no threat of reordering.

                                .................
                                .               .
                                .  -----------  .
                  +-------+     . /           \ .     +-------+
         TCP      |Ingress|     ./ L3 overlay  \.Pkt1 | Egress|
       --flow --->|  NVE  |-----.    Network    .->---|  NVE  |---->
                  |       |     .\             /.     |       |
                  +-------+     . \Pkt2       / .     +-------+
                                .  ->---------  .
                                .               .
                                .................

          Figure 1: Rational of splitting TCP flow into flowlets

   If during the time interval the previous packet reach the egress NVE,
   no packets of this TCP flow were sent out from the Ingress NVE, then
   this time interval could be considered as large enough to be used to
   split the TCP flow.  In order to find the 'gap', the Egress NVE may
   reply with an acknowledge packet for each received packet, with some
   information to idenitify which packet it replies to.

   The Ingress NVE may decide whether this time interval is large enough
   according to comparaing the indentification of latest sent packet and
   the received Acknowledge packet.  If this time interval is large
   enough, the result of comparation should be equal, which means no
   packets of this flow are sent out during this time interval.
   Otherwise, there must be some packets sent out during the time
   interval, so it can not be considered as the large enough gap to be




Chen & Song              Expires April 30, 2015                 [Page 4]

Internet-Draft               Load Balancing                 October 2014


   used to split the TCP flow.  The identification metioned here shoud
   include the flow ID and the its sequence ID in the flow.

4.  Flowlet-based load balancing

4.1.  Unicast

   For the unicast traffic, the NVE will process the outgoing/incoming
   packets as description below:

   1.   The Ingress NVE computes the identifier for the incoming flow.
        TPackets from this flow will be populated with the same flow ID.

   2.   Packets from a single flow will be indexed by a sequence ID
        field in an increamental manner.  For example, the first packet
        with sequence ID equals to 0 and the next packet with sequence
        ID increased to 1 and so on.

   3.   For these packets originated from the Ingress NVE, the sender
        flag in the outer header will be set to 1 and the receiver flag
        will be set to 0 to indicate that it is a acknowledge packet.

   4.   The Ingress NVE has to maintain a flow state table for the
        active flows with each entry recording the flow ID and sequence
        ID.  Notice that the comunication is full-deplex, each NVE could
        act as Ingress NVE for one outgoing flow and as a receiver NVE
        for the another incoming flow at the same time.  So each NVE may
        has a flow state table for all of the outgoing TCP flows.

   5.   There is also aging time associate with the flow state table,
        The aging time can be configured through NVE's management
        interface.  One option to caculate this value is refer to the
        way [TCP] does.  In this way the flow state table size can be
        limited in a small size and won't take too much system resource.

   6.   The Egress NVE will reply to the Ingress with an acknowledge
        packet after successfully reciveing each packet.  The
        acknowledage packet is a encapsulated ipv4 packet with a vacant
        payload.  Its source ipv4 address field will be populated with
        the Egress NVE's ip address and its destination ipv4 address
        will be populated with the Ingress NVE's ip address.

   7.   The sender flag in the outer header will be set to 0 and the
        receiver flag will be set to 1 to indicate that it is a
        acknowledge packet.  The flow ID field and sequence ID field of
        the acknowledge packet will be copied from the corresponding
        incoming packet directly.




Chen & Song              Expires April 30, 2015                 [Page 5]

Internet-Draft               Load Balancing                 October 2014


   8.   On receiving the acknowledge packet, the Ingress NVE will look
        up its state map to find if there is any entry has the same flow
        ID as the acknowledge packet own.  If there is no matching
        entry, the Ingress NVE will drop the acknowledge packet.

   9.   If the Ingress NVE finds that there is a matching entry, it will
        compare the sequence ID field of this entry with the sequence ID
        field in the outer header of the acknowledge packet.

   10.  If the comaring results is equal, it indicates that no
        subsequent packets from this flow are sent from the Ingress NVE
        before receiving this acknowledge packet.  So it can be assumed
        that the time interval between this sent packet and its
        subsequent packet is large enough.  In this case, the Ingress
        NVE will distribute this flow to other path according to
        routinng selection algorithm without causing packet reordering.

   11.  Otherwise, there must be subsequent packets of this flow are
        sent before receiving the acknowledge packet.  It indicates that
        the time interval is not large enough and packet reording may
        happen if switching this flow to other path.  So the Ingress NVE
        will maintain current path for this flow until the large gap
        appears.

          flow ID                      sequence ID
      +-------------+---------------+---------------+---------------+
      |  flow ID A  |  sequence A1  |  sequence A2  |      ...      |
      +-------------+---------------+---------------+---------------+
      |  flow ID B  |  sequence B1  |  sequence B2  |      ...      |
      +-------------+---------------+---------------+---------------+
      |     ...     |      ...      |      ...      |      ...      |
      +-------------+---------------+---------------+---------------+
      |  flow ID X  |  sequence X1  |  sequence X2  |      ...      |
      +-------------+---------------+---------------+---------------+

                 Figure 2: flow state table resides in NVE

4.2.  Multicast

   For the multicast traffic, the load balancing mechanism will not be
   employed.  The multicast packets will be routed according to the
   exsting routing techniques.

5.  The state machine







Chen & Song              Expires April 30, 2015                 [Page 6]

Internet-Draft               Load Balancing                 October 2014


                                      +---------+
                                      |  init   | Reset Aging Timer
                                      +---------+
                                           |
                                           v
                                    +------------+
                                    |  Recv(pkt) |
                                    +------------+
                         from NVE          |     from host
                     +---------------------v-------------+
                     |                                   |
                     v                                   v
             +-----------------+               +-------------------+
             |pkt.hdr.Tflag==1?|               |GenerateflowID(pkt)|
             +-----------------+               +-------------------+
                 Yes   |   No                            |
           +-----------v--------+                        v
           |                    |              +-------------------+
           v                    v              |any match entry in |
 +------------------+  +-----------------+     |flow state table ? |
 |  pkt.hdr.seqID   |  | foward to upper |     +-------------------+
 |        ==        |  | layer for futher|      No       |    Yes
 | this.entry.seqID?|  | processing      |     +-------- v---------+
 +------------------+  +-----------------+     |                   |
    Yes    |     No                            |                   |
        +--v---------------+                   v                   v
        |                  |         +-------------------+     +--------------------+
        v                  v         | new flow, create  |     | existing flow,     |
+-------------+     +------------+   | an entry for it.  |     | this.entry.seqID ++|
|  MATCH      |     |Do NOT MATCH|   +-------------------+     +--------------------+
| swith path  |     | maintain   |            |                           |
+-------------+     +------------+            v                           v
                                     +-------------------+     +--------------------+
                                     |this.entry.flowID =|     | foward pkt to path |
                                     |    pkt.hdr.flowID |---->|  selection module  |
                                     |this.entry.seqID =0|     |                    |
                                     +-------------------+     +--------------------+

                        Figure 3: The state machine

6.  Header extension examples

6.1.  VXLAN header extension

   The extension format of VXLAN header is shown as below.  In order to
   distinguish different flow and index the flowlets belong to the same
   flow, four fields have to be added in vxlan header: sender flag,
   receiver flag, flow ID and sequence ID.



Chen & Song              Expires April 30, 2015                 [Page 7]

Internet-Draft               Load Balancing                 October 2014


   VXLAN header: 8 bytes field, as shown in Figure 4, reuse the higher
   24 bits of the reserved fields in VXLAN header.

      - S (1 bit) : sender flag, default set to 0, set to 1 to indicate
      it is the Ingress NVE.

      - T (1 bit) : receiver flag, default set to 0, set to 1 to
      indicate it is the egress NVE.

      - flow ID (12 bits) : employed to ideantify different flows, reuse
      the higher 8 bits of the reserved fields in VXLAN header.

      - sequence ID (12 bits): employed to index the flowlet within the
      same flow, reuse 8 bits following the Flow ID.

   The lower 8 bits of the reserved fields in VXLAN head are set to zero
   on transmission and ignored on receipt.

   Outer UDP Header: as suggested in section 5 of [RFC7348], the source
   port field is use to realize the load balancing of the VM-to-VM
   traffic across the VXLAN overlay.  It will be set as the hash value
   of the inner ethernet frame's header.The UDP source port number will
   be calculated in the dynamic/private port range 49152-65535.

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
     Outer UDP Header:
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |  Source Port(load balancing)  |       Dest Port = VXLAN Port  |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |           UDP Length          |        UDP Checksum           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     VXLAN Header:
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |R|R|R|R|I|S|T|R|       flow ID         |      Sequence ID      |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |        VXLAN Network Identifier (VNI)         |   Reserved    |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                  Figure 4: VXLAN Frame Format extension

6.2.  NVGRE header extension

   The extension format of NVGRE header is shown as below.  In order to
   distinguish different flow and index the flowlets from the same flow,
   the sequence field have to be enabled in NVGRE header.  The sequence
   flag shoud be set to 1.  Lowest two bits of sequence field are used



Chen & Song              Expires April 30, 2015                 [Page 8]

Internet-Draft               Load Balancing                 October 2014


   to indicate sender flag and receiver flag respectively, and the
   residual 30 bit can be used to indicate the sequence ID.  The
   combination of VSID field and flowID field (32 bit) can be used to
   identify the outgoing packet.

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
   NVGRE Header:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |0| |1|1|   Reserved0     | Ver |   Protocol Type 0x6558        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |               Virtual Subnet ID (VSID)        |    FlowID     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |S|T|                  Sequence ID                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

7.  Acknowledge frame format

   The acknowledge packet is a general encapsulated IPv4 packet with
   vacant payload.  The encapsulation format could be VXLAN or NVGRE or
   other format.  According to the ethernet frame format defined in
   [IEEE802.3], the minimum size of acknowledge packet has to be set to
   42 bytes.

8.  Security Considerations

   Security considerations are not addressed in this document.

9.  IANA Considerations

   No IANA action is needed for this document.

10.  References

10.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997.

10.2.  Informative References

   [CONGA]    Alizadeh, M., Edsall, T., Dharmapurikar, S., Vaidyanathan,
              R., Chu, K., Fingerhut, A., and V. Lam, "CONGA:
              Distributed Congestion-aware Load Balancing for
              Datacenters", 2014.

   [FLARE]    Kandula, S., Katabi, D., Sinha, S., and A. Berger,
              "Dynamic Load Balancing Without Packet Reordering", 2007.



Chen & Song              Expires April 30, 2015                 [Page 9]

Internet-Draft               Load Balancing                 October 2014


   [IEEE802.1Q]
              "IEEE Standard for Local and metropolitan area networks--
              Media Access Control (MAC) Bridges and Virtual Bridged
              Local Area Networks IEEE Std 802.1Q-2011 (Revision of IEEE
              Std 802.1Q-2005)", 2011.

   [IEEE802.3]
              "IEEE Standard for Information Technology--
              Telecommunications and Information Exchange Between
              Systems--Local and Metropolitan Area Networks--Specific
              Requirements Part 3: Carrier Sense Multiple Access With
              Collision Detection (CSMA/CD) Access Method and Physical
              Layer Specifications", April 2014.

   [RFC2991]  Thaler, D. and C. Hopps, "Multipath Issues in Unicast and
              Multicast Next-Hop Selection", November 2000.

   [RFC6182]  Ford, A., Raiciu, C., Handley, M., Barre, S., and J.
              Iyengar, "Architectural Guidelines for Multipath TCP
              Development", 2011.

   [RFC7348]  Mahalingam, M., Dutt, D., Duda, K., Agarwal, P., Kreeger,
              L., Sridhar, T., Bursell, M., and C. Wright, "Virtual
              eXtensible Local Area Network (VXLAN): A Framework for
              Overlaying Virtualized Layer 2 Networks over Layer 3
              Networks", August 2014.

   [TCP]      ISI, USC., "Transmission Control Protocol", 1981.

Authors' Addresses

   Hao Chen
   Huawei Technologies
   101 Software Ave., Yuhuatai Dist.
   Nanjing, Jiangsu  210012
   China

   Phone: +86 025-5662-4440
   Email: philips.chenhao@huawei.com












Chen & Song              Expires April 30, 2015                [Page 10]

Internet-Draft               Load Balancing                 October 2014


   Wei Song
   Huawei Technologies
   101 Software Ave., Yuhuatai Dist.
   Nanjing, Jiangsu  210012
   China

   Phone: +86 025-5662-6297
   Email: songwei80@huawei.com











































Chen & Song              Expires April 30, 2015                [Page 11]