Non-uniform memory access

Ez a közzétett változat, ellenőrizve: 2022. augusztus 15.

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 processzorhoz viszonyított helyétől.[1][2] 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.[1]

 
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. Az 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 kö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.

 
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[3] 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

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

A NUMA szoftveres támogatása

szerkesztés

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.[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.[4]
  • A Java 7 NUMA architektúrával együttműködő garbage collector és memória foglaló algoritmust mutatott be[5]
  • 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,[6] a későbbi verziók további fejlesztéseket tartalmaztak.
  • Az OpenSolaris is támogatja a NUMA architektúrát az lgroups-szal.
  1. a b c What is NUMA?. [2017. augusztus 19-i dátummal az eredetiből archiválva]. (Hozzáférés: 2019. augusztus 28.)
  2. a b NUMA - techtarget.com
  3. "and they are a real pain to program for" - linux scalability effort FAQ
  4. NUMA support - msdn
  5. [1]Java HotSpot™ Virtual Machine Performance Enhancements
  6. Linux Scalability Effort

Fordítás

szerkesztés

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. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.