Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change affinity of process with windows script

In Windows, with

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

I can set the affinity of app.exe (number of cores used by app.exe).

With a windows script, How I can change the affinity of a running process ?

like image 462
JuanPablo Avatar asked Oct 04 '13 17:10

JuanPablo


People also ask

How do I check my CPU affinity?

Processor affinity or CPU pinning enables applications to bind or unbind a process or a thread to a specific core or to a range of cores or CPUs. The operating system ensures that a given thread executes only on the assigned core(s) or CPU(s) each time it is scheduled, if it was pinned to a core.


2 Answers

PowerShell can do this task for you

Get Affinity:

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

Set Affinity:

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

Example: (8 Core Processor)

  • Core # = Value = 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

Just add the decimal values together for which core you want to use. 255 = All 8 cores.

  • All Cores = 255 = 11111111

Example Output:

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:\>

Source:

Here is a nicely detailed post on how to change a process's affinity: http://www.energizedtech.com/2010/07/powershell-setting-processor-a.html

like image 98
David Ruhmann Avatar answered Nov 15 '22 17:11

David Ruhmann


The accepted answer works, but only for the first process in the list. The solution to that in the comments does not work for me.

To change affinity of all processes with the same name use this:

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

Where 255 is the mask as given in the accepted answer.

like image 30
skjerns Avatar answered Nov 15 '22 19:11

skjerns