ECMP, MPLS Load Balance

fat or entropy label

The hashing in the MPLS Core vary from vendors, let’s take the example of Cisco, for IP payloads the load-balancing is done on IP header (L3/L4 fields) and for non-IP payloads it is done on the last label, this is required to preserve the characteristics of the emulated service (VPWS).
The routers distinguish the IP from non-IP payloads by checking the version field of the paylods: 4 for IPv4 and 6 for IPv6. But unfortunately if you have some non-IP payloads that starts with 4 or 6, the load-balancing can be messy, and it already happens with MAC addresses starting with 4 ;). So Cisco highly recommend to use for non-IP payloads in the L2VPN the CW which starts with a 0.

MPLS hashing

Kısaca payload eğer ip değil ise, Ethernet over mpls vs gibi, ve L2 info mac adresi 4 veya 6 ile başlıyor ise hatlar üzerinde istenmeyen bir yük dağılımı olabilir. Burada istenmeyen dağılımdan kasıt ;  L2 VPN / PW kullanımında out-of sync paketlerin istenmez. Bu durumda kaynak ve alıcı arasında L2 VPN paketlerinin hep aynı path takip etmesi istenir. Yol üzerinde LSP router/ P router kendi üzerinden geçen trafik için hangi servisin verildiğini bilmez peki neye göre seçim yapar. En hızlı yöntem son etiketten sonra ki bitlere bakmaktır. Eğer 4/6 ile başlıyorsa IP demektir. Burada mac adreslerinin hep 00-0 ile başlayacağı var sayılmıştır. Günümüzde ise 4 ve 6 ile başlayan mac adresleri bulunmaktadır. Bu ise L2VPN için istenmeyen davranışa yol açabilir. Bunu önlemek için control-word kullanımı çözüm olabilir.

http://tools.ietf.org/html/draft-ietf-mpls-ecmp-bcp-03

A less obvious case is when the packets of a given flow happen to
have constant values in the fields upon which IP ECMP would be per-
formed. For example if an ethernet frame immediately follows the
label and the LSR does not do ECMP on IPv6, then either the first
nibble will be 0x4 or it will be something else. If the nibble is
not 0x4 then no IP ECMP is performed, but Label ECMP may be per-
formed. If it is 0x4, then the constant values of the MAC addresses
overlay the fields that would have been occupied by the source and
destination addresses of an IP header. As a result the ECMP algo-
rithm would be feed a constant value and thus would always return the
same result

Control word kullanımı bir çözüm olabilir.

Bunun için IETF iki çözüm yolu önermiştir :

– Flow Label, FAT label : L2VPN uygulanır. Tüm mpls etiketlerine ek bir flow label eklenir. Giriş ve çıkış mpls cihazları (ingress and egress LER) LSP kurulması sırasında LDPvb ile flow label kullanımını sinyalleşirler veya statik olarak belirtilir. Sonuçda mpls networkunde load balancing ek bir etikette kullanımda olur.LSP’lerde paket mpls gibi görülür ve mpls load balance göre, en altaki etikete göre load balance yapılırlar.

– Entropy Label : L2VPN, L3VPN için uygulanabilir. İki adet ek etiket kullanılır. Bunlarda ilki entrophy label kullanıldığını belirten, reserverd label olan 7’dir. Daha sonra flow label benzet enhtophy label gelir. Bu iki etiket transport label’dan sonra gelir. Dolayısı ile birden fazla transpot label kullanımı durmunda? Bakınız draft-kini-mpls-entropy-label-src-stacked-tunnels-01.

