¿Qué es Windows Priority and Affinity y qué ventajas ofrece?

9

Qué es exactamente Prioridad y afinidad (que se encuentra en el Administrador de tareas) y para qué se utilizan:

Encontrado dentro del Administrador de tareas

En qué situaciones deberían / ​​podrían usarse y qué ventajas se encuentran al personalizar esta configuración.

James Mertz
fuente

Respuestas:

3

Establecer afinidad hace algo, pero nunca querrás usarlo.

Establecer la afinidad de la CPU obliga a Windows a usar solo la CPU (o núcleos) seleccionada. Si configura la afinidad a una sola CPU, Windows solo ejecutará esa aplicación en esa CPU, nunca en ninguna otra.

Windows coloca automáticamente las aplicaciones en ejecución en el procesador menos ocupado, por lo que limitarlo a una sola CPU no permite que Windows haga su trabajo. Incluso si CPU / core 1 está ocupado ejecutando otras aplicaciones, Windows no podrá ejecutar una aplicación con afinidad establecida en CPU / Core 2.

Realmente, la única razón por la que querrías hacerlo es ejecutar una aplicación antigua que no funciona correctamente cuando se ejecuta en un sistema multi-CPU / Core.

shf301
fuente
55
> nunca querrás usarlo. No es verdad. Si tiene una aplicación de un solo subproceso, entonces no puede usar los hilos / núcleos de la CPU en toda su extensión y no hay nada que Windows pueda hacer para forzarla / engañarla. Si tiene dos aplicaciones de un solo subproceso, puede decirle a Windows que haga que cada una use un subproceso / núcleo separado para que en lugar de tener el uso total de la CPU alrededor del 50-75%, puede maximizarlo al 100% (cada núcleo siendo utilizado al máximo por un programa). Entonces, sí, puedes usar la configuración, pero es un escenario específico que la mayoría de la gente no sabrá / comprenderá / necesitará.
Synetech
2
Si tiene dos aplicaciones de un solo subproceso, Windows se ejecutará cada una en un subproceso / núcleo diferente y obtendrá un 100% de utilización de la CPU sin establecer afinidad. Para probar, acabo de ejecutar 4 instancias de un solo programa de subprocesos en mi máquina de 4 núcleos y obtuve el 100% de uso de la CPU. Windows es lo suficientemente inteligente como para programar las CPU de manera eficiente.
shf301
Supongo que depende del sistema y / o versión de Windows. Lo he visto (XP) desplazar ambos núcleos al 50-75% donde ambos procesos se configuraron en ambos núcleos y configurarlos manualmente maximizó la CPU.
Synetech
@Synetech: Eso parece casi imposible. Tendría que haber estado moviendo los dos procesos de núcleo a núcleo, siempre ambos al mismo tiempo.
David Schwartz
Otro caso de uso válido para esto: hay aplicaciones que pueden utilizar todas las CPU disponibles y pueden evitar que otros programas se ejecuten bien y / o hacer que el sistema operativo responda muy lentamente a la entrada del usuario. En este caso, alguien podría decidir limitar dicha aplicación a solo algunas de las CPU. Como desarrollador, uso esta característica con frecuencia cuando perfilo mis aplicaciones intensivas en CPU, ya que el acto de perfilar en sí mismo requiere CPU.
Eyal Roth
2

Establecer afinidad le dice a ese proceso en qué procesadores se le permite ejecutar.

Si bien es muy útil para algunos casos de nicho, el usuario promedio probablemente no debería meterse con eso.

Por ejemplo, si a un proceso se le permitiera ejecutar su propio núcleo, podría ejecutarse (casi) en tiempo real sin que esas 70 utilidades de Windows interrumpieran constantemente y cambiaran la pila en el procesador por su propio segmento de tiempo. Las aplicaciones en tiempo real eran algo que Windows nunca podría hacer antes de que los sistemas multiprocesador / multinúcleo salieran a escena porque el sistema operativo constantemente interrumpía / cambiaba la tarea de la aplicación para sus propios fines. Eso ahora se puede superar principalmente aislando el procesador de la aplicación en tiempo real y evitando que todas las demás aplicaciones del sistema usen ese procesador. Este es un tema muy específico, pero los sistemas como los simuladores de vuelo (reales), la automatización de fábrica y los sistemas de retroalimentación de control dependen de la arquitectura en tiempo real para funcionar.

Las aplicaciones intensivas del procesador (como las máquinas virtuales) se pueden aislar en su propio núcleo para que pueda usarlas sin tener que arrastrar el resto de su sistema. En teoría, un hipervisor que se ejecuta en un procesador que admite la interacción de hipervisor de metal desnudo puede alcanzar un rendimiento del procesador igual al sistema operativo independiente que se ejecuta por sí mismo (menos el procesador necesario para ejecutar el sistema operativo host). Por supuesto, en la práctica, incluso una máquina virtual que se ejecute en su propio núcleo / procesador aislado deberá aceptar una pequeña cantidad de sobrecarga del host del sistema operativo host.

Para las aplicaciones que manejan una gran cantidad de datos en flujo, aislar la aplicación a su propio procesador (y potencialmente aún utilizar múltiples núcleos) reducirá el intercambio de caché.

Las aplicaciones más antiguas que se rompen cuando se distribuyen en múltiples procesadores pueden limitarse efectivamente a un núcleo / procesador para solucionar el problema.

