CPU kötött

A processzoraffinitás vagy processzoraffinitás vagy gyorsítótár - affinitás egy olyan  technológia, amely biztosítja, hogy egy folyamatot vagy szálat egy adott CPU-maghoz, CPU-hoz vagy processzorkészlethez rögzítsék és leválasztják , így a folyamat vagy szál csak a megadott magon fut. , processzor vagy processzorok, és nem a többprocesszoros rendszer egyetlen processzorán sem. A processzoraffinitás felfogható a többprocesszoros operációs rendszer központi feladatsor-ütemezési algoritmusának módosításaként. A feladatsor minden eleméhez tartozik egy címke , amely megadja a hozzá tartozó "kapcsolódó" processzorokat.

Az erőforrások lefoglalásakor az egyes feladatokat előnyösen a „kapcsolódó” processzorok egyikén kell végrehajtani. A processzoraffinitás azt a tényt használja ki, hogy egy adott processzoron korábban futó folyamat adatai és beállításai gyorsabban elérhetők lehetnek az adott processzor számára, mint egy másik processzor számára. Ez megtörténhet például a processzor gyorsítótárában lévő folyamatadatok gyorsítótárazása miatt, valamint néhány más helyzetben. Egy ilyen folyamat ütemezése ugyanazon a processzoron való futtatásra javítja a teljesítményét azáltal, hogy csökkenti a teljesítményt rontó eseményeket, például a gyorsítótár elvesztését.

Ezenkívül egyes rendszerekben mindegyik processzor gyorsabban hozzáférhet a RAM egy hozzá közeli régiójához. Ugyanakkor ésszerűnek bizonyul a folyamat folyamatos kötése a processzorhoz, amelynek gyorsabb a hozzáférése a RAM-hoz, ahol a folyamat adatai találhatók.

A processzor-affinitás gyakorlati példája egy nem szálas alkalmazás több példányának futtatása, például egyes grafikus renderelő szoftverek.

A processzorhoz való kötés lehetőségét biztosító feladatütemező algoritmus megvalósítása az adott processzorok jellemzőinek és egy többprocesszoros rendszer felépítésének figyelembevételével történik, amelyet egy ilyen algoritmus vezérel majd. Egyes megvalósítások bizonyos körülmények között lehetővé teszik a feladat átvitelét egy másik processzorra, leküzdve a kötést. Ez azokban az esetekben történik, amikor az ütemező szempontjából egy ilyen váltás a feladatvégrehajtás hatékonyságának növekedéséhez vezet. Például, ha két processzorigényes feladat (A és B) ugyanahhoz a processzorhoz van kötve, és a másik processzor nincs használatban, sok ütemező átváltja a B feladatot a második processzorra, hogy a processzorból a lehető legtöbbet hozza ki a rendszer számára. . A B feladatnak az új processzorhoz való ilyen pillanatban való hozzárendelését maga az ütemező állítja be.

Megvalósítási jellemzők

A processzoraffinitás hatékonyan csökkentheti a rendszerbe és/vagy a processzor gyorsítótárába jutó adatokkal kapcsolatos problémákat. De nem ad megoldást a terheléselosztási problémákra [1] . A CPU-affinitás összetettebb a heterogén architektúrájú rendszerekben, és kifinomultabb ütemező logikát igényel, mint a teljesen homogén rendszerekben. Például egy két kétmagos CPU -val rendelkező rendszer , amelyek mindegyike támogatja a Hyper-Threading technológiát , problémát jelent az ütemező algoritmus számára, amely CPU-affinitást feltételez. Ha a rendszer még nagyobb számú processzorral rendelkezik, és például önmagában nem teljesen szimmetrikus, akkor a hatékony feladatütemezés problémája még tovább növekszik.

