c # - Ændring af processorkoncernen til en aktiv proces på Windows 2012

Indlæg af Hanne Mølgaard Plasc

Problem



På grund af pludselig drift på Windows 2012-servere med mere end 64 processorer, er vi tvunget til at kæmpe med flere processorgrupper.


Med vores opsætning vil det være svært at indlede processer og specificere målprocessorkoncernen, så vi har til formål at ændre processorkoncernen for en række processer i c # eller c ++.


I betragtning af at vi kan få listen over proceshåndtag, hvad er det nødvendigt at:



  1. Få processorgruppen, som hver af disse processer kører på

  2. Opdater et bestemt sæt af disse processer 'processorkoncernværdier for at ændre hvilken gruppe de' kører på.


Bedste reference


Jeg vil gerne citere dette relaterede MSDN forum svar: Process Affinity på et system med 128 processorer [1]



  I teorien kan du oprette en lille driver, der bruger
  KeSetSystemGroupAffinityThread til at ændre affiniteten. Jeg siger ind
  teori fordi sinus dette er et nyt kald og begrænset dokumentation det
  Måske virker det ikke. Selvfølgelig når du gør det, er der spørgsmålet om
  Ansøgningen vil fungere, jeg antager, at du har læst
  http://download.microsoft.com/download/a/d/f/adf1347d-08dc-41a4-9084-623b1194d4b2/MoreThan64proc.docx
  med sine advarsler om flere grupper og applikationer, der ikke var
  skrevet for at drage fordel af dem. [2]



Se også på: Eksempel brug af SetProcessAffinityMask i C ++?

Andre referencer 1


En proces er tildelt en gruppe af Windows, når den oprettes. Det ser ikke ud til, at dette kan ændres direkte.


For at få listen over processorgrupper tilhører en proces (der kan være mere end en), ring GetProcessGroupAffinity. [4]


For at opdatere gruppen til en proces skal du ændre gruppen for hver af tråden i processen ved hjælp af SetThreadGroupAffinity. Dette ville naturligvis være nemmest, når det lige er startet og kun har en tråd. [5]