Naarmate multi-core processors steeds vaker voorkomen op servers, laptops of desktop-pc's, en zelfs mobiele apparaten, worden steeds meer applicaties geoptimaliseerd voor dit type systeem. Het kan echter soms handig zijn om een programma of proces te koppelen aan een of meer specifieke kernels. Laten we eens kijken hoe we het kunnen krijgen ...
Installeer takenet
De tasket tool maakt deel uit van het "util-linux" pakket. Bij de meeste Linux-distributies is het pakket standaard voorgeïnstalleerd. Indien de tasket niet beschikbaar is, is het mogelijk om deze als volgt te installeren:
En Debian / Ubuntu en derivaten:
sudo apt-get install util-linux
En Fedora en derivaten:
sudo yum installeer util-linux
Bekijk de CPU-affiniteit van een lopend proces
Gebruik de volgende indeling om CPU-affiniteitsinformatie voor een proces op te halen:
takenet -p PID
Om bijvoorbeeld de affiniteit van de CPU van een proces met PID 2915 te controleren:
takenet -p 2915
Retourneert het resultaat:
het huidige affiniteitsmasker van pid 2915: ff
takenet retourneert de huidige CPU-affiniteit in een hexadecimaal bitmaskerformaat. In het voorbeeld komt de affiniteit (weergegeven in een hexadecimaal bitmasker) overeen met "11111111" in binair formaat, wat betekent dat het proces kan worden uitgevoerd op elk van de acht verschillende CPU-kernen (0 tot 7).
Het laagste bit in een hexadecimaal bitmasker komt overeen met kern ID 0, het op één na laagste bit van rechts tot kern ID 1, het derde laagste bit tot kern ID 2, enzovoort. Een CPU-affiniteit "0x11" vertegenwoordigt bijvoorbeeld de kern-ID's 0 en 4.
tasket kan CPU-affiniteit weergeven als een lijst met processors in plaats van een bitmasker, wat veel gemakkelijker te lezen is. Om dit formaat te gebruiken, moet u de tasket uitvoeren met de optie "-c". Bijvoorbeeld:
takenet -cp 2915
Retourneert het resultaat:
huidige affiniteitslijst van pid 2915: 0-7
Forceer een proces om op een specifieke kernel te draaien
Met behulp van de tasket kan een lopend proces worden toegewezen aan een specifieke CPU-kern. Om dit te doen, moet u het volgende formaat gebruiken:
takenet -p COREMASK PID takenet -cp CORE-LIST PID
Als u bijvoorbeeld een proces wilt toewijzen aan kernen 0 en 4, voert u het volgende uit:
takenet -p 0x11 9030
Wat het resultaat oplevert:
pid 9030's huidige affiniteitsmasker: ff pid 9030's nieuwe affiniteitsmasker: 11
Op dezelfde manier kunt u uitvoeren:
takenet -cp 0,4 9030
Met de optie "-c" kunt u een lijst met numerieke kernel-ID's specificeren, gescheiden door komma's, of u kunt zelfs bereiken opnemen (bijvoorbeeld 0,2,5,6-10).
Start een programma met een specifieke kernel
tasket maakt het ook mogelijk om een nieuw programma te starten met een aantal specifieke kernels. Om dit te doen, moet het in de volgende indeling worden gebruikt:
COREMASK UITVOERBARE takenet
Gebruik bijvoorbeeld de volgende opdracht om het VLC-programma op CPU-kern ID 0 te starten:
takenet -c 0 vlc
Wijd een kern alleen aan een bepaald programma
Hoewel tasket het mogelijk maakt om een programma aan een bepaalde kernel toe te wijzen, betekent dat niet dat er geen andere programma's of processen zijn die er gebruik van maken. Om dit te vermijden en een hele kernel aan een bepaald programma te wijden, moet je de kernelparameter "isolcpus" gebruiken, waarmee je een kernel kunt reserveren tijdens het opstarten.
Om dit te doen, moet je de parameter "isolcpus =" toevoegen aan de kernelregel in GRUB. Als u bijvoorbeeld ID-kernen 0 en 1 wilt reserveren, voegt u "isolcpus = 0,1" toe.
Zodra dit is gebeurd, zal de Linux-planner geen reguliere processen meer aan de gereserveerde kernel toewijzen, tenzij specifiek toegewezen aan de tasket.
bron: xmodulo & takenet man-pagina's.
Goed bericht :).
Goede post maar zonder de geest van trollen ...
Wat is het nut van het toewijzen van een programma aan een specifieke kernel ???
Ik bedoel; Als je een computer hebt met 12 kernen, zou het logisch zijn dat een bepaald programma wordt uitgevoerd met behulp van die 12 kernen en het niet beperkt, omdat we op die manier de hoogst mogelijke prestaties behalen.
Wat ik wel zie is nuttig, is de optie waarmee we geen proces aan een bepaalde kernel kunnen toewijzen, en het exclusieve gebruik ervan aan een bepaald programma overlaten.
Het is logisch wat u zegt, door de planner alle kernen te laten gebruiken, zijn de bronnen beter uitgebalanceerd, maar soms is een speciale kern vereist, zoals het uitvoeren van een virtuele machine met een specifieke taak, de prestaties van die machine verbeteren aanzienlijk wanneer er geen meer processen draaien in de toegewezen kernel.
atte
jvk85321
Precies! Bedankt jvk! 🙂
Maar wanneer u de virtuele machine maakt, wordt u gevraagd om de hoeveelheid toegewezen CPU te kiezen ... wat heeft het voor zin om deze waarde te kiezen als het besturingssysteem dit uiteindelijk weglaat en het op alle CPU's uitvoert ... het voorbeeld is niet het beste ...
Om Flash te laten werken op Windows 8.1 x64, AMD en Firefox werd aanbevolen om ervoor te kiezen dat Flash alleen op een CPU draait, maar dat werkte niet voor mij. Het zou ook handig zijn als u het (als het er nog niet is) toevoegt aan de taakbeheerders van de verschillende DE, of tenminste de KDE.
ah, ik had het einde van de opmerking niet begrepen ... Maar daarvoor zouden alle processen op de CPU waarop de virtuele machine draait, moeten worden verbannen. Of wijs ze toe aan andere CPU's. Interessante en zeer goede opmerking.
Wordt gebruikt om geniale supercomputers te maken
Het is begrepen.
Bedankt voor de verduidelijking.
Als je een kernel reserveert voor een specifiek programma, wat gebeurt er dan met de executiethreads In het geval dat je het doet met een kernel met HT, reserveert het 2 executiethreads voor het programma.
Dit commando lijkt misschien niet erg handig op computers met meerdere cores, maar voor degenen onder ons met een Dual Core is het best praktisch. Ik heb bijvoorbeeld een game die bij het openen alle processorkernen gebruikt en als ik ook andere programma's heb die de CPU nodig hebben (zoals wat zoeken met grep in grote bestanden), dan vertraagt het systeem. De oplossing is zo simpel als het spel beperken tot slechts één van de kernen.
Ik ben het ook eens met als, ze dit echt zouden moeten integreren in taakbeheerders (degene die ik tot nu toe heb geprobeerd op Gentoo, ik denk dat niemand het heeft), vooral wanneer het op Windows iets is dat bestaat sinds XP (klik met de rechtermuisknop op een proces> "Set affinity ...") maar enige tijd geleden vond ik het volgende script dat de tasket omzet in iets meer intuïtief (oorspronkelijk gepubliceerd hier en er zijn zelfs enkele gevallen waarin het nodig is om het gebruik van de kernen te beheren):
#!/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
Met enkele aanpassingen zou het de naam van het proces kunnen aangeven in plaats van de PID (of dat het beide accepteert en dat het beslist wanneer die parameter de een of de ander is).
er is geen grafische interface voor takenset voor nieuwe gebruikers, het zou leuk zijn