Non-uniform memory access

A Wikipédiából, a szabad enciklopédiából

A Non-Uniform memory access vagy röviden NUMA egy memória felépítés a több-processzoros feldolgozás területén, amelyben a memóriához való hozzáférés időigénye függ a memória a processzorhoz viszonyított helyétől[vmware 1][1]. A NUMA architektúrában a processzor a saját helyi memóriáját gyorsabban tudja használni, mint a távolabbi memóriát. A NUMA előnyei az alkalmazások egy korlátozott körében érvényesülnek, kifejezetten szervereken, ahol a memóriában tartott adatok egy-egy feladathoz tartoznak.[vmware 1]

Alapelv[szerkesztés | forrásszöveg szerkesztése]

Egy lehetséges NUMA rendszerarchitektúra. A processzorok egy sínhez vagy crossbarhoz csatlakoznak különböző sávszélességű kapcsolatokkal. Az egyes CPU-k hozzáférési prioritása eltérő, a relatív elhelyezkedéstől függ.

Bár a modern processzorok lényegesen gyorsabban működnek a fő memóriánál, a számítástechnika korai szakaszában a processzor volt lassabb. A processzorok és a memória teljesítménye a 60-as években találkozott az első szuperszámítógépeknél. Azóta a processzorok egyre inkább „adatra éhessé” váltak és egyre több időt töltenek az adatra való várakozással az operatív memóriából történő adatbetöltés során. A 1980-as és 1990-es évek több szuperszámítógépe próbált gyorsabb memóriára összpontosítani, nem pedig gyorsabb processzorra, így téve lehetővé, hogy a számítógép olyan sebességen végezhesse a nagy adathalmazok feldolgozását, amelyet más rendszerek meg sem tudtak megközelíteni.

A modern számítógépekben a fő memória használatának csökkentése jelentette a kiutat a jobb teljesítmény felé. Ez többnyire azt jelentette, hogy egyre nagyobb méretű gyorsítótárat építettek a processzorokba és egyre bonyolultabb algoritmusokat fejlesztettek a gyorsítótár-tévesztések elkerülésére, ugyanakkor az operációs rendszerek és alkalmazások méretének drámai növekedése ezeket a fejlesztéseket többnyire mindet fel is használta.

A NUMA úgy próbálja meg kezelni ezt a problémát, hogy minden processzornak külön memóriát ad, elkerülve a teljesítmény romlását abban az esetben, amikor több processzor próbálja elérni a memóriát.

Természetesen nem minden adatot lehet egy szálhoz és ezáltal egy processzorhoz rendelni, ami azt jelenti, hogy több processzornak lehet szüksége ugyanarra az adatra. Ezeknek az eseteknek a kezelésére a NUMA-rendszerek hardveres vagy szoftveres megoldást tartalmaznak.

ccNUMA[szerkesztés | forrásszöveg szerkesztése]

Egy ccNUMA Bulldozer kiszolgáló topológiája

Majdnem minden processzor használ egy a fő memóriához képest kicsi, de nagyon gyors és nem megosztott memóriát, amit cache-nek vagy gyorsítótárnak neveznek. A NUMA alatt a gyorsítótárak pontosságának megtartása nagyon munkaigényes. Bár a gyorsítótárat nem pontosan használó, nem gyorsítótár-koherens (non-cache-coherent) NUMA tervezése és építése sokkal könnyebb, programozása sokkal nehezebb[2] a Neumann-architektúra alapján.

A ccNUMA (cache-coherent, azaz gyorsítótár-koherens – ami azt jelenti, hogy az adatok különböző gyorsítótárakban lévő példányait összehangoltan kezelő – NUMA) processzorok közti kommunikációt használ a másolatok szinkronban tartására, amikor egynél több processzor gyorsítótára tartalmazza egy adott memóriaterület másolatát. Ennek következtében a ccNUMA architektúrára épülő rendszerek gyengén teljesíthetnek olyan esetekben, amikor két különböző processzor használja ugyanazt a memóriaterületet gyorsan egymás után. Az operációs rendszerekbe épített NUMA-támogatás igyekszik csökkenteni ennek gyakoriságát azáltal, hogy megfelelő módon oszt ki memóriaterületeket és helyez el szálakat processzorokon.

2011-ben a ccNUMA rendszerek egyik része az AMD Opteron processzoron alapuló, külső logika nélkül megvalósított többprocesszoros rendszer, másik részük Intel Itanium processzoros rendszer volt, amelyekben a NUMA támogatás külön csipkészletet igényel. ccNUMA támogató csipkészletek például az SGI Shub (Super hub), az Intel E8870, az Integrity és a Superdome szerverekben használt HP sx2000, valamint a NEC Itanium-alapú rendszereiben található csipkészletek. A korábbi ccNUMA rendszerek, mint például a Silicon Graphics rendszerei, MIPS processzorokon és a DEC Alpha 21364 (EV7) processzoron alapultak,

A NUMA és a szerverfürtök[szerkesztés | forrásszöveg szerkesztése]

A NUMA architektúrát lehet egyfajta szorosan, egyetlen dobozba integrált fürtözésként is értelmezni.[1]

A NUMA szoftveres támogatása[szerkesztés | forrásszöveg szerkesztése]

A NUMA architektúra nagyban befolyásolja a memória hozzáférés sebességét és kihasználásához az operációs rendszer és a nagyobb erőforrásigényű alkalmazások memória-kezelésének módosítására van szükség[vmware 1].

  • A Microsoft Windows 7-ben és a Windows Server 2008-ban jelent meg támogatás a NUMA architektúrára 64 logikai processzormag felett.[3]
  • A Java 7 NUMA architektúrával együttműködő garbage collector és memória foglaló algoritmust mutatott be[4]
  • A Linux kernel fejlődése alatt folyamatosan épült ki a NUMA-támogatás, a 2.5-ös szériában már elérhető volt[5], a későbbi verziók további fejlesztéseket tartalmaztak.
  • Az OpenSolaris is támogatja a NUMA architektúrát az lgroups-szal.

Jegyzetek[szerkesztés | forrásszöveg szerkesztése]

Fordítás[szerkesztés | forrásszöveg szerkesztése]

Ez a szócikk részben vagy egészben a Non-uniform memory access című angol Wikipédia-szócikk fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel.


Forráshivatkozás-hiba: <ref>-ek léteznek a(z) „vmware” csoporthoz, de nincs hozzá <references group="vmware"/>