¿Por qué apt-get
no utiliza el 100% de la CPU, el disco o la red, o incluso cerca de él? Incluso en un sistema lento (Raspberry Pi 2+) obtengo como máximo un 30% de carga de CPU. Solo estoy pensando que o bien está siendo estrangulado artificialmente, o debería maximizar algo mientras está funcionando ... o debería ser capaz de hacer su trabajo más rápido de lo que lo hace.
Editar: solo estoy midiendo aproximadamente a través de monitores cpu / disk / net en mi panel y la aplicación System Monitor de Ubuntu MATE.
Por favor explique por qué estoy equivocado. :-)
Actualización: entiendo que apt-get
necesita obtener sus actualizaciones (y puede estar limitado por el ancho de banda ascendente / del proveedor). Pero una vez que está "desempacando" y así sucesivamente, el uso de la CPU debería al menos aumentar (si no el máximo). En mi estación de trabajo hogareña bastante decente, que usa un SSD para su unidad principal y un disco RAM para / tmp, este no es el caso.
O tal vez necesito echar un vistazo más de cerca.
apt-get
no es particularmente bueno para optimizar esto. Me imagino que podría instalarse a medida que se descarga para que cuando finalice la descarga, la mayor parte de su carga ya esté instalada, pero, desafortunadamente, no lo hace. En cualquier caso, las instalaciones independientes en su mayoría solo extraen datos al disco. Esas operaciones están inherentemente vinculadas a E / S, y simplemente no hay mucho más que hacer sino esperar en la unidad de disco para terminar de leer o escribir.Respuestas:
Las aplicaciones solo maximizarán la CPU si la aplicación está vinculada a la CPU . Una aplicación está vinculada a la CPU si puede obtener rápidamente todos sus datos y lo que espera es que el procesador procese los datos.
apt-get
, por otro lado, está sujeto a IO . Eso significa que puede procesar sus datos bastante rápido, pero cargar los datos (desde el disco o desde la red) lleva tiempo, durante el cual el procesador puede hacer otras cosas o permanecer inactivo si ningún otro proceso lo necesita.Por lo general, todas las solicitudes de E / S (disco, red) son lentas, y cada vez que un subproceso de la aplicación crea una, el núcleo lo eliminará del procesador hasta que los datos se carguen en el núcleo (= estas solicitudes de E / S se denominan solicitudes de bloqueo ).
fuente
apt
comandos, se ve agravado por el hecho de que muchos archivos están abiertos en modo de sincronización, o con frecuentes descargas explícitas al disco que se solicitan para garantizar que los datos en el disco se mantengan en un estado coherente, ya que un bloqueo del sistema podría tener serias consecuencias de lo contrario. La ejecución deapt
comandos aeatmydata
menudo puede mejorar drásticamente el rendimiento a expensas de una confiabilidad reducida (sin mencionar que los servicios iniciados como parte de las instalaciones de paquetes heredarán la configuración de eatmydata)El Raspberry Pi 2+ tiene 4 núcleos. Para algunas herramientas de monitoreo, un uso del 100% corresponde a todos los núcleos utilizados al 100%. Si solo se usa un núcleo en un procesador de código cuádruple, la carga de la CPU es del 25%. La carga de CPU del 30% que menciona es aproximadamente un núcleo utilizado al 100% mientras algunos procesos se ejecutan en los otros núcleos:
Como
apt-get
no es multiproceso, nunca usará más de un procesador, que es el 25% de todos los recursos de la CPU.Aquí hay un ejemplo en mi máquina de 8 núcleos (4 núcleos con Hyper-Threading ) que ejecuta Ubuntu, lancé un hilo con el
cat /dev/zero > /dev/null
comando para crear un proceso infinito que utiliza un núcleo por completo.Ahora, si echamos un vistazo al gráfico
htop
, podemos ver que la carga promedio (Avg
barra) es12.7%
, que corresponde a un núcleo utilizado al 100%, que también es 1/8 de todos los recursos de la CPU:También se puede observar que el comando tiene un valor
100%
en laCPU%
columna, esto se debe a que es relativo a un núcleo y no a todos los núcleos.fuente
/dev/zero > /dev/null
un mejor ejemplo, ya que urandom agotará el grupo de entropía?cat /dev/zero > /dev/null
da el mismo resultado, no conocía ese dispositivo, gracias. urandom agotará el grupo de entropía No sé el grupo de entropía, ¿cómo puede ser un problema?Creo que en realidad no estás midiendo el IO%. No he visto un widget Linux IO%. (Tengo mucha envidia del administrador de tareas de Windows 10 :). Verifique usando el
iotop
comando y verá 100% IO.top
debería mostrar 100% a través deuser
+system
+iowait
, para valores de 100% divididos por su recuento de núcleo como lo describe AL, no digo quetop
sea 100% útil, pero puede ser una herramienta versátil realmente útil para aprender.El rendimiento será inferior al máximo, porque está desempacando muchos archivos pequeños, también conocido como "IO aleatorio". También hay algunas descargas de sincronización de disco / caché, aunque desde 2010 en Linux solo hay unas pocas para cada paquete instalado. ( Solía ser uno por archivo ).
fuente
iotop --only
, la--only
opción de mostrar sólo los procesos o hilos realmente hacer E / S .En realidad, las solicitudes IO / Network son realmente lentas en comparación con las operaciones de CPU. Esto significa que mientras su tarjeta de red está recuperando datos, o su disco está escribiendo estos datos, su CPU no hace absolutamente nada (para este proceso de todos modos).
Si su disco duro es más veloz que su conexión de red (lo que probablemente sea cierto), no escribirá más de lo que ha recibido.
Finalmente, el porcentaje de red corresponde al uso máximo posible de la tarjeta de red , no a la conexión. Por lo tanto, es posible que tenga un adaptador de red de 1 Gb / s, es muy poco probable que tenga una conexión a Internet que alcance este ancho de banda.
fuente