Hoe een programma aan een CPU-kern kan worden toegewezen met behulp van de tasket

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.


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.

  1.   petertsjechisch zei

    Goed bericht :).

  2.   Luis zei

    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.

    1.    jvk85321 zei

      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

      1.    laten we linux gebruiken zei

        Precies! Bedankt jvk! 🙂

      2.    lf zei

        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.

      3.    lf zei

        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.

    2.    Fernando zei

      Wordt gebruikt om geniale supercomputers te maken

  3.   Luis zei

    Het is begrepen.

    Bedankt voor de verduidelijking.

  4.   Teck zei

    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.

  5.   Wisselaar zei

    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).

  6.   joss zei

    er is geen grafische interface voor takenset voor nieuwe gebruikers, het zou leuk zijn