A fenti, két hiperszálas kétmagos processzorral rendelkező példában az ütemezőnek kétszintű kötési rendszert kell megvalósítania. A gyorsítótár hatékonysága szempontjából az ugyanazon a magon belüli munkavégzés a különböző szálakon egyenértékű, és az ütemezőnek joga van szabadon mozgatni egy feladatot szálról szálra. Az egy processzoron belüli különböző magok „közelségének” szintje alacsonyabb, mivel részben közös processzor-gyorsítótárat használnak, a különböző processzorok „közelségének” szintje még alacsonyabb. Mivel más erőforrások is meg vannak osztva, a CPU-affinitás önmagában nem használható a feladatütemezés alapjául. Például, ha egy folyamat nemrég futott egy virtuális hiperszálas CPU-n valamelyik magban, és ez a virtuális CPU jelenleg foglalt, de ugyanazon mag második virtuális CPU-ja tétlen, a gyorsítótár hatékonyságán alapuló processzoraffinitás azt jelenti, hogy a folyamat át kell vinni egy második (nem futó) azonos magú virtuális processzorra. A két virtuális CPU azonban szinte az összes számítási erőforrásért, gyorsítótár memóriáért és memóriaerőforrásért verseng. Ebben a helyzetben általában hatékonyabb lenne a folyamatot egy másik maghoz vagy CPU-hoz rendelni, ha vannak közöttük üresjáratok. Ez egyszeri teljesítményhiányt eredményezhet, mivel az áthelyezett folyamatnak újra fel kell töltenie a gyorsítótárat adataival. Az általános teljesítmény azonban jobb is lehet, mert a két folyamatnak nem kell versenyeznie ugyanazon a CPU-n belüli erőforrásokért.

A maximális hatékonyság elérése érdekében a feladatütemezőnek mindezeket a szempontokat figyelembe kell vennie. A még nagyobb aszimmetriaszintű rendszerek ( NUMA , fürtök stb.) még nagyobb komplexitást igényelnek az ütemezőtől.

Megvalósítás meghatározott operációs rendszerekben

Linuxon egy folyamat processzoraffinitása megtudható vagy beállítható a taskset segédprogrammal [2] . Programozottan ugyanezek a műveletek végrehajthatók a sched_getaffinity és a sched_setaffinity [3] rendszerhívásokkal . A szál affinitása beállítható vagy módosítható a következő könyvtári függvények egyikével: pthread_setaffinity_np [4] vagy pthread_attr_setaffinity_np [5] .

SGI rendszereken egy folyamat a dplace segédprogram segítségével [6] processzorkészlethez társítható .

A DragonFly BSD 1.9 (2007) és újabb verzióiban az usched_set [7] [8] rendszerhívás használható a CPU-affinitás szabályozására . NetBSD 5.0, FreeBSD 7.2, DragonFly BSD 4.7 és újabb verziókban a pthread_setaffinity_np és pthread_getaffinity_np [ 9] rendszerhívások használhatók . A NetBSD -ben a [10] psrset segédprogram beállítja egy szál affinitását egy adott CPU-készlethez. A FreeBSD a cpuset [11] segédprogramot használja processzorkészletek létrehozására és folyamatok hozzárendelésére. A DragonFly BSD 3.1 (2012) és újabb verzióiban az usched segédprogram használható folyamatok hozzárendelésére egy adott processzorkészlethez [12] .

Windows NT és újabb rendszereken a szál- és folyamataffinitások külön állíthatók be a SetThreadAffinityMask [13] és a SetProcessAffinityMask [14] API-hívásokkal vagy a Feladatkezelő felületen keresztül (csak folyamatok esetén).

A macOS egy kötési API-t [15] biztosít, amely tippeket ad az operációs rendszer kernelének a szálak kötési készletek szerinti ütemezéséhez.

A Solaris rendszeren a pbind segédprogram [16] segítségével szabályozhatja a folyamatok és a könnyű folyamatok processzorhoz való kötését . A processor_bind [17] rendszerhívás is rendelkezésre áll . Magasabb szintű interfészhívások is elérhetőek, nevezetesen a pset_bind [18] vagy az lgrp_affinity_get [19] , a processzorkészlet és a helycsoport fogalmát használva.

AIX rendszeren a folyamat-összerendeléseket a bindprocessor [ 20] [21] segédprogram és a bindprocessor [20 ] [ 22 ] rendszerhívás segítségével kezelheti .

A z/OS a manapság talán legkifinomultabb feladatütemezőt valósítja meg. Ez biztosítja a hardver erőforrások dinamikusan változó újraelosztását a folyamatok között, beleértve azokat is, amelyek a folyamatok egyes processzormagokhoz, processzorokhoz és csoportjaikhoz való kötésén alapulnak [23].

Támogatás programozási nyelvekben

A Julia párhuzamos programozási nyelv szabványos könyvtára kísérleti támogatást tartalmaz a folyamat-processzor affinitáshoz [24] .

Jegyzetek

  1. „White Paper – Processor Affinity” archiválva 2021. június 8-án a Wayback Machine  -nél – a tmurgent.com webhelyen Archivált 2020. április 28-án a Wayback Machine -nél .
  2. ↑ - Linux fejlesztői taskset(1) kézikönyv - egyéni parancsok  
  3. - Linux fejlesztői sched_setaffinity(2) kézikönyv -   rendszerhívások
  4. ↑ - Linux fejlesztői pthread_setaffinity_np(3) kézikönyv - könyvtári funkciók  
  5. ↑ - Linux fejlesztői pthread_attr_setaffinity_np(3) kézikönyv - könyvtári funkciók  
  6. dplace.1 Archiválva : 2007. július 1.  — Az sgi.com webhelyről Archiválva : 2009. március 27., a Wayback Machine -nél . Hozzáférés ideje: 2007-07-06.
  7. usched_set(2)- egy proci usched beállítása . DragonFly rendszerhívások kézikönyve . DragonFlyBSD . Letöltve: 2019. július 28.
  8. . BSD kereszthivatkozás . DragonFlyBSD . Letöltve: 2019. július 28.kern/kern_usched.c § sys_usched_set
  9. pthread_setaffinity_np(3)  - NetBSD , FreeBSD és DragonFly BSD Library Functions Manual
  10. - NetBSD rendszergazdai kézikönyvpsrset(8)  oldal  
  11. cpuset(1)  - FreeBSD felhasználói parancsok kézikönyve  
  12. usched(8)- egy program futtatása egy megadott userland ütemezővel és cpumaskkal . DragonFly rendszerkezelői kézikönyv . DragonFlyBSD . Letöltve: 2019. július 28.
  13. SetThreadAffinityMask archiválva : 2008. április 24. a Wayback Machine  - MSDN könyvtárban
  14. SetProcessAffinityMask archiválva : 2008. március 25., a Wayback Machine  - MSDN könyvtár
  15. Thread Affinity API kiadási megjegyzések . developers.apple.com _ Letöltve: 2020. május 27. Az eredetiből archiválva : 2012. április 9..
  16. pbind(1M) Archiválva : 2021. február 25. a Wayback Machine  - Solaris manoldalon
  17. processor_bind(2) Archiválva : 2016. szeptember 3. a Wayback Machine  - Solaris kézikönyvoldalán
  18. pset_bind(2) Archiválva : 2022. január 20. a Wayback Machine -nél  – Oracle Solaris 11.1 Információs Könyvtár – Man oldalak, 2. szakasz
  19. lgrp_affinity_get(3LGRP) archiválva : 2016. június 10. a Wayback Machine -nél  – Memória- és szálelhelyezési optimalizálási fejlesztői útmutató
  20. 1 2 Umesh Prabhakar Gaikwad; Kailas S. Zadbuke. Processzor-affinitás AIX rendszeren (2006. november 16.). Letöltve: 2020. május 27. Az eredetiből archiválva : 2020. március 2.
  21. bindprocessor parancs . IBM . Letöltve: 2020. május 27. Az eredetiből archiválva : 2020. március 2.
  22. bindprocesszor szubrutin . IBM . Letöltve: 2020. május 27. Az eredetiből archiválva : 2020. március 2.
  23. IBM zEnterprise 196 Műszaki útmutató. Bill White, Erik Bakker, Parwez Hamid, Octavian Lascu, Fernando Nogal, Frank Packeiser, Vicente Ranieri Jr., Karl-Erik Stenfors, Esra Ufacik, Chen Zhu, IBM Redbooks. 2011. október
  24. Fejlesztői beszélgetés