[Re: Comando uptime !!]
Fernando Diaz
fdiazr@usa.net
5 Dec 00 14:23:05 AST
Excelente explicación....
Ernesto Hernández-Novich <emhn@telcel.net.ve> wrote:
On Fri, 01 Dec 2000, you wrote:
> Hola listeros, soy nuevo aqui:
>
> Alguien sabe de que manera el comando uptime de linux calcula el promedio
> de carga de la CPU, o sea, en que medidas se basa ??
Un proceso Unix puede tener los siguientes estados:
Running - Tiene un CPU y está corriendo actualmente. Espero que les resulte
obvio que en un instante de tiempo solamente puede haber tantos procesos
running como CPUs físicos tenga la máquina. Si agota su tiempo permitido de
CPU
(slice) o necesita esperar por I/O, el kernel lo convierte en "Ready" o
"Sleeping" según sea el caso.
Ready - Tiene todo lo que necesita para correr, excepto el CPU, y está a la
espera del schedular para ponerse a trabajar. Tan pronto alguno de los
"Runnning" se echa a dormir, o consume su tiempo permitido, el scheduler del
kernel convierte alguno de los "Ready" en "Running" y lo pasa al procesador.
Sleeping - Está esperando por un evento de I/O y por lo tanto se echa a
dormir
para no molestar a los demás. Ni tiene CPU, ni le interesa por los momentos.
Tan pronto el evento de I/O ocurre, el kernel "despierta" al proceso y lo
convierte en "Ready". Espero que les resulte obvio que ninguno de estos
procesos interfiere en la carga del sistema (salvo el consumo de RAM).
La "carga" que muestra uptime, es una medida de la "competencia"
entre procesos Running y Ready por las capacidades de cómputo del sistema,
indicada por el número _promedio_ de procesos Ready en el intervalo de tiempo
de 1, 5 y 15 minutos. Esta es la respuesta concreta a tu pregunta, el
asunto es explicarlo en términos menos técnicos. Puedes pensarlo así:
Los procesos que tienen CPU no se pelean por él, simplemente lo usan; los
procesos que están Ready podrían estar haciendo algo, pero no lo están porque
no tienen CPU para hacerlo. El sistema está "cargado" de procesos que quieren
hacer algo pero no pueden.
La mejor analogía que se me ocurre es la de varios cajeros de un banco con
una
fila común: quienes están siendo atendidos poco les importa los que están
detrás, los que están en fila podrían estar siendo atendidos pero no tienen
un
cajero... la "carga" del banco es el promedio de personas en la fila en los
intervalos de 1 min, 5 min y 15 min (sin contar a los que están siendo
atendidos).
En general, una carga en [0-4) es razonable, [4,6) es moderada y [6,oo) es
alta. Los promedios generados por uptime en la mayoría de los Unix son
_absolutos_ y deben _dividirse_ entre el número de procesadores para obtener
la
carga ponderada. Nuestros compañeros físicos podrán identificar
inmediatamente
la naturaleza no lineal de esta medición, basada en que un CPU sólo puede
tener
carga 0 o 100 en un instante infinitesimal de tiempo... pero no nos queda
otra
que "discretizar" la medida, con lo cual nuestro amigo Heisenberg se hace
presente cada vez que ejecutamos uptime o top :-)
El lector avispado dirá, ¿pero si yo tengo _un_ sólo proceso corriendo, sin
otros Ready, por qué me muestra la carga en 1? Si el kernel es preemptivo, es
muy simple: porque el kernel interrumpe al CPU por consumir su slice, lo
transforma en Ready, y como es el único, vuelve a correr :-) Si el kernel no
es
100% preemptivo, también es muy simple: porque el proceso coopera indicado
"CPU-boundness", el kernel le baja la prioridad, lo vuelve Ready, y como es
el
único, vuelve a correr :-) En ambos casos, la prioridad del proceso baja, con
lo que _cualquier_ proceso que esté dormido, inmediatamente tendrá mayor
prioridad y tomará el CPU tan pronto tenga oportunidad.
La teoría onda-partícula del uso del CPU en kernels de tiempo compartido :-)
--
Ernesto Hernández-Novich - Running Linux 2.2.17 i686 - Unix: Live free or
die!
-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS d+(-) s+: a C+++$ UBLAVHIOSC++++$ P++++$ L+++$ E- W+ N++ ?o ?K w--- O- M-
V
PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G>++ e++ h+ r+ y++
-----END GEEK CODE BLOCK-----
----------------------------------------------------------------------------
Para retirarte de la lista debes enviar un mensaje a majordomo@linux.org.ve
y en el cuerpo del mensaje colocar UNSUBscribe l-linux
----------------------------------------------------------------------------
____________________________________________________________________
Get free email and a permanent address at http://www.netaddress.com/?N=1
----------------------------------------------------------------------------
Para retirarte de la lista debes enviar un mensaje a majordomo@linux.org.ve
y en el cuerpo del mensaje colocar UNSUBscribe l-linux
----------------------------------------------------------------------------