Nejednotný přístup do paměti - Non-uniform memory access

Základní deska pracovní stanice HP Z820 se dvěma paticemi CPU, každý s vlastní sadou osmi slotů DIMM obklopujících patici.

Nejednotný přístup k paměti ( NUMA ) je návrh paměti počítače používaný při vícenásobném zpracování , kde doba přístupu k paměti závisí na umístění paměti vzhledem k procesoru. V rámci NUMA může procesor přistupovat ke své vlastní místní paměti rychleji než k jiné než lokální paměti (lokální paměť k jinému procesoru nebo paměť sdílená mezi procesory). Výhody NUMA jsou omezeny na konkrétní pracovní zátěž, zejména na serverech, kde jsou data často silně spojena s určitými úkoly nebo uživateli.

Architektury NUMA logicky navazují na škálování ze symetrických víceprocesových (SMP) architektur. Byly vyvinuty komerčně v průběhu 90. let společností Unisys , Convex Computer (později Hewlett-Packard ), Honeywell Information Systems Italy (HISI) (později Groupe Bull ), Silicon Graphics (později Silicon Graphics International ), Sequent Computer Systems (později IBM ), Data General (později EMC ) a Digital (později Compaq , poté HP , nyní HPE ). Techniky vyvinuté těmito společnostmi se později objevily v různých operačních systémech podobných Unixu a do určité míry ve Windows NT .

První komerční implementací unixového systému založeného na NUMA byla rodina serverů Symmetrical Multi Processing XPS-100, kterou navrhl Dan Gielan ze společnosti VAST Corporation pro Honeywell Information Systems Italy.

Přehled

Jedna z možných architektur systému NUMA. Procesory se připojují ke sběrnici nebo příčníku pomocí připojení různé tloušťky/počtu. To ukazuje, že různé CPU mají různé priority přístupu k paměti na základě jejich relativního umístění.

Moderní CPU pracují podstatně rychleji než hlavní paměť, kterou používají. V počátcích výpočetní techniky a zpracování dat běžel procesor obecně pomaleji než jeho vlastní paměť. Výkonové řady procesorů a paměti se protnuly v 60. letech s nástupem prvních superpočítačů . Od té doby se CPU stále častěji ocitají „vyhladovělí po datech“ a musí se zastavit, zatímco čekají na příchod dat z paměti (např. U počítačů založených na architektuře Von-Neumann, viz problémové místo Von Neumann ). Mnoho návrhů superpočítačů z 80. a 90. let se zaměřovalo na poskytování vysokorychlostního přístupu k paměti na rozdíl od rychlejších procesorů, což umožňovalo počítačům pracovat na velkých datových sadách rychlostí, které se jiné systémy nemohly přiblížit.

Omezení počtu přístupů do paměti poskytlo klíč k získání vysokého výkonu z moderního počítače. Pro komoditní procesory to znamenalo instalaci stále většího množství vysokorychlostní mezipaměti a používání stále sofistikovanějších algoritmů, aby se zabránilo chybám v mezipaměti . Dramatický nárůst velikosti operačních systémů a aplikací na nich spuštěných však tato vylepšení zpracování mezipaměti obecně zahltil. Víceprocesorové systémy bez NUMA problém podstatně zhoršují. Nyní může systém vyhladovět několik procesorů současně, a to zejména proto, že k paměti počítače může současně přistupovat pouze jeden procesor.

NUMA se pokouší vyřešit tento problém poskytnutím oddělené paměti pro každý procesor, čímž se vyhne zásahu výkonu, když se několik procesorů pokusí adresovat stejnou paměť. V případě problémů s rozšířenými daty (společné pro servery a podobné aplikace) může NUMA zlepšit výkon v rámci jedné sdílené paměti zhruba na základě počtu procesorů (nebo samostatných paměťových bank). Další přístup k řešení tohoto problému, používaný hlavně v systémech jiných než NUMA, je vícekanálová paměťová architektura , ve které lineární zvýšení počtu paměťových kanálů zvyšuje souběžnost přístupu do paměti lineárně.

Samozřejmě, že ne všechna data skončí omezena na jeden úkol, což znamená, že více než jeden procesor může vyžadovat stejná data. K řešení těchto případů systémy NUMA obsahují další hardware nebo software pro přesun dat mezi paměťovými bankami. Tato operace zpomaluje procesory připojené k těmto bankám, takže celkové zvýšení rychlosti díky NUMA do značné míry závisí na povaze spuštěných úloh.

Implementace

