Zalezi na masine. Pokud jde ILOM (neplest s iLO) tak u nekterych cervenych serveru vyzaduje i restart hosta - z duvodu update FPGA komponent a update BIOSu. Narozdil treba od Dellu cervene masiny maji v ILOMu casto i novy BIOS - treba zkontrolovat changelog a ten se updatuje az pri startu hosta.
I u DRACu kde jsou jednotlive firmwary pomerne dobre oddeleny bylo v nekterych pripadech doporucovano restartovat hosta co nejdrive to bude mozne.
Ono BMC si na tech platformach nezije uplne oddelene od zbytku systemu.
Proc neverim na napoj nesmrtelnosti? Protoze ho vyrabim a ty changelogy obcas posilame dellu,oracle,HP na integraci s jejich fw.
Mám celkem bohaté zkušenosti se SuperMicro X11SAE-F (dvě workstationy/ servery) a boot je na tom dlouhý, ale BMC v tom na skoro 100% prsty nemá/ nerebootuje se.
Jinak zajímavý posun by mohl přinést do normálnějších serverů oxide.computer. Ta firma se snaží dělat open compute servery, které mají v managementu minimum funkcí, zato ale pořádně udělaných. Všechno z toho by mělo být přístupné pomocí API a nějaké CLI přímo z operačního systému toho daného serveru. Jejich "On The Metal" podcast byl taky zajímavý, kdyby to někoho zajímalo.
HW diagnostika. A i kdyz preskocis vetsinu diagnostiky tak porad ti zbyva dost veci co musis zinicializovat sekvencne s prodlevami ale nemuzes to udelat hned.
Pokud ma treba server jen 8 cpu po 24 corech uz to hodne prodlouzi boot.
Je to dan za to ze vsechno je nacpano hromadou veci uvnitr SoC a i na obycejne PC se nabalila spousta HW subsystemu.
Inicializace nekterych inteligentnich sitovek ktere maji hodne offloadu, hromadu front, VxLAN filtering etc. je proste za trest. Stejne tak radicu
Neni to tak dlouho co kompletni diagnosticky boot Slunickove Mx rady HW trval 30 minut. Pri diag bootu to osmatavalo i JTAG interface jednotlivych cpu boardu.
No zrovna dneska jsem restartoval server od HPE a trvalo to čistého času 2 hodiny, z toho cca 90% času server stál na "starting drivers".. Ale tohle je víceméně výjimka (vypadá to na bug v ILO), většinou to stihne do 15 minut (což je pořád dost), ale nedivím se, vzhledem k tomu co všechno ty "biosy" dnes umí (v podstatě startuje celý operační systém).
I těch 15 minut mi přijde jako opravdu dlouho. Myslím, že většina z toho co zdržuje bude reálně nějaká lenost výrobce/ dodavatele BIOSu resp. UEFI resp. firmwarů a různé další příliš dlouhé timeouty a checky.
Podle mě není nikde psáno, že by nemohl server bootovat v rámci třeba pár sekund + pár sekund pro operační systém. Nejen, že tam bude všude možně spousta prodlev stylem, radši tam dáme par sekund sleep a nemusíme tu řešit nějaký souběh...
Různé činnosti jako RAM conditioning jistě lze rozdělit a bootovat dál s menším množstvím a zbytek jader a RAM připojit třeba později až se prověří. I několik TB RAM se přečte za pár sekund. Rozhodně na různé úrovně pseudo hot-plug jsou různé technologie v reálných serverech již dnes pod pojmem RAS zabudované a počítá se s tím i kvůli virtualizaci a různým big.little architekturám. Dnes už dokonce umíme udělat oboustranné USB, tak možná že by se i výměna CPU nebo RAM za běhu mohla dostat z IBM mainframů do normálních 2-socketových serverů. Zavolal by se program třeba 'cpuunmount 0' nebo tak a potom by se prostě ten procesor vytáhl. Po připojení nového by se zavolalo 'cpumount 0' a bylo by. Podobně s RAM. A když jsme u toho, tak by mělo být rovnou možné i nastartovat dva nezávislé operační systémy na dvousocketovém serveru nebo aspoň vyměnit jádro za běhu systému (ano takový live-patch, ale čistěji, který by uměl třeba i "live-unpatch").
Omlouvám se, jsem trochu snílek :-)
Tak ano, takový hot-plug je a občas i funguje. :-)
Můžu ale ten druhý procesor na dvousocketové desce skutečně za běhu a bez jakéhokoliv restartu vyndat?
Jako power gatovat jednotlivá jádra je zajímavé, ale opravdu je to podstatně jiný problém než řešení toho, že najednou polovina RAM není dostupná resp. se musí vyčistit a věci, které byly v cache druhého procesoru najednou jsou dostupné jen z RAM. Taky PCIe zařízení navěšená na určitý procesor přestanou být dostupná a to včetně south bridge typicky v případě prvního procesoru tzv. socket 0 - proto předpokládám, že na x86 v současné době hot-plug celých CPU možný není. Možná u 4 nebo 8 socketových kousků s nějakými speciálními multiplexory, ale nevím o tom.
Vím jen o tom, že výměna Central Processor Complex je nebo přinejmenším byla možná na IBM Z-series: https://www.ibm.com/support/knowledgecenter/zosbasics/com.ibm.zos.zcourses/zcourses_MFHWinternals.pdf
Myslím hardwarově. Že to softwarově jde jsem už psal - kvůli virtualizaci to je nutné.
Kdybyste mohl poskytnout odkaz na dokumentaci, která to u konkrétního aktuálního serveru tvrdí, že to na Intelu nebo AMD lze, tak bych byl vděčný. Já jsem totiž během pár minut na nic nepřišel. Odpojují se třeba celé nody např. v blade-serveru, ale to je v podstatě počítač se svým vlastním operačním systémem a ne jen CPU + RAM.
Hotplug je typicky jen u PCIe / PCI-X, ale u pameti nebo cpu nikoliv, tam je beznejsi "chip-kill" z RAS, kdy se nefunkcni pulka vypne, jen se pak prichazi o kontrolu funkce (je to podobne jako RAID-1 - vse jede do doby kdy nastane chyba zdvojene).
Nektere specialni servery umi ale cpu hotplug, napr.:
HP ProLiant ML570 G2 Server
https://support.hpe.com/hpesc/public/docDisplay?docId=c01579159&docLocale=en_US
Obávám se, že ten hot-plug se týká jen větráků chladiče CPU a ne CPU samotného. Navíc G2 je asi fakt starý model není aktuální něco jako G10? :-)
Ano, chip-kill je mi známý. Netýká se to náhodou doslova jednolivých čipů na modulech RAM?
V praxi jsem nic z toho nezažil, obyčejně buduji HA nad několika uzly a ne v rámci uzlů samotných. Je to v praxi ekonomičtější.
Haha, tak to maj pekne blbe napsany :)
Osobne si nemyslim si ze existuje skutecny fyzicky hotplug v X86, mam hromadu knizek ohledne architektur do P4, a kdyz to do te doby neexistovalo (jen ten RAS a mirroring pametovych kanalu), tak nepredpokladam ze to zavedli u te nasledne "spotrebky" kterou delaj do dnesniho dne.
Mozna by Itanium mohlo byt privetivejsi (a taky ze je), ale problem hotplugu je taky moznost to jednoduse vymenit.. takze cpu musi byt na nejake cartridge, a holt doba se vyvijela tak, ze RAM je navazana tesne na CPU - takze nejde menit jenom procesor, ale musela by se menit rovnou cela police - coz je snad uz spravnej priklad: HP Integrity rx7620 (ma 2x cell board, kazdy ma svoje pameti a 4 cpu, meni se cely "cell", tj. pulka serveru)
Pokud leností nazývate i to, že je certifikační proces/audit proběhl v cenově rozumné hladině pak ano. Ale obecně si myslím, že je to dáno tím, že servery se nerebootujou tak často aby zákazníka pálily jednotky minut (a někdy i desítky, nám ale vše bootuje do 5 minut) víc než spolehlivost a stabilita serveru. Ono natřískat něco funkcemi umí kdejakej "Acer" ale pak je to v servisu během záruční doby sedmkrát. To si nemůžete dovolit u serveru ani když je oprava plně hrazená.
Jak je mysleno toto?
Existuje jedna výjimka, kdy restart pomocí volání kexec není plnohodnotnou náhradou běžného restartu. Je to v případě, kdy obraz initramfs obsahuje kromě startovacího souborového systému také aktualizaci mikrokódu. Tu kexec provést neumí.
Protoze v prikladech mate specifikovan jak kernel, tak initramfs, takze nic nebrani tomu, aby nove initramfs aplikovalo microcode update.
Mozna je vyjimka jina a netyka se samotneho kexec - a to to, ze ten microcode update lze uzamknout proti pozdejsim aktualizacim (coz je imho blbost - ale muze to vynucovat bezpecnostni politika firmy, a pak kazdy update znamena chte-nechte cold boot).
UEFI jede v protected mode, zavedenému modulu se předává řízení na CPL=0. Pochybuji, že by pak bootloader (grub) po zavedení linuxového jádra přepínal zpět do real mode. Navíc update microcode se dá udělat i za běhu ( https://software.intel.com/security-software-guidance/secure-coding/loading-microcode-os ).
BTW Ano, při kexecu se nepřepíná režim procesoru, ale to "jenom" JMP do nového jádra je dost komplikované, alespoň na architekturách i386 a amd64 se musí předtím odehrát několik netriviálních věcí - ošéfovat power management (aby třeba zrovna nechtěl usnout), deaktivovat přerušení přeprogramováním PIC (aby se toho po CLI nenafrontovalo moc), nechat běžet jen první procesor a ostatní jádra zadusit, vypnout stránkování (resp. v long mode se vypnout ani nedá, takže nastavit identitní stránkování, tj. aby virtuální adresa=fyzická adresa) a udělat to tak, aby nejen nové jádro a jeho initrd, ale i zásobník a všechny potřebné struktury pro chráněný režim zůstaly i po zrušení stránkování na svém místě a dostupné. Pak se teprve dá skočit do toho správného entrypointu nového kernelu (entrypointů v kernelu je víc podle typu zavedení).
Ono to VLIW moc neni, jak Itanium tak amd gpu tenhle pristup opustilo.
Spravne pojmenovani rozkladu z x86 instrukci na vnitrek jsou uOps (mikro operace). Tyto se pak vykonavaji klidne paralelne z vice naslednych instrukci, kdyz ma procesor vicero paralelnich jednotek (od doby Pentia).
Ty uOps jsou blizko k RISC, to jo, ale je to jen prostredek - samotny vykon prinasi az ta moznost paralelizace a jine chytrosti.
> obdobně lze předat i aktuálně používaný startovací RAMdisk
Jak tohle funguje? Myslel jsem, že při bootu se provede pivot_root z initramdisku do „skutečného“ systému a původní initramdisk (rozbalený i to co tam nahrál předchozí zavaděč) se uvolní.
Nový kernel nehledá v tomto případě initrd na souborovém systému (bez initrd nemusí mít holý kernel drivery, aby se dostal na storage, dokonce menusí mít ani moduly filesystémů), ale má ho už přednačtený v paměti bootloaderem nebo kexecem. A k předání informace, kde se initrd nachází, slouží paměťové struktury známé jako linux boot protocol ( https://www.kernel.org/doc/html/latest/x86/boot.html , pole initrd load address a initrd size).
Trochu jiná situace je u přímého zavedení kernelu z UEFI (bez bootloaderu), tam si kernel načítá initrd sám z ESP pomocí volání do UEFI (umístění initrd dostane kernel na cmdline, https://wiki.debian.org/EFIStub ).
Mně šlo právě o to, co předá příkaz kexec novému jádru při použití funkce --reuse-initrd
. Jenže teď, když se ponořuju hlouběji, nemůžu nikde tuhle volbu najít. Ovšem určitě jsem jí někde (vlevo dole) v manuálu viděl.
Tedy omluvám se za zmatek, zdá se, že volba na znovupoužití aktuálně běžícího RAMdisku přinejmenším v aktuální verzi kexecu není možná.
Ten parametr je bez pomlčky (--reuseinitrd), ale nefunguje na všech architekturách. Tam, kde funguje, nepotřebuje hledat žádný soubor, ale použije už načtený initrd, který v paměti stále je. Každopádně tohle bude asi už dost platform-specific (uvolňování nepotřebné paměti z doby bootu), proto to nefunguje všude.
Tak už jsem to našel, kexec hledá v /proc/cmdline, zdali byl kernel spuštěný s parametrem retain_initrd, pokud ano, tak se použije načtený initrd, jinak chyba:
Na dané architektuře pak musí být toto "vylovení" initrd navíc podporováno, pokud ne, defaultně takovou akci zamázne handler arch_reuse_initrd():
Kexec nebyl myslen pro zkracovani normalniho bootu. Je s nim spokeno spoustu problemu v ovlafacich napriklad grafickych. Kexec byl napsan pro kratkodoby replace kernelu pro dump ladicich informaci, a proto doporucuju mit nizka ocekavani. Mel jsem moznost testovat kexec na desitkach tisic serverech u ruznych zakazniku a problemy se objevuji velmi casto.
Napriklad petiteboot na Power platforme ale kexec pouzivs pro boot systemu. Tam s tim ale autori ovladacu pocitaji a je to otestovane.
"Snad každý, kdo se někdy osobně prováděl restart ve studené uličce datacentra, dokáže potvrdit, že POST u těchto serverů trvá nekonečně dlouho"
Neni to vec rychle kontroly RAM, kterou maji desktopy vetsinou vypnutu? U nas servery vzdy bootovali rychle, mozna kolem 30s nez funguje SSH a dalsich nekolik min nez bezi uplne vsechno.
SuperMicro: ne, samozřejmě kontrola RAM trvá (bývá jí tam taky podstatně víc), ale inicializuje se taky RAID a kde co, docela to trvá. V té studené uličce to člověku připadá nekonečně, naštěstí konzolu od KVM máme bokem a servery mají IPMI, takže v té uličce stojím jen než server zasunu do racku. Fyzicky k serveru musím skutečně jen při manipulaci s hardwarem.
Pokud nekdo pouziva SuperMicro tak chapu ze v te studene ulicce travi spoustu casu. Je toto pokus o troll? Mozna...
Delal jsem pro jeden cesky startup a tyto servery uz nikdy vic. Jakmile bezpecaci zacli resit certifikace tak po tom mnozstvi bugu a chybejicich fixech to byla posledni kapka. Nehlede na to ze servery v akci od dellu se velmi blizili cene za SM(cti Sado-Maso).
Pro malou firmu co ma levnou pracovni silu, hodne sluzeb na microservicy a koupi k jednomu supermicro dalsiho do vymeny to je mozna i strategie. Podobne jako treba google s levnymi PC. Ale ma to sve hranice.
25. 11. 2020, 10:44 editováno autorem komentáře
Taky mam se SM jenom spatnou zkusenost - kdyz na X8 pristupovalo lm_sensors i BMC k senzorum, tak to zrejme udelal kolizi a totalne pomatlo BMC - takze to chvili rvalo ze je to prehrate nebo umrznute, poustelo vetraky na plno - a to nejhorsi - vetraky zcela odstavilo.
Asi nejaky self-destruct mode, kdyz deska vi ze je po zaruce? :-)
My máme se SM zkušenosti i dobré i špatné. Ale stejně i Dellem a HPE.
Teda s HPE hlavně špatné, v době kdy jsme je měli tak měly zabugované firmwary kde čeho. U Dellů nám starší iDRAC zamrzal a byl nutný firmware upgrade (což je na legacy serveru s nápisem "nevypínat" docela oříšek, nakonec jsme ten software, co na něm běží, po restartu nějak zprovoznili).
Supermicra máme historicky hlavně na "levnou pracovní sílu", takže microcloudy bez raidu. To funguje dobře a startuje celkem rychle. Teď už nakupujeme i "dražší" supermicra a s těmi novými zatím nebyl problém. U starších strojů s hw raidy nám tyto občas odcházejí, ale nejen u supermicra.
3. 12. 2020, 00:15 editováno autorem komentáře
Ta rychla kontrola ram se dela i u quick bootu.
Minimalne potrebujes stahnout konfiguraci pameti z modulu, zjistit jestli je to kompatibilni se stavajici konfiguraci, nastavit casovani a inicializovat. To je naproste minimum co je nutne udelat. Mozna jeste procistit kriticke pametove lokace.
Spravne se ma nulovat vsechno a cele pameti projet rychlym testem, nicmene ve vetsine konfiguraci to lze preskocit.
Predpokladam ze BIOS vi, ze pri cteni ECC pameti z cold-bootu by dostaval jenom chyby, takze tu pameti zapisuje, ale to je otazkou par vterin (mozna to ale dela per radic, takze vzdy ta incializace jede v 1ch rezimu).
OS pri normalnim provozu necte nahodne pametove lokace - vzdy se neco prvne zapise. A alokator virtualni pameti funguje tak, ze v pripade page-fault pro oblast ktera patri do alokovaneho rozsahu to vytvori novou stranku - a vynuluje ji. Tohle se deje na nejnizsi urovni v kernelu.. takze nechapu jak a kdy by jste chtel cist fyzickou pamet, ktera nebyla dotcena.
Presne tak. OS navic muze pri bootu udelat jeste scrub pameti mimo kernel space pro jistotu - zalezi co ma clovek za OS nebo hypervisor. Tady nelze generalizovat.
Dale je treba zminit ze delat nulovani u serveru ktere maji TB pameti (coz uz je dnes bezne) a pamet funguje v omezenem rezimu pri POSTu neni uplne optimalni na rychly boot.
kexec používám od dob jader 2.6.x, ale funguje mi to dobře jenom někde. Obecně je problém s tím, že na rozdíl od zavedení jádra po POST, kdy jsou periferie v definovaném stavu, jsou u zavedení nového jádra přes kexec ve stavu, v jakém je ponechaly jejich ovladače. Na první pohled to bývá rozpadlá grafika, ale v dmesg se pak člověk kolikrát dozví další překvápka a třeba taková síťovka (myslím, že to byl nějaký starší Broadcom) s nemožností zavést její firmware, sice je vidět, ale už nejde nahodit do stavu up, takže to pak člověka stejně donutí projít plným restartem.
Tezko rici hlavne u zařízení které musí fungovat už před bootem OS je to složité. Po bootu se jeste treba nahrazuje aktualni firmware. Musi se prevzit hodnoty jinam. Dnesni hw je nechutně složitý proti tomu pred 20ti lety.Třeba ta grafika nebo řadiče. I ty hloupe stovky mají dneska svůj nezávislý management
který funguje třeba i po vypnutí.
Nedivil se že spousta hw to nemá odladene. Je to další test který někdo musí udělat.
25. 11. 2020, 14:11 editováno autorem komentáře
Jo, souhlas, ale narazil jsem kdysi na nějaké I/O karty (asi SDLC, už fakt nevím), které už jednou zinicializované nešly softwarově zinicializovat znovu - prostě potřebovaly pro inicializaci "šťouch" ze sběrnice v podobě signálu RESET. Byla to docela pakárna, protože některé základní desky posílaly kartám aktivní RESET i při warm restartu (Ctrl+Alt+Del), ale jiné to dělaly jen po zapnutí nebo zmáčknutí resetu na bedně.
Inicializovat zařízení vždy do počátečního stavu je snadné, ale ne vždy žádoucí. Třeba problikávání obrazovky při přepínání grafických módů už dnes není považováno za normální součást bootu počítače. Stejně tak nepotěší reset USB sběrnice – při bootu si rozsvítím klávesnici, zapnu Num Lock, načež se resetuje USB a vše zase zhasne.
@Filip Jirsák
Nikdo neříká, že to musíte inicializovat hloupě - tedy resetovat vše "na nulu" a bez ohledu na aktuální stav. Sdělení je o tom, že na konci postupu by mělo být zařízení v souladu se stavem, o kterém ví systém a může s tím dál pracovat. Inicializace klidně může přeskočit kroky vedoucí k problikávání obrazovky - když ovšem víc co dělá.
Já jsem nepsal nic proti uvedení zařízení do definovaného stavu, psal jsem právě o inicializaci.
Proto jsem na to upozornil, protože inicializace nutně neznamená vše resetovat na nulu a z nuly do kýženého stavu. Pokud to ten ovladač umí, může klidně převzít stavy, o kterých si je jistý, že jsou správně. Ono i to nepřeblikávání v moderních OS je "inicializace", jen je inteligentní.
Já si pod inicializací představuju uvedení do výchozího stavu.
Hardware je ve výchozím stavu po spuštění. To je dáno výrobcem, firmwarem, jeho revizí, ... Nebo taky je ve výchozím (nějakém) stavu při kexec.
Incializace zajišťuje naopak cílový stav - tedy stav, na který dokáže navázat operační systém svojí další prací.
Chyba je, pokud se ovladač spoléhá na to, jaký výchozí stav je před inicializací.
Ale jasně, je to slovíčkaření, myslím, že si v jádru rozumíme.