Saltar al contenido

Cambiar la afinidad del proceso con el script de Windows

Ten en cuenta que en las ciencias informáticas un error casi siempre tiene más de una resoluciones, así que te compartiremos lo más óptimo y eficiente.

Solución:

PowerShell puede hacer esta tarea por usted

Obtener afinidad:

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

Establecer afinidad:

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

Ejemplo: (procesador de 8 núcleos)

  • Centro # = Valor = máscara de bits
  • Núcleo 1 = 1 = 00000001
  • Núcleo 2 = 2 = 00000010
  • Núcleo 3 = 4 = 00000100
  • Núcleo 4 = 8 = 00001000
  • Núcleo 5 = 16 = 00010000
  • Núcleo 6 = 32 = 00100000
  • Núcleo 7 = 64 = 01000000
  • Núcleo 8 = 128 = 10000000

Simplemente agregue los valores decimales para el núcleo que desea usar. 255 = Los 8 núcleos.

  • Todos los núcleos = 255 = 11111111

Salida de ejemplo:

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

Fuente:

Aquí hay una publicación muy detallada sobre cómo cambiar la afinidad de un proceso:
http://www.energizedtech.com/2010/07/powershell-setting-procesador-a.html

La respuesta aceptada funciona, pero solo para el primer proceso de la lista. La solución a eso en los comentarios no me funciona.

Para cambiar la afinidad de todos los procesos con el mismo nombre, use esto:

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

Donde 255 es la máscara dada en la respuesta aceptada.

Para cualquier otra persona que busque respuestas a esto y no encuentre ninguna, la solución que encontré fue usar una aplicación llamada WinAFC (o AffinityChanger). Esta es una GUI parcial, una aplicación de línea de comando parcial que le permite especificar perfiles para ciertos ejecutables y sondeará la lista de procesos para ellos. Si encuentra procesos coincidentes, cambiará la afinidad de esos procesos de acuerdo con la configuración en el perfil cargado.

Hay algo de documentación aquí: http://affinitychanger.sourceforge.net/

Para mis propósitos, creé un perfil que se veía así:

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

Este perfil configura cualquier proceso convert.exe para usar los primeros dos pares de núcleos de CPU (CPU0, CPU1, CPU2 y CPU3), sondeando cada segundo. TestMode es un conmutador que le permite ver si su perfil está funcionando sin establecer afinidades.

¡Espero que alguien encuentre esto útil!

Al final de la web puedes encontrar las notas de otros desarrolladores, tú asimismo eres capaz insertar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *