MCX516A-CCAT 100G DAC üzerinde mesh: lshw 40Gbit/s diyor, tek bir iperf3 stream'i 21 Gbit/s'de tavan yapıyor
Üç node'lu bir cluster çalıştırıyoruz, node'lar birbirine doğrudan 100G DAC üzerinden kablolanmış, yolda switch yok, ve interface'ler bir broadcast bond'a konmuş ki replication trafiğinin kendi fabric'i olsun. Üzerine gerçek yük bindirmeden önce bir baseline istedim, ama rakamlar birbiriyle uyuşmuyor.
- 3x Mellanox ConnectX-5 EN, MCX516A-CCAT, dual-port QSFP28
- her node çifti arasında bir 100G DAC
- AMD EPYC host'lar, üçünde de Proxmox
ethtool gayet memnun:
# ethtool ens1
Settings for ens1:
Supported link modes: 100000baseCR4/Full
Advertised link modes: 100000baseCR4/Full
Speed: 100000Mb/s
Duplex: Full
Link detected: yes
lshw memnun değil:
# lshw -class network
*-network
description: Ethernet interface
vendor: Mellanox Technologies
capacity: 40Gbit/s
Ve iki node arasında iperf3 kabaca 21 Gbit/s'de duruyor, ki bu ikisinin de yakınından geçmiyor.
Şimdiye kadar yapılanlar:
- kabloyu her iki karttaki ikinci porta taşıdım, değişen yok
- aynı tipten başka bir DAC taktım, değişen yok
- link tüm süre boyunca up kalıyor, sayaçlarda tırmanan hata yok
Peki bu iki araçtan hangisi bana yalan söylüyor, ve peşine düşmem gereken kablo mu, kart mı yoksa driver mı?
Comments 5
Paylaştığın hiçbir şey DAC'ı işaret etmiyor. Burada birbiriyle ilgisiz iki şey oluyor.
Birincisi, uyuşmazlık.
lshw -class networkkendi hesapladığı bir kapasite rakamı basıyor, ve bu kartlarda 100G'de up gelen bir link için gönül rahatlığıylacapacity: 40Gbit/sdiyecektir. Negotiate edilen hızethtool'un raporladığı, ve seninki100000baseCR4/Fulladvertise edilmişkenSpeed: 100000Mb/sdiyor. Bu tarafı sorunsuz, düzeltilecek bir şey yok.İkincisi, throughput. Başka bir şeye dokunmadan önce slotu kontrol et:
LnkCap8GT/s derkenLnkSta2.5GT/s'de eğitim aldıysa, telin çok altında bir tavana kilitlenmişsin demektir ve ne kadar kablo değiştirirsen değiştir yardımcı olmaz. Kartı yeniden otur ve gerçekten tam genişlik için kablolanmış bir slotta oturduğundan emin ol.Sonra tek stream ile ölçmeyi bırak:
Bu sınıf bir host'ta tek bir core'un sana vereceği şey kabaca 21 Gbit/s civarı, yani o rakam tek başına sana çok az şey söylüyor. Çalışma sırasında CPU'yu izle ve idle state'lerin ne yaptığına da bak: burst'ler arasında derin C-state'lere düşen core'lar bu hızda gerçek bant genişliğine mal oluyor.
Değiştirmek için herhangi bir şey sipariş etmeden önce, o kart için
lspci -vvçıktısındakiLnkStasatırını ve kullandığın tam iperf3 komut satırını paylaş. 100G'de tek bir stream tek bir CPU core'unu ölçer, linki değil, ve insanlar bunun için günler harcıyor. Ayrıca test ederken ikinci portun gerçekten mesh'in diğer bacağını taşıdığını doğrula, boşta durmadığını: tek bir slotun iki canlı 100G portu beslemesi tek porttan farklı bir bütçedir. Şimdiliklshw'yi bir kenara bırakırdım, bu soru için doğru araç değil.C-state kısmına bir düzeltme: host'lar EPYC ise, bu tarz her thread'e yapıştırılan
intel_idleayarları sana hiçbir şey kazandırmaz, o driver AMD'de yolun üzerinde hiç değil. Bende işe yarayan kaldıraç kernel command line'dakiprocessor.max_cstate=2oldu. Aynı fikir, farklı platform. O yazının geri kalanı geçerliliğini koruyor, özellikle de negotiate edilen hızılshw'den okumama kısmı.Biraz farklı bir arıza, aynı donanım ailesi, slot meselesi çözülünce elemeye değer: ConnectX-5 QSFP28 portlarının doğrudan mesh'i layer 3'te çok kolay yanlış gidiyor. Bende MCX516A-CCA_Ax üzerinde üç node vardı, DOCA 2.8.0 driver ile firmware 16.35.4030, MCP1600-C003E30L 3 m bakır DAC ile kablolanmış. Her link 100 Gbps'de active raporlanıyordu ve tek bir ping bile geçmiyordu. Altı mesh interface'inin hepsinde, yolda hiçbir yerde switch olmadan, tek bir 10.5.5.x subnet'inden adresler vardı, yani kernel'ın belirli bir hedefin hangi fiziksel porta ait olduğuna karar vermesinin bir yolu yoktu. Node çifti başına bir subnet, 10.5.5.x, 10.5.6.x ve 10.5.7.x, ve çalışmaya başladı. Kimse bakırı suçlamadan önce üç kutuda da
ip aveip routeçalıştırmaya değer.İki nokta da isabet etti.
lspci -vv, kartınLnkCap8GT/s iken 2.5GT/s'de eğitim aldığını gösterdi, yani bir numaralı şüpheli buydu. Kartları üç kutuda da başka slotlara taşıdım,LnkStaartık 8GT/s'de geliyor, veiperf3 -P 8ile aynı node çifti tek stream rakamını hemen geçti.Broadcast bond'dan da vazgeçtim ve mesh'i RSTP ile Open vSwitch üzerinde yeniden kurdum. Üç CPU thread'ine ve iki porta yayılmış iperf ile şu anda yaklaşık 95 Gbit/s ölçüyorum, ki bu cluster'ın işi için line rate'e yeterince yakın.
lshwhâlâ 40Gbit/s'de ısrar ediyor ve artık ona bakmayı bıraktım.