¿Por qué los servidores no siempre se ejecutan al máximo?

12

Esta es una pregunta que me ha estado molestando por un tiempo, y parece que no puedo encontrar nada en línea que lo hable. Tengo un servidor que ejecuta VMware Hypervisor ESXi. Cuando inicio máquinas virtuales en él, generalmente tardan 2-3 minutos en iniciarse; No es un tiempo terriblemente largo, pero no instantáneo. Sin embargo, cuando miro los registros de rendimiento en el servidor, ni el uso del procesador, RAM o disco es de alrededor del 100%; generalmente promedian alrededor del 60% -80% Entonces, si el servidor tiene trabajo que hacer, ¿por qué no lo hace al 100%?

Me parece que en cualquier momento dado, el componente que limita el rendimiento debería ejecutarse al 100%. Por ejemplo, si tengo un disco duro realmente lento, casi siempre debería funcionar al 100%. Por lo tanto, al menos una de las áreas (procesador, RAM, disco y red) siempre debe estar al 100%, a menos que el servidor esté completamente inactivo.

¿Por qué no es este el caso?

Kernel Stearns
fuente
Las distribuciones de Linux más antiguas, no basadas en systemd, no podían paralelizar eficientemente el inicio. Los * BSD todavía sufren de esto. Inicie una distribución moderna de Linux y vea cómo difiere.
Michael Hampton

Respuestas:

18

La latencia será una de las razones. El retraso entre "el disco me da estos datos que necesito antes de que pueda hacer otra cosa" y el momento en que los datos vuelven dejarán la CPU inactiva durante ese tiempo.

Los recursos probablemente se ejecutan al 100%, pero por períodos muy breves. Un arranque del sistema operativo seguirá el patrón general de "procesar o decidir algo, buscar algo del disco, hacer algo en la memoria, hacer algo con un dispositivo", repitiéndose muchas veces por segundo. Entonces, cuando ve un disco al 25% en un período de 2 segundos, eso probablemente significa que se estaba ejecutando al 100% durante 0,5 segundos y luego está inactivo el resto del tiempo.

Como EEAA señaló, los sistemas multinúcleo hacen que esto sea un poco más complejo. Una sola pieza de software en una CPU que puede ejecutar cuatro subprocesos solo puede alcanzar el 25% a toda velocidad. Incluso el software multiproceso rara vez puede alcanzar el 100%, porque los datos tienen que fluir (generalmente) desde el disco duro, la RAM, el caché y la CPU. Mantener esa tubería llena es difícil y tiende a suceder principalmente con cargas de trabajo predecibles como la codificación de video. En este caso, el sistema operativo puede observar patrones de lectura y recuperar datos antes de que sea necesario, colocándolos en cachés apropiadas, como el caché de disco en la RAM.

Tim
fuente
16

Estás pensando en esto de una manera muy simplista, lo que hace que hagas algunas suposiciones incorrectas, que intentaré aclarar.

Primero, y potencialmente de la manera más simple, en un sistema multinúcleo, para comprender el uso de la CPU, debe tener en cuenta si la carga del proceso es multiproceso o no, y está diseñada para aprovechar múltiples núcleos. Si este no es el caso, dependiendo de la combinación de procesos en ejecución, es posible que nunca vea el 100% de uso. Nunca.

En segundo lugar, debe tener en cuenta el rendimiento del dispositivo IO. ¿Cómo sabe su sistema, por ejemplo, de cuántas IOps son capaces sus dispositivos? No lo hace. Una medida más significativa para que vea es su iowaitvalor durante el arranque (que puede ser difícil de obtener durante el proceso de arranque) o las colas / latencia del disco durante el arranque (que debería ser más fácil de obtener de su hipervisor). Si ve colas o picos de latencia, es probable que sus dispositivos IO sean un factor que contribuya a sus problemas de rendimiento.

EEAA
fuente
11

He estado trabajando con el servidor durante unos 20 años, por lo general, no es algo bueno cuando un componente se ejecuta al 100% todo el tiempo.

Por ejemplo, supongamos que tiene una base de datos SQL que no desea intercambiar en el disco, sino que quiere quedarse sin memoria.

Si su base de datos es de 24 GB y el sistema operativo necesita 8 GB, no le gustaría asignar solo 32 GB de RAM para la máquina, hay muchas "cosas" que pueden salir mal, mal código, DDOS, uso intensivo de aplicaciones, quién sabe, sin espacio para la cabeza, ¿cómo sabrías que el servidor está en problemas?

Tenemos alrededor de 2000 servidores en nuestro centro de datos, nos gusta verlos a todos funcionando con aproximadamente un 75% de CPU y RAM, hay espacio en nuestra SAN, por lo que es una bola de cera completamente diferente. También tenemos alertas para informarnos cuando alcanzan el 85% de CPU o RAM, y alarmas para informarnos cuando alcanzan el 90%.

Anthony Fornito
fuente
Creo que te has desviado un poco aquí. Dije que estoy ejecutando máquinas virtuales, por lo que hay una carga constante que es muy diferente a la de un servidor de bases de datos, que se ejecuta cuando recibe solicitudes y asigna recursos. Me preocupaba más el factor de rendimiento limitante, no cómo se asignan esos recursos. ¡Pero gracias por la respuesta!
Kernel Stearns