Bitstream access (PPPoL2TPoEoMPLS, tunnelerin EoMPLS ile PE router’a oradan’da BNG taşınması) P routerlarda bundle kullanılıyor ve mpls trafiği buradan geçiyor ise yükün dağılımında sorunlar olabilir (ether+mpls+mpls+ether (ttvlan)+ip (l2tp ipleri)+l2tp+ppp (kullanıcı paketdi). Bu durumda kullanıcı trafiğini (ppp) hash’e almanın bir yolu yoktur. Bu durumda bundle interface’i default olarak ip load balance (l2tp tunnel ipleri) veya mac load balance yapabilir. MAC göre yapılması pek tercih edilmiyebilir. Genelde her bir SSG trafiği ayrı bir vlan üzerinden, ayrı bir subint üzerinden, alınır. Subint’ler de genelde aynı mac’ı kullanır. Burada ip kullanılması veya FAT label kullanılması daha uygun olabilir. Bundle interfacelere eşit olarak dağılması zaten sorun değildir, zira TT’den alırkende trafiğin farklı bundle interfacelere dağılımı gerekecekdir.

TT=Provider PE=P=PE=BNG : TT ve Provider PE arasında nasıl dağılıyor ise Provider PE ve P arasındada benzer şekilde dağılacakdır. Eğer TT Provider PE arasını bundle yerine manual (vlan dağıtarak) yapılır ise benzer bir dağılım PE ve P arasındada otomatikman olacakdır (Her bir vlan bir src/dst ip veya SSG bağlantısına denk gelir. TT ve PE arasında’da bundle kullanılacak ise servislerin vlanların dağılımına dikkat edilmelidir (mac bazlıda sorun olabilir).

Linkeler :

https://www.nanog.org/meetings/nanog57/presentations/Tuesday/tues.general.SnijdersWheeler.MACaddresses.14.pdf

https://supportforums.cisco.com/discussion/10788591/mplsvpn-network-load-balancing-core

https://supportforums.cisco.com/document/111291/asr9000xr-loadbalancing-architecture-and-characteristics

IOS XR/ASR 9000 Load balance

ASR 9000 Load Balance

İlk olarak dikkat edilmesi gereken konular ;

  • Load balance iki farklı konuda karşımıza çıkar, ECMP/UCMP veya bundle-ether üzerinde.
  • Load balance için hangi algoritmanın kullanılacağına IN yönünde karar verilir ( IN NPU).
  • Hash algoritması ne olduğu ne kadar verimli dağıtıldığını anlama konusun da önemlidir (CRC32 veya MD5). IOX XR CRC32 kullanır. Dolayısı yük dağılımı ile ilgili sorun yaşayıp yaşamadığınıza karar vermeden önce, test trafiğinizin veya gerçek trafiğinizin içeriğini iyi seçmeniz ve anlamanız gerekir. Özellik ile test sırasında yapılan bir hata, benzer source ip’ler kullanmaktır( 192.168.1.1,.192.168.2.1 v.b). Bu durumda CRC 32 sonucu istenilen yük dağılımını sağlanamaz.
  • MPLS kullanımında mpls encap ve header mantığını iyi bilmek gerekir.
  • Hash sonucu çıkış interfacelerden birinin down olması durumunda paket iletiminin nasıl etkilendiğini önemlidir (Sticky ECMP).
  • ECMP’nin recursive (BGP), non-recursive (IGP) olması durumu önemlidir.

Load balance için hash code hesaplaması (32 bit CRC) paketin platforma girdiği NPU üzerinde yapılır. NPU’dan önce PHY üzerinde’de yapılabilme durumuda vardır. Bunun için 100G kartların özelliklerine bakmak gerekir.

Hash için hangi alanların kullanılacağı ise paket tipine göre değişir.

Burada önemli olan ECMP/UCMP veya Bundle olması durumuna göre değişir. Eğer ikisi bir arada, ECMP/UCMP sonucu her bir path yani outgoing interface bir bundle’ı işaret edebilir. Bu durumda ilk olarak ECMP/UCMP hash’i sonuçlanır ve hangi inteface’den pakedin gitmesi gerektiği hesaplanır. Daha sonra bundle hash algoritması çalıştırılır ve bundle’ın hangi inteface’inden gitmesi gerektiği bulunur. Bu durumda ECMP/UCMP değişiklik sonucu bundle etkilenmez (routing change).

MPLS kullanımı durumunda LSP üzerinde, LER dışındaki cihazlar, LSR üzerlerinden geçen trafiğin hangi servisi kullandığını (L3 MPLS VPN, L2 MPLS, PW vb) hakkında bilgi sahibi değillerdir. Basitçe mpls etiketlerine göre iletim yaparlar. Load-balance algoritmaları’da mpls etiketine göre olur.

Dolayısı ile etiket bilgisi aynı olan trafik aynı path üzerinde gider. Trafiğin bundle üyeleri arasında dağılımın yapmak için LER üzerinde yapılandırma yapılması gerekir. LSR’ın mpls etiketi altına girerek verilen servisi bulmaya çalılışması zor olabilir. Dolayısı ile servis bir PW bile olsa LSR üzerinde bundle üyeleri için load-balance olması isteniyor ise, LER’in verilen servis için nasıl load-balance olmasını istiyor ise kullanılan hash algoritması sonucunda trafiğe farklı etiketler ataması gerekir. Servisin sonlandığı LER’inde kullanılan bu farklı etiketi veya etiket alanını anlaması gerekir. FAT-Pseudowire ve FAT label:).

We do have problem with src or dst based ip load balance with labelled ip traffic (L3 MPLS VPN traffic). It seems its not working with IOS XR 5.3.4 currently waiting for TAC case result. 

It seems that src-ip / or dst-ip based is load-balencing for labelled packets on L3 bundle interfaces!. It is mentioned in one of the support forum post from Xander that for labeled packets ( number of labels <=4) and if its ip load-balancing will done as if its ip. But I am unable to find the same explanation in the official ASR9000 configuration guides. 

Also look for persistent load balancing method for servers.

Yararlı Linkler :

  • https://supportforums.cisco.com/t5/service-providers-documents/asr9000-xr-load-balancing-architecture-and-characteristics/ta-p/3124809
  • https://null.53bits.co.uk/index.php?page=asr9000-load-balancing
  • Cisco Live BRKSPG 2904 sessionları. Özellik ile her dönem bu session takip edilmesinde yarar vardır. Yeni kartların kullanımı ve yeni IOS XR update’leri gelen değişiklik ler bunlara eklenir.
  • Persistent load balancing / sticky ECMP : https://xrdocs.io/cloud-scale-networking/blogs/2018-06-15-persistent-load-balancing/