Changer l’affinité du processus avec le script Windows

Dans Windows, avec

START /node 1 /affinity ff cmd /C "app.exe" 

Je peux définir l’affinité de app.exe (nombre de cœurs utilisés par app.exe).

Avec un script Windows, comment puis-je changer l’affinité d’un processus en cours d’exécution?

PowerShell peut faire cette tâche pour vous

Obtenir une affinité:

 PowerShell "Get-Process app | Select-Object ProcessorAffinity" 

Définir l’affinité:

 PowerShell "$Process = Get-Process app; $Process.ProcessorAffinity=255" 

Exemple: (processeur 8 Core)

  • Core # = Valeur = BitMask
  • Core 1 = 1 = 00000001
  • Core 2 = 2 = 00000010
  • Core 3 = 4 = 00000100
  • Core 4 = 8 = 00001000
  • Core 5 = 16 = 00010000
  • Core 6 = 32 = 00100000
  • Core 7 = 64 = 01000000
  • Core 8 = 128 = 10000000

Ajoutez simplement les valeurs décimales ensemble pour le kernel que vous souhaitez utiliser. 255 = Tous les 8 cœurs.

  • Tous les kernelx = 255 = 11111111

Exemple de sortie:

 C:\>PowerShell "Get-Process notepad++ | Select-Object ProcessorAffinity" ProcessorAffinity ----------------- 255 C:\>PowerShell "$Process = Get-Process notepad++; $Process.ProcessorAffinity=13" C:\>PowerShell "Get-Process notepad++ | Select-Object ProcessorAffinity" ProcessorAffinity ----------------- 13 C:\>PowerShell "$Process = Get-Process notepad++; $Process.ProcessorAffinity=255" C:\> 

La source:

Voici un article bien détaillé sur la façon de modifier l’affinité d’un processus: http://www.energizedtech.com/2010/07/powershell-setting-processor-a.html

La réponse acceptée fonctionne, mais uniquement pour le premier processus de la liste. La solution à cela dans les commentaires ne fonctionne pas pour moi.

Pour modifier l’affinité de tous les processus portant le même nom, utilisez ceci:

 Powershell "ForEach($PROCESS in GET-PROCESS processname) { $PROCESS.ProcessorAffinity=255}" 

255 est le masque indiqué dans la réponse acceptée. (Impossible de commenter encore, donc nouvelle réponse, désolé)

Pour quiconque cherchait des réponses à cette question et n’en trouvait pas, la solution que j’ai trouvée consistait à utiliser une application appelée WinAFC (ou AffinityChanger). Il s’agit d’une application de ligne de commande partielle partielle qui vous permet de spécifier des profils pour certains exécutables, et interroge la liste des processus pour eux. S’il trouve des processus de correspondance, cela changera l’affinité de ces processus en fonction des parameters du profil chargé.

Il y a de la documentation ici: http://affinitychanger.sourceforge.net/

Pour mon propos, j’ai créé un profil qui ressemblait à ceci:

 TestMode = 0 TimeInterval = 1 *\convert.exe := PAIR0+PAIR1 

Ce profil définit tout processus convert.exe pour utiliser les deux premières paires de cœurs de processeur (CPU0, CPU1, CPU2 et CPU3), en interrogeant chaque seconde. TestMode est un commutateur qui vous permet de voir si votre profil fonctionne sans définir d’affinités.

J’espère que quelqu’un trouve cela utile!

 wmic process where name="some.exe" call setpriority ProcessIDLevel 

Je pense que ce sont les niveaux de priorité. Vous pouvez également utiliser PID au lieu du nom du processus.