AMD implementovalo NUMA se svým procesorem Opteron (2003) pomocí HyperTransport . Společnost Intel oznámila kompatibilitu NUMA pro své servery x86 a Itanium na konci roku 2007 s CPU Nehalem a Tukwila . Obě rodiny procesorů Intel sdílejí společnou čipovou sadu ; propojení se nazývá Intel Quick Path Interconnect (QPI).

Cache koherentní NUMA (ccNUMA)

Topologie serveru ccNUMA Bulldozer extrahovaného pomocí nástroje lstopo od hwloc.

Téměř všechny architektury CPU využívají malé množství velmi rychlé nesdílené paměti známé jako mezipaměť k využití referenční lokality při přístupech do paměti. U NUMA má udržování soudržnosti mezipaměti ve sdílené paměti značnou režii. I když jsou systémy NUMA, které nejsou mezipaměti, jednodušší na navrhování a vytváření, stávají se neúměrně složitými na programování ve standardním von Neumannově modelu programování architektury .

Pokud více než jedna mezipaměť ukládá stejné umístění paměti, ccNUMA obvykle používá meziprocesorovou komunikaci mezi řadiči mezipaměti k zachování konzistentního obrazu paměti. Z tohoto důvodu může ccNUMA fungovat špatně, když se několik procesorů pokusí rychle přistupovat ke stejné oblasti paměti. Podpora pro NUMA v operačních systémech se pokouší snížit frekvenci tohoto druhu přístupu přidělováním procesorů a paměti způsoby, které jsou přátelské k NUMA, a tím, že se vyhýbá algoritmům plánování a zamykání, kvůli nimž je nutný přístup přátelský vůči NUMA.

Alternativně se protokoly koherence mezipaměti, jako je protokol MESIF, pokoušejí snížit komunikaci potřebnou k zachování koherence mezipaměti. Scalable Coherent Interface (SCI) je standard IEEE definující protokol koherence mezipaměti založený na adresářích, aby se předešlo omezením škálovatelnosti nalezeným v dřívějších víceprocesorových systémech. Například SCI se používá jako základ pro technologii NumaConnect.

NUMA vs. clusterový výpočet

Člověk může považovat NUMA za úzce spjatou formu klastrových počítačů . Přidání stránkování virtuální paměti do klastrové architektury může umožnit implementaci NUMA zcela v softwaru. Latence mezi uzly softwarové NUMA však zůstává o několik řádů větší (pomalejší) než hardwarová NUMA.

Softwarová podpora

Protože NUMA do značné míry ovlivňuje výkonnost přístupu do paměti, jsou nutné určité softwarové optimalizace, aby bylo možné naplánovat vlákna a procesy blízko jejich dat v paměti.

  • Microsoft Windows 7 a Windows Server 2008 R2 přidaly podporu pro architekturu NUMA přes 64 logických jader.
  • Java 7 přidala podporu pro alokátor paměti a sběrač odpadků s vědomím NUMA .
  • Linuxové jádro :
    • Verze 2.5 poskytovala základní podporu NUMA, která byla dále vylepšena v následujících vydáních jádra.
    • Verze 3.8 linuxového jádra přinesla nový základ NUMA, který umožňoval vývoj efektivnějších zásad NUMA v pozdějších vydáních jádra.
    • Verze 3.13 linuxového jádra přinesla řadu zásad, jejichž cílem je umístit proces do blízkosti jeho paměti, spolu s řešením případů, jako je sdílení stránek paměti mezi procesy nebo použití transparentních velkých stránek ; nová nastavení sysctl umožňují povolit nebo zakázat vyvažování NUMA, stejně jako konfiguraci různých parametrů vyvažování paměti NUMA.
  • OpenSolaris modeluje architekturu NUMA s lgroups.
  • FreeBSD přidala podporu pro architekturu NUMA ve verzi 9.0.
  • Silicon Graphics IRIX (ukončeno od roku 2021) podpora pro architekturu ccNUMA přes CPU 1 240 s řadou serverů Origin.

Hardwarová podpora

Od roku 2011 jsou systémy ccNUMA multiprocesorové systémy založené na procesoru AMD Opteron , který lze implementovat bez externí logiky, a procesoru Intel Itanium , který vyžaduje, aby čipová sada podporovala NUMA. Příklady čipových sad s podporou ccNUMA jsou SGI Shub (Super hub), Intel E8870, HP sx2000 (používané na serverech Integrity a Superdome) a ty, které se nacházejí v systémech založených na NEC Itanium. Dřívější systémy ccNUMA, jako jsou systémy od Silicon Graphics, byly založeny na procesorech MIPS a procesoru DEC Alpha 21364 (EV7).

Viz také

Reference

externí odkazy