Si estaba haciendo mediciones de rendimiento en una aplicación específica, es casi imposible obtener resultados consistentes en diferentes sistemas a menos que pueda aislar el proceso porque, de lo contrario, no tiene control sobre cuánto tiempo le da el sistema operativo a su aplicación. La mayoría de las personas está de acuerdo en que medir el rendimiento en tiempo de ejecución no da buenos resultados, pero esas personas nunca han considerado que la intervención del sistema operativo (que hace que los resultados sean tan inconsistentes) puede limitarse mediante el uso de la afinidad.

Hay muchos casos en los que la afinidad es vital pero, si no sabes cuáles son, probablemente no la necesites.

Evan Plaice
fuente
Lo que hace que la afinidad sea mucho menos útil de lo que muchos piensan que debería ser es esto: establecer la afinidad del proceso en algún subconjunto de las CPU disponibles. no cierra nada más de esas CPU. Para hacerlo, tendría que ir a todos los demás procesos en el sistema para mantenerlos fuera de la CPU que desea tener para usted. Eso casi nunca es práctico.
Jamie Hanrahan
Es posible usar software de terceros . Por qué MS no incluye esta funcionalidad por defecto está más allá de mí.
Evan Plaice
Porque, como escribí, no es tan útil. Y es muy propenso al mal uso. De hecho, el resultado habitual de ser demasiado "creativo" con afinidad es que las cosas no están funcionando cuando de otra manera podrían estarlo. Por lo general, es mejor ejecutar un subproceso que no sea lo que crees que es la CPU preferida que nada (después de haber establecido una afinidad tonta para negarle el acceso a las CPU que de otro modo estarían inactivas). El mecanismo predeterminado de "procesador ideal" y "procesador anterior" de Windows logra una buena coherencia de caché sin el instrumento contundente de la máscara de afinidad.
Jamie Hanrahan
2

Esta es una característica muy útil en ciertos escenarios. Supongamos que tiene una aplicación multiproceso que tiende a estar inactiva o a tomar agresivamente el 100% de cada CPU durante varios minutos, haciendo búsquedas, compilaciones, etc. Llamemos a esta aplicación "eclipse".

Digamos también que mientras trabaja en esta aplicación, tiene muchas otras aplicaciones que tienen requisitos de CPU modestos, pero que son esencialmente aplicaciones en tiempo real. Por ejemplo, mientras usa Eclipse y está iniciando aleatoriamente las compilaciones o haciendo compilaciones gwt, también está usando su computadora para transmitir música o realizar investigaciones en una ventana del navegador (por ejemplo, investigando la causa de un problema de compilación) . Claro, no morirás si tu música se salta o tu navegador deja de responder, pero es molesto.

Lo que la afinidad le permite hacer es limitar su aplicación de alimentación de CPU a 7/8 núcleos para que todos los demás tengan acceso garantizado a una CPU relativamente no utilizada y no tenga que lidiar constantemente con la tartamudez y las interrupciones en la usabilidad de todo lo demás en su computadora mientras el eclipse se está desmoronando.

Jim W
fuente
Sería mucho mejor en este caso, simplemente configurando su proceso de CPU hog a baja prioridad.
Jamie Hanrahan
1

Mayor prioridad significa que el procesamiento de una tarea se verá favorecido sobre las tareas de baja prioridad. Si está ejecutando una aplicación que necesita para ser muy receptiva, y un montón de otros procesos no interactivos, por ejemplo, las prioridades pueden garantizar una mejor experiencia con su proceso de alta prioridad.

Por ejemplo: desde Windows Vista, Windows Media Player obtiene automáticamente una mayor prioridad para garantizar una reproducción fluida y continua de los archivos multimedia, con solo aproximadamente el 20% del tiempo de CPU disponible para otros procesos de forma predeterminada. Este es solo un ejemplo para ayudarlo a comprender qué hacen las prioridades. (Puede leer más sobre las prioridades de Media Player en Vista en Technet ).

La afinidad suave o dura puede aumentar la velocidad de procesamiento porque la memoria caché de la CPU todavía puede tener restos del proceso cuando un proceso se interrumpió previamente y luego se reanudó en un momento posterior.

David M
fuente
Dulce gracias! Entonces, ¿cuál es una buena guía para usar la afinidad?
James Mertz
Una buena guía para usar la afinidad: "No lo hagas".
Jamie Hanrahan
El "solo 20% de tiempo de CPU disponible para otros procesos" no es una descripción precisa. La implementación real es que un subproceso que se incorpora al programador de clases multimedia puede ejecutarse hasta en un 80% de cada intervalo de programación en la clase de prioridad en tiempo real. No necesariamente tiene que usar tanto, y si no lo hace. más del 20% estará disponible para otros hilos.
Jamie Hanrahan
1

Un ejemplo perfecto de esto son los viejos juegos de computadora (u otro software), especialmente cuando los juegos de 32 bits (aplicaciones) se emulan en una computadora moderna de 64 bits. Al establecer la afinidad por los juegos antiguos limitándolos a solo cuatro núcleos, a menudo se pueden evitar bloqueos para permitir que comiencen los juegos de stubburn. Algunos motores de renderizado utilizados por juegos OLD, editores de video y software de gráficos acelerados por hardware, o software CAD, no entienden más de cuatro núcleos de CPU y se estrellarán cuando se inicien.

No estoy creando una cuenta solo para publicar esto, para encontrarme en Google 'kieseyhow'

Kieseyhow
fuente