Ta část o problémů SMP je opravdu výstižna. Mimochodem, proč se dneska používaji technologie Dual Channel pro přístup do paměti? No hlavně proto, že každý processor má jaksi „blíže“ ke svému kanálu. O duplikování stránek z jednoho bloku paměti do druhého se stará operační systém. To je taky asi důvod, proč v nových OS (Win 7 apod) jsou pracovní sady všech aplikací 2× větší, než normálně.
Onehdy jsem programoval řadič pro plánování paralelních úloh. Centralizovaný řadič jsem byl nucen nakonec přepsat na distribuovaný řadič, protože to (i do budoucna) poskytovalo lepší výkonost. Prostě každý procesor měl vlastní frontu úloh a pokud úloha generoval další úlohy, tak si je zařazoval do své fronty. Pouze v případě, kdy mu „došla práce“ prohledal fronty ostatních procesorů a z nich si vytáhl další práci. V ideálním případě se hlavní úloha rozpadla na N procesorů hned na začátku a pak už to mezi sebou komunikovalo minimálně.
No nevim jak je to na Intelu, ale pokud se pamatuju tak na AMD Dual channel znamena jen 2* vetsi sirku sbernice. Jadra jsou uvnitr chipu beztak pripojena na spolecnou L3 cache.
To co pisete spis pripomina nekolik fyzickych CPU propojenych pres hypertransport linky (coz jsou velmi rychle seriove linky). AMD to ma tak ze kazdy rekneme 4jadrovy CPU ma vlastni RAM a pak nekolik tehle linek pomoci nihz komunikuje s ostatnimi CPU. Cely to probiha bez ucasti programatora (nemusim tedy psat prikaz posli blok dat na CPU 4). Misto toho je pamet kazdeho uzlu teto site namapovana do spolecneho fyzickeho prostoru a radice pameti a HT linek se staraji v hodne presmerovani pozadavku na cteni/zapis. Takze je to podobny jako u SGI.
Dual channel neznamena, ze by „kazdy CPU mel bliz ke sve pameti“, ani „jen 2× vetsi sirku sbernice“.
Dual channel jsou dva nezavisle radice, ktere muzou kazdy delat neco jineho (nebo muze byt crossbar switch v CPU nakonfigurovany na jejich „tupe“ prokladani). Naopak neni pravda ze by treba jadro 0 melo bliz k radici 0 a naopak. Aspon u AMD je to symetricke.
Cili jeden AMD procesor neni NUMA. Vicesocketovy system uz ale NUMA je.
-Yenya
Nechtěl jsem tvrdit, že AMD je NUMA, protože jak jsem pochopil u NUMA jde o to, že na uzlu je plnohodnotný procesor včetně všech potřebných řadičů, kdyžto tady jsem chápal, že je výhodou dual channelu je, když je paměť uspořádána tak, že se procesory nebijou na jedné paměti, kdy operační systém plánuje přidělování procesoru a paměti tak, aby oba řadiče jeli současně, každý „na svým“. Nemusí to být tedy tak, že by to bylo přiděleno na tvrdo, ale prostě při přístupu jednoho procesoru do jednoho kanálu má druhý procesor přístupný druhý kanál bez čekání, nebo musí počkat.
Optimalizace na straně OS … pokud vím, od té doby, co mám AMD s dual channelem pozoruju, že WIndowsy hrozdně neradi přehazují jednovláknovou úlohu mezi procesory, na starších vícejádrech, kde byla obyčejná paměť to nehrálo roli a tam se mi nestalo, že by jeden procesor jel na 100% a druhý na 0%, ale že oba jeli zhruba na 50%. Na AMDčkach je to běžný jev. Pochopil jsem, že se plánovač zařazuje procesy tak, aby se maximálně vyhnul situaci, kdy oba procesory musí přistupovat současně na jeden kanál. Mám pocit, že WinAPI snad dokonce na to má atribut na proces, tuším „ideal processor“. Podle něho pak plánuje a vybírá stránky fyzické paměti na alokaci či přiswapování.
Jen jestli to neni spis updatovanymi windowsemi. Neustale prehazovat 1 proces mezi 2ma jadry je
hloupost at mate jakykoliv radic pameti. Vede to neustalemu vyprazdnovani a naplnovani cache. Jestli se to takhle opravdu chovalo a ted se jiz ne, tak spis to byla nejaka chybka windowsu kterou po case opravili a automaticky nainstalovali novou verzi pres windows update, nebo jak se to jmenuje.
Tvrzení, že se o duplikování stránek stará operační systém mně připadá, pardon, uhozené.
Bavíte se doufám o dnešní PC architektuře, kde se provozuje symetrický multiprocesing – procesory pracují nad společným paměťovým prostorem a z pohledu programátora musí toto být transparentní. Nějaké přesuny a komunikaci musí řešit hardware, jinak si to nedovedu představit – jak by třeba byla zajištěna kompatibilita se staršími SMP OS? To by jako na takovém stroji běžely jen s jedním CPU a s poloviční RAM?
Soucasne systemy jsou budto SMP, nebo cc-NUMA. Coz znamena, ze programator nejakou neuniformnost pameti resit nemusi, nechce-li. Cili operacni system ani programator se skutecne nemusi starat, ze ktereho NUMA uzlu zrovna ma pridelenou pamet.
Na druhe strane dost pomaha, pokud OS o NUMA topologii vi a vyuziva teto znalosti. Linux napriklad mel (na SGI Altixech, nevim jestli je to v upstreamu) moznost stranky textu jadra mit duplikovane ve vice NUMA uzlech, protoze se predpokladalo, ze nejaky kod jadra obcas vykonava kazdy NUMA uzel. Nebo treba alokator pameti se snazi pridelovat procesu prednostne ty stranky pameti, ktere jsou nejbliz procesoru, na kterem dany proces bezi.
Nevim o tom, ze by soucasne OS delaly nejake cilene presuny jiz naalokovanych stranek smerem k uzlum, ktere ty stranky nejvice vyuzivaji. To uz by vyzadovalo kristalovou kouli srovnatelne sily, jaka je potreba pro zjisteni, kterou stranku ted zrovna odswapovat :-)
-Yenya
Po skusenosti z linuxom a windowsom na X3650 M2 zo zapnutou NUMA architekturou. Linux o NUMA vie a (IMAO) ju aj vyuziva. Hlavne mu vadi ak nie su jednotlive pametove uzly rovnake. Taky windows serverXY sa tym nejak netrapilm a vobec mu nevadilo ze jeden socket nemal „vlastnu“ pamet.