Portál AbcLinuxu, 30. dubna 2025 23:59
Svého času jsem provedl experiment - náhodou se mi na stole sešlo železo, které ho umožňovalo: dvě síťovky Myri-10G, externí RAIDový box s řadičem Areca na úrovni ARC-1680 (ale propoj PCI-e pouze x4), nějaký server s čipsetem Intel 5000P (CPU Xeon tuším 5300 series), jako koncové zařízení (iSCSI initiator) nějaký "průmyslový desktopový" board tuším s i945, který podporuje v x16 slotu i jiné věci než grafiku (zde iSCSI kartu).
Desktop | Server | | RAID | 10Gb Eth <======> 10Gb Eth | PCIe x4 <=====> PCIe x4
Použil jsem "alternativní" softwarový SCSI target pro Linux SCST, který mj. obsahuje také iSCSI front-end. Jako back-end umí použít libovolné blokové zařízení buď s použitím systémového bufferingu (VM), nebo bez bufferingu v "direct módu" (bDIRECT), nebo snad i s přímým relayem SCSI příkazů. SCST žije celý v kernelu a je optimalizován na průchodnost.
Mám pocit, že Intel I/OAT v čipsetu 5000 jsem nepoužil - jednak mi to v Linuxu nechtělo chodit, jednak to možná nechodí se síťovkou jinou než Intel, jednak to vlastně v Linuxu má odlehčovat jenom "copy to user", což je dost k ničemu, když SCST žije celý v kernelu (viz níže).
Samotný RAID mi dával přímo proti serveru sekvenční LBA čtení cca 600 MBps. Když jsem ho přes iSCSI namapoval "klientovi" (initiatoru) na tom desktopovém stroji, tak desktopový stroj z toho vytáhl sekvenční LBA čtení 500 MBps (v jedné relaci). Provedl jsem jenom nějaké lehké ladění dostupnými prostředky:
Ono je nakonec možné, že pro většinu aplikací ty sekvenční MBps jsou honěním trička. Důležitým číslem jsou IOps. Pokud uvážíte nevelkou standardní hloubku TCQ front na několika zúčastněných vrstvách, tak se do toho poměrně přímo promítá doba zpracování jednotlivého požadavku, potažmo i přenosové latence. Latence na běžném Ethernetu (neřku-li TCP/IP) jsou nepochybně delší, než latence na klasických storage sběrnicích.
V tomto směru bohužel žádné benchmarky nemám.
Strašlivá režie vrstev TCP/IP má několik faset. Pokud se týče ztráty kapacity na vrub enkapsulace, jsou to tuším nějaké jednotky procent při MTU=1500 (= ztráta zanedbatelá). Jiná věc je "processing overhead", tj. spotřeba procesorového výkonu na počítání algoritmů a spotřeba průchodnosti sběrnic na "zbytečné" kopie dat. Nějaká čísla jsou tady, ovšem podle mých experimentů zjevně neaktuální pro dnešní hardware - mají snad nějakou relativní hodnotu. A ještě jiná věc je režie způsobená reakcemi "TCP/IP flow control" (regulační smyčky) - tj. rozjezd spojení, přibržďování oknem, a nedejbože retransmit při ztrátě paketu, ó hrůzo.
Protože mě storage hardware v podstatě neživí, dovolím si pár odhadů selským rozumem a laických pivních prohlášení "Hrozný overhead iSCSI" znamená víceméně tolik, že netriviální logika vrstev TCP/IP se nesnadno implementuje v čistém hardwaru, a navíc zejména za nepříznivých okolností (vytížení sítě směsí různého provozu) může projevovat náhodné vyšší latence. Proto si vymyslíme jednodušší enkapsulaci celých FC rámců, která pojede přímo nad Ethernetem, nebude mít vlastní garanci doručení, proto bude implementačně jednoduchá. Garanci doručení pak doženeme jednoduchými recepty, známými z minulosti (absolutní priorita pro náš provoz, a (802.3x)802.1bb flow-control v Ethernetu) - že jednoduché recepty mohou mít své mouchy, zejména v prostředí se složitým mixem "best effort" provozu, to ať si vyřeší někdo jiný. Když dáme povinně 10Gb Ethernet, tak s trochou štěstí bude úzké hrdlo někde jinde (reálné targety nebo initiatory). Ostatně "přibržďování toku" si v moderním SCSI provozu řeší TCQ s podobným efektem, jako má TCP receive window (až na to, že ztráta FCoE paketu znamená SCSI command timeout, což je docela závažná chyba).
Abych nebyl zase tolik zbytečně ošklivý, ono má asi smysl, v nějaké složitější síti, tj. v systému, kde spolu soupeří spousta datových toků na vrstvách síťové komunikace a storage komunikace, aby storage komunikace měla obecně přednost - aby se provoz škrtil a hltil přednostně na internetové vrstvě (kde je to jaksi snáze omluvitelné), ale aby počítače měly pokud možno vždycky dostupné disky. Je možné, že to v globále vede k lepší stabilitě systémů. Podmínkou je, aby nějaká aplikace nežrala IO bandwidth "nadoraz, co to dá" - to je právě problém s absolutní priorizací. Stejně jsem ale zvědav, jak jsou na FCoE ošetřeny problémy typu "head of line blocking". A mimochodem, té priorizace by se možná dalo dosáhnout třeba i levněji s klasickými switchi, pomocí 802.1p, ne?
Jestli někdo potřebuje storage síťku na capture HD videa, tzn. vyžaduje striktně deterministické odezvy (dokonce nejen od blokové vrstvy, ale od filesystému, chacha) tak by možná měl sáhnout spíš po FC než po FCoE.
iSCSI HBA třeba od Adaptecu mívaly tuším svého času prostě jenom síťovku Intel, která byla vybavena trochu jinou option ROMkou a ovladači pro Windows, aby se to v BIOSu tvářilo jako SCSI řadič. Čili nějaký kompletní offload iSCSI do hardwaru se v podstatě nekonal.
Když se FCoE před časem začalo objevovat, mluvilo se o tom, že ethernetové switche pro tento provoz jsou stavěny speciálně na super-nízké latence. Čili není to normální kancelářský Ethernet. Máte někdo představu, kolik tyhle hračky stojí? Je to cenově blízko ke konvenčnímu Ethernetu, nebo spíš k FibreChannelu?
>> Strašlivá režie vrstev TCP/IP má několik faset.
>>
> doteď jsem byl dojmu, že fazeta je skosená hrana.
> nebo se normálně používá i v tomhle kontextu?
>
obrazně řečeno. Několik aspektů. Fakt je, že jsem to slovo takhle použité potkal asi spíš v anglině než v češtině. Omlouvám se tedy za neblahý novotvar
F.Ryšánek
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.