Non-uniform memory access
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]
Alapelv
szerkesztésBá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.
ccNUMA
szerkesztésMajdnem 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ésA 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ésA 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.
Jegyzetek
szerkesztés- ↑ a b c What is NUMA?. [2017. augusztus 19-i dátummal az eredetiből archiválva]. (Hozzáférés: 2019. augusztus 28.)
- ↑ a b NUMA - techtarget.com
- ↑ "and they are a real pain to program for" - linux scalability effort FAQ
- ↑ NUMA support - msdn
- ↑ [1]Java HotSpot™ Virtual Machine Performance Enhancements
- ↑ Linux Scalability Effort
Fordítás
szerkesztésEz 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.