Cuando se habla del rendimiento en un servidor, hay algunas formas diferentes de verlo. Existe el tiempo de respuesta aparente (similar a la latencia de la red) y el rendimiento (similar al ancho de banda de la red).
Algunas versiones de Windows Server se entregan con la configuración de Energía equilibrada habilitada de manera predeterminada. Como Jeff señaló. Windows 2008 R2 es uno de ellos. En la actualidad, muy pocas CPU son de un solo núcleo, por lo que esta explicación se aplica a casi todos los servidores de Windows con los que se encontrará, a excepción de las máquinas virtuales de un solo núcleo. (Más sobre eso más adelante).
Cuando el plan de energía equilibrado está activo, la CPU intenta reducir la cantidad de energía que está utilizando. La forma en que lo hace es deshabilitando la mitad de los núcleos de CPU en un proceso conocido como "estacionamiento". Solo la mitad de las CPU estarán disponibles a la vez, por lo que consume menos energía en momentos de poco tráfico. Esto no es un problema en sí mismo.
Lo que ES un problema es el hecho de que cuando las CPU no están estacionadas, ha duplicado los ciclos de CPU disponibles disponibles para el sistema y de repente desequilibró la carga en el sistema, pasando de (por ejemplo) una utilización del 70% al 35%. El sistema analiza eso y después de que se procesa la ráfaga de tráfico, piensa "Oye, debería volver a marcar esto un poco para ahorrar energía". Y así es.
Aquí está la parte mala. Para evitar una distribución desigual del calor y la energía dentro de los núcleos de la CPU, tiene la tendencia a estacionar las CPU que no se han estacionado recientemente. Y para que eso funcione correctamente, la CPU necesita vaciar todo, desde los registros de la CPU (caché L1, L2 y L3) a otra ubicación (probablemente memoria principal).
Como ejemplo hipotético, supongamos que tiene una CPU de 8 núcleos con C1-C8.
- Activo: C1, C3, C5, C7
- Estacionado: C2, C4, C6, C8
Cuando esto sucede, todos se activan por un período de tiempo y luego el sistema los estaciona de la siguiente manera:
- Activo: C2, C4, C6, C8
- Estacionado: C1, C3, C5, C7
Pero al hacerlo, hay una buena cantidad de sobrecarga asociada con el vaciado de todos los datos de la memoria caché L1-L3 para que esto suceda de manera que no ocurran errores extraños en los programas que fueron vaciados de la tubería de la CPU.
Probablemente haya un nombre oficial para él, pero me gusta explicarlo como un golpe de CPU. Básicamente, los procesadores pasan más tiempo haciendo trabajo ocupado moviendo datos internamente de lo que están procesando solicitudes de trabajo.
Si tiene algún tipo de aplicación que necesita baja latencia para sus solicitudes, debe deshabilitar la configuración de Energía equilibrada. Si no está seguro de si esto es un problema, haga lo siguiente:
- Abre el "Administrador de tareas"
- Haga clic en la pestaña "Rendimiento".
- Haga clic en "Abrir Monitor de recursos"
- Seleccione la pestaña "CPU"
- Mire el lado derecho de la ventana en las distintas CPU.
Si ve que alguno de ellos está estacionado, notará que la mitad de ellos están estacionados en un momento dado, todos se encenderán y luego la otra mitad se estacionará. Alterna de ida y vuelta. Por lo tanto, las CPU del sistema están agitándose.
Máquinas virtuales: este problema es aún peor cuando está ejecutando una máquina virtual porque hay una sobrecarga adicional del hipervisor. En términos generales, para que se ejecute una VM, el hardware debe tener un espacio de tiempo disponible para cada uno de los núcleos en cada segmento de tiempo.
Si tiene una pieza de hardware de 16 núcleos, puede ejecutar máquinas virtuales utilizando más de 16 núcleos totales, pero para cada segmento de tiempo, solo serán elegibles hasta 16 CPU virtuales para ese segmento de tiempo y el hipervisor debe adaptarse a todos los núcleos para una máquina virtual en ese intervalo de tiempo. No se puede distribuir en múltiples intervalos de tiempo. (Un intervalo de tiempo es esencialmente un conjunto de X ciclos de CPU. Puede ser 1000 o 100k ciclos)
Ej: hardware de 16 núcleos con 8 máquinas virtuales. 6 tienen 4 CPU virtuales (4C) y 2 tienen 8 CPU virtuales (8C).
Timeslice 1: 4x4C Timeslice 2: 2x8C Timeslice 3: 2x4C + 1x8C Timeslice 4: 1x8C + 2x4C
Lo que el hipervisor no puede hacer es dividir la mitad de la asignación para un segmento de tiempo en las primeras 4 CPU de una VM de 8 vCPU y luego en el siguiente segmento de tiempo, dar el resto a los otros 4 vCPU de esa VM. Es todo o nada dentro de un intervalo de tiempo.
Si está utilizando Hyper-V de Microsoft, la configuración de control de energía podría habilitarse en el sistema operativo host, lo que significa que se propagará a los sistemas del cliente, lo que también los afectará.
Una vez que vea cómo funciona esto, es fácil ver cómo el uso de la configuración de Control de energía equilibrado causa problemas de rendimiento y servidores lentos. Uno de los problemas subyacentes es que la solicitud entrante debe esperar a que se complete el proceso de estacionamiento / desarmado de la CPU antes de que el servidor pueda responder a la solicitud entrante, ya sea una consulta de base de datos, una solicitud de servidor web o cualquier otra cosa .
A veces, el sistema estacionará o desanclará CPU en medio de una solicitud. En estos casos, la solicitud comenzará en la tubería de la CPU, será expulsada de ella y luego un núcleo de CPU diferente recogerá el proceso desde allí. Si se trata de una solicitud lo suficientemente fuerte, esto podría suceder varias veces durante el transcurso de la solicitud, cambiando lo que debería haber sido una consulta de base de datos de 5 segundos a una consulta de base de datos de 15 segundos.
Lo más importante que verá al usar Balanced Power es que los sistemas se sentirán más lentos para responder a casi todas las solicitudes que realice.