Mivel a többmagos processzorok egyre gyakoribbá válnak a szerverekben, a laptopokban vagy az asztali PC-kben, sőt a mobil eszközökben is, egyre több alkalmazást optimalizálnak az ilyen típusú rendszerek számára. Néha azonban hasznos lehet egy programot vagy folyamatot összekapcsolni egy vagy több meghatározott kernel. Nézzük meg, hogyan lehet megszerezni ...
Telepítse a taskset
A taskset eszköz a "util-linux" csomag része. A legtöbb Linux disztribúció alapértelmezés szerint előre telepített csomaggal érkezik. Abban az esetben, ha a taskset nem érhető el, a következőképpen lehet telepíteni:
En Debian / Ubuntu és származékai:
sudo apt-get install util-linux
En Fedora és származékai:
sudo yum telepítse a util-linuxot
Tekintse meg a futó folyamat CPU-affinitását
A processzor affinitási információinak lekéréséhez használja a következő formátumot:
feladatkészlet -p PID
Például egy folyamat CPU-jának affinitásának ellenőrzése a PID 2915 azonosítóval:
Taskset -p 2915
Az eredményt adja vissza:
pid 2915 aktuális affinitás-maszkja: ff
a taskset a jelenlegi CPU-affinitást hexadecimális bitmaszk formátumban adja vissza. A példában az affinitás (hexadecimális bitmaszkban ábrázolva) megfelel az "11111111" -nek bináris formátumban, ami azt jelenti, hogy a folyamat nyolc különböző CPU-mag (0 és 7) bármelyikén futtatható.
A hexadecimális bitmaszk legalacsonyabb bitje a 0 magazonosítónak felel meg, a második legalacsonyabb bit jobbról az 1. magazonosítóra, a harmadik legalacsonyabb bit a 2. magazonosítóra stb. Tehát például a "0x11" processzor affinitás a 0 és 4 magazonosítókat jelenti.
A taskset a CPU-affinitást a processzorok listájaként jelenítheti meg bitmaszk helyett, ami sokkal könnyebben olvasható. Ennek a formátumnak a használatához futtatnia kell a "-c" opciót. Például:
Taskset -cp 2915
Az eredményt adja vissza:
pid 2915 aktuális affinitási listája: 0-7
Kényszerít egy folyamatot egy adott kernelen történő futtatásra
A taskset használatával egy futó folyamat hozzárendelhető egy adott CPU maghoz. Ehhez a következő formátumot kell használnia:
taskset -p COREMASK PID taskset -cp CORE-LIST PID
Például egy folyamat hozzárendeléséhez a 0 és 4 magokhoz a következőket kell futtatnia:
feladatkészlet -p 0x11 9030
Mit eredményez az eredmény:
pid 9030 jelenlegi affinitás-maszkja: ff pid 9030 új affinitás-maszkja: 11
Ezzel egyenértékűen futtathatja:
feladatkészlet -cp 0,4 9030
A "-c" opcióval megadhatja a vesszőkkel elválasztott numerikus kernel-azonosítók listáját, vagy akár tartományokat is felvehet (például 0,2,5,6-10).
Indítson egy programot egy adott kernel használatával
A taskset lehetővé teszi egy új program elindítását is számos specifikus kern felhasználásával. Ehhez a következő formátumban kell használni:
COREMASK EXECUTABLE taskset
Például a VLC program indításához a CPU core ID 0-n használja a következő parancsot:
feladatkészlet -c 0 vlc
Csak egy programnak szenteljen magot
Bár a taskset lehetővé teszi a program hozzárendelését egy adott kernelhez, ez még nem jelenti azt, hogy nincsenek más programok vagy folyamatok, amelyek felhasználják. Ennek elkerülése és egy teljes kernel dedikálása egy adott programnak az "isolcpus" kernelparamétert kell használnia, amely lehetővé teszi egy kern lefoglalását az indítás során.
Ehhez hozzá kell adnia az "isolcpus =" paramétert a GRUB rendszermagsorához. Például a 0. és 1. azonosító mag fenntartásához adja hozzá az "isolcpus = 0,1" értéket.
Ha ez megtörtént, a Linux ütemezője nem rendel rendes folyamatokat a fenntartott kernelhez, hacsak nem külön rendelték hozzá a taskset-hez.
forrás: xmodule & taskset man oldalak.
Jó poszt :).
Jó poszt, de trollkodási szándék nélkül ...
Mi haszna van egy program hozzárendeléséhez egy adott kernelhez ???
Értem; Ha van 12 magos számítógépe, akkor az lenne a logikus, ha egy bizonyos programot a 12 mag segítségével futtatnánk, és nem korlátoznánk, mivel így a lehető legnagyobb teljesítményt érjük el.
Hasznosnak látom azt a lehetőséget, amely lehetővé teszi számunkra, hogy ne rendeljünk hozzá folyamatokat egy bizonyos kernelhez, annak kizárólagos használatát pedig egy adott programra hagyva.
Van értelme, amit megemlít, ha hagyja, hogy a tervező az összes magot felhasználja, az erőforrások jobban kiegyensúlyozottak legyenek, de néha dedikált magra van szükség, például egy virtuális gép futtatásához egy adott feladattal, ennek a gépnek a teljesítménye jelentősen javul nincs több folyamat a hozzárendelt kernelben.
atte
jvk85321
Pontos! Köszi, jvk! 🙂
De amikor létrehozza a virtuális gépet, arra kéri, hogy válassza ki a kiosztott CPU mennyiségét ... mi értelme választani ezt az értéket, ha végül az operációs rendszer ezt kihagyja és végrehajtja az összes CPU-n ... A példa ott nem a legjobb ...
Ahhoz, hogy a Flash működjön a Windows 8.1 x64, AMD és Firefox rendszeren, ajánlott azt választani, hogy a Flash csak egy CPU-n futjon, azonban nekem nem működött. Kényelmes lenne, ha hozzáadná (ha még nincs meg) a különböző DE vagy legalább a KDE feladatkezelőihez.
ah, nem értettem a megjegyzés végét ... Ehhez azonban be kell tiltani a virtuális gépet futtató CPU összes folyamatát. Vagy rendelje hozzá más CPU-khoz. Érdekes és nagyon jó megjegyzés.
Zseniális szuperszámítógépek létrehozására használják
Megértett.
Köszönet a tisztázásért.
Ha egy rendszermagot lefoglal egy adott programhoz, mi történik a végrehajtási szálakkal? Abban az esetben, ha azt egy HT-vel rendelkező kernellel végzi, 2 végrehajtási szálat tart fenn a program számára.
Lehet, hogy ez a parancs nem tűnik hasznosnak a többmagos számítógépeken, de nekünk, akiknek kettős magunk van, egészen praktikus. Például van egy játékom, aminek megnyitásakor az összes processzormagot felhasználja, és ha más programjaim is vannak, amelyekre szükség van a CPU-ra (például némi keresés nagy fájlokban a grep segítségével), akkor a rendszer lelassul. A megoldás olyan egyszerű, mint korlátozni a játékot, hogy csak az egyik magot használja.
Egyetértek az lf-vel is, ezt valóban be kellene integrálniuk a feladatkezelőkbe (azokat, amelyeket eddig kipróbáltam a Gentoo-n, azt hiszem, egyiknek sincs), különösen, ha a Windows-ban valami létezik az XP óta (jobb klikk egy process> "Set affinity ..."), de valamikor ezelőtt megtaláltam a következő szkriptet, amely a taskset-et valamivel intuitívebbé változtatja (eredetileg megjelent itt sőt vannak olyan esetek, amikor szükséges a magok kezelésének kezelése):
#!/bin/bash
read -p 'Ingrese el ID del proceso en cuestión: ' ID
read -p 'Ingrese la lista de procesadores separados por comas: ' P
echo 'Su ID es '$ID' y los procesadores son '$P
sudo taskset -p -c $P $ID
read -p 'Listo, presione enter para finalizar' P
Bizonyos módosításokkal a folyamat neve megadható a PID helyett (vagy hogy mindkettőt elfogadja, és hogy eldönti, hogy ez a paraméter melyik vagy másik).
az új felhasználók számára nincs grafikus felület a taskset számára, jó lenne