Publicado el 2 de Enero del 2021
1.105 visualizaciones desde el 2 de Enero del 2021
581,2 KB
42 paginas
Creado hace 14a (21/03/2011)
Monitoreo de CPU y memoria
Diseño y Evaluación de Configuraciones
Curso 2010-11
Miguel Telleria de Esteban
telleriam AT unican.es
Computadores y Tiempo Real
http://www.ctr.unican.es
Computadores y Tiempo Real
Universidad de Cantabria
Diseño y Evaluación de Configuraciones
Monitoreo de CPU y memoria
Contenido
● Conceptos
● Notas sobre el planificador de Linux y la gestión de memoria
● Herramientas de monitorización
● Gnome-system-monitor
● Top y htop
● Ps
●
/usr/bin/time
● Traceado de ejecución con ftrace
3 Mar 2011
Miguel Telleria de Esteban telleriam AT unican.es)
Página 2 de 42
Conceptos sobre CPU y memoria
Computadores y Tiempo Real
Universidad de Cantabria
Diseño y Evaluación de Configuraciones
Monitoreo de CPU y memoria
Procesos y threads
● En GNU/Linux la interfaz POSIX thread está ofertada por la
librería NPTL integrada en la librería general GLIBC
● Anteriormente (2004-05) se usaba linuxthreads
● La interfaz es 100% user-space.
– Pero el kernel se ha adaptado a ella (syscalls clone y vfork).
● A efectos de planificación un pthread y un proceso son vistos
iguales por el kernel
● Cada uno tiene su PID. pthread_self() no tiene efecto en el kernel
● Cada uno tiene su prioridad y política de planificación
● Cada uno tiene su máscara de afinidad de CPU
● El kernel mantiene estadísticas y relojes de ejecución independientes
● La diferencia está en el uso de la memoria
3 Mar 2011
Miguel Telleria de Esteban telleriam AT unican.es)
Página 4 de 42
Computadores y Tiempo Real
Universidad de Cantabria
Diseño y Evaluación de Configuraciones
Monitoreo de CPU y memoria
Planificación de CPU en Linux
● Desde la versión 2.6.23 el kernel Linux redefinió el planificador
● Se pasa del antiguo O(1) a CFS: Complete Fairness Scheduler
● Características:
● Es jerárquico llevado por clases de procesos
– Primera prioridad: Clase real-time: Políticas SCHED_FIFO y SCHED_RR
– Clase normal (por defecto): Políticas SCHED_OTHER, SCHED_BATCH y
SCHED_IDLE
● En la clase normal Intenta dar a cada LWP un tiempo de CPU equitativo
pero proporcional a su nivel de nice
● Además realiza periódicamente un reparto de carga entre los diferentes
cores
● Mas info: documentation/scheduler en las fuentes del kernel
3 Mar 2011
Miguel Telleria de Esteban telleriam AT unican.es)
Página 5 de 42
Computadores y Tiempo Real
Universidad de Cantabria
Diseño y Evaluación de Configuraciones
Monitoreo de CPU y memoria
Parámetros de planificación de CPU en Linux
● Policy: Política de planificación
● SCHED_OTHER o SCHED_NORMAL: Por defecto, round-robin con timeslice
variable
● SCHED_RR: POSIX Real-Time: Round robin con timeslice fija
● SCHED_FIFO: POSIX Real Time: prioridades fijas
Las políticas SCHED_FIFO y SCHED_RR tienen prioridad sobre
SCHED_NORMAL.
● Nice: Avaricia del proceso
● Sólo se usa en SCHED_NORMAL, se ignora para real time
● Oscila entre: (-20 valor más prioritario y 19), por defecto 0
rt-priority: Nivel de preempción
● Se usa en SCHED_RR y SCHED_FIFO, ignorada en SCHED_NORMAL
●
● Máscara de afinidad
● Define en que CPU(s) un proceso admite ser ejecutado
3 Mar 2011
Miguel Telleria de Esteban telleriam AT unican.es)
Página 6 de 42
Computadores y Tiempo Real
Universidad de Cantabria
Diseño y Evaluación de Configuraciones
Monitoreo de CPU y memoria
Parámetros de planificación de CPU en Linux (2)
● Normalmente por prioridad se suele entender el valor de nice
● Puede ser de 0 a 39 (top) o de -20 a 19 (gnome-system-monitor)
● Existen 2 herramientas que distinguen entre nice y rt-priority
●
/proc/<pid>/sched
– 0 – 99: Prioridad realtime, task bajo SCHED_RR o SCHED_FIFO
– 100-139: Valor de nice, task bajo SCHED_OTHER
● Comando chrt -p <pid>
– Si es de SCHED_OTHER: devuelve el nice: rango de -20 a 19
– Si es SCHED_RR o SCHED_FIFO devuelve la rt-priority: rango de 0 a 99
● La afinidad se representa mediante una máscara binaria
● CPU 0: 1 CPU 1: 2 CPU 3: 4 CPU 4: 8
● Valor 3: CPU's 0 y 1
● Se obtiene con taskset -p <pid>
...
3 Mar 2011
Miguel Telleria de Esteban telleriam AT unican.es)
Página 7 de 42
Computadores y Tiempo Real
Universidad de Cantabria
Diseño y Evaluación de Configuraciones
Monitoreo de CPU y memoria
Información de CPU sobre threads
● Las diferentes herramientas que vamos a ver indican la siguiente información
Identificador del LWP en el kernel y herramientas
Identificador del LWP- padre en el kernel
sobre cada LWP
● Pid
● Ppid
● State Estado del LWP (ver más adelante)
● Prioridad o nice: Diferentes representaciones de lo mismo
● WCHAN: Naturaleza de la última espera (WCHAN: Waiting Channel)
● Procesador: Última CPU en la que se le vio correr
● Métricas
● Porcentaje de uso de la CPU
● Tiempo de ejecución en user-mode
● Tiempo de ejecución en kernel-mode
● Tiempo de bloqueo en espera
● Número de cambios de contexto
● Numero de operaciones I/O
3 Mar 2011
Miguel Telleria de Esteban telleriam AT unican.es)
Página 8 de 42
Computadores y Tiempo Real
Universidad de Cantabria
Diseño y Evaluación de Configuraciones
Monitoreo de CPU y memoria
Estados de un LWP en el tiempo
● En un instante dado un thread puede estar:
● R Running
● S Sleep: Suspendido en un wait() o sleep(). Se le puede interrumpir
● D Uninterruptible sleep (tipicamente disk IO). Sólo se le interrumpe con kill -9
● T Traceado en debug
● Z Zombie, difunto:
–
A la espera de que el padre les espere (o muera y sean esperados por init)
● Además puede tener las siguientes añadidos (ej ps):
● < Valor nice negativo, (avaricioso)
● N Valor nice positivo, (generoso)
● L Mantiene páginas en memoria bloqueadas
●
Tiene pthreads asociados
Lider de sesión: Proceso que controla el terminal
l
● s
● + Pertenece al foreground-process-group
3 Mar 2011
Miguel Telleria de Esteban telleriam AT unican.es)
Página 9 de 42
Computadores y Tiempo Real
Universidad de Cantabria
Diseño y Evaluación de Configuraciones
Monitoreo de CPU y memoria
Naturaleza de la espera de un LWP
●
Sacado de: http://askubuntu.com/questions/19442/what-is-the-waiting-channel-of-a-process
Valor de WCHAN
0
poll_*
futex_wait_queue_me
__sckb_recv_datagram
sk_wait_data
do_exit
do_wait
pipe_wait,
unix_stream_data_wait
hrtimer_nanosleep
Situación
El LWP no está esperando
I/O bloqueante o no (similar al select()): ratón,
teclado, network sockets
Esperando en un lock para memoria compartida.
Recibiendo por un network socket
En terminación, el proceso es zombie
El LWP está listo para ejecutar pero aún no tiene la
CPU
Esperando datos de otro proceso
Durmiendo a la espera de un timer
3 Mar 2011
Miguel Telleria de Esteban telleriam AT unican.es)
Página 10 de 42
Computadores y Tiempo Real
Universidad de Cantabria
Diseño y Evaluación de Configuraciones
Monitoreo de CPU y memoria
CPU ocupada sin ningún LWP de usuario
● Existen situaciones en el que el kernel tiene la CPU ocupada
sin ejecutar ningún código o servicio de usuario.
● Atendiendo a una interrupción hardware (ej. timer)
● Atendiendo a una interrupción software (ej page-fault + swap)
● Ejecutando tareas de mantenimiento:
– Actualizando páginas sucias de la page-cache al disco
– Balanceando la carga de los multicores
● Realizando cambios de contexto
● No realizando nada (idle)
3 Mar 2011
Miguel Telleria de Esteban telleriam AT unican.es)
Página 11 de 42
Computadores y Tiempo Real
Universidad de Cantabria
Diseño y Evaluación de Configuraciones
Monitoreo de CPU y memoria
Distribución de la memoria física en Linux
● Memoria para el kernel mismo (buffers):
● El fichero vmlinuz se carga permanentemente en memoria
● Los módulos se cargan bajo demanda (pero no se suelen descargar)
● Diferentes estructuras (inodos, descriptores de procesos, descriptores de página) se manejan
con el slab allocator y se liberan cuando no se usan
● Stacks de threads del kernel
● Memoria para los procesos de usuario (used)
● Código ejecutable compartido
● Stack básico
● Ampliaciones del stack
● Heap
● Caché de disco (page_cache)
● Todo el I/O de disco pasa por memoria antes
● Ciertas partes de los ficheros se comparten con mmap()
● Linux intenta consumir el máximo de memoria disponible
● Para aumentar el tamaño de la cache de disco y mejorar el rendimiento
3 Mar 2011
Miguel Telleria de Esteban telleriam AT unican.es)
Página 12 de 42
Computadores y Tiempo Real
Universidad de Cantabria
Diseño y Evaluación de Configuraciones
Monitoreo de CPU y memoria
Memoria swap
● La swap es memoria de procesos mapeada en el disco
● Se usa en 2 contextos:
● Caso 1: Cuando no podemos dar servicio a la demanda de memoria
● Caso 2: Cuando un proceso se queda inactivo durante mucho tiempo
● Antes de llegar al caso 1 se buscan otros recursos:
● La cache de inodos
● La cache de disco (page_cache)
– Si es necesario se fuerza una actualización de las páginas sucias.
● Otras estructuras de datos no usadas en mucho tiempo.
● Si se quiere evitar llegar al caso 2:
● Se puede dar un valo bajo a sysctl.kernel.swapiness
● Se puede desactivar la swap
● Existe un recurso más fuerte: El Out-Of-Memory killer
3 Mar 2011
Miguel Telleria de Esteban telleriam AT unican.es)
Página 13 de 42
Computadores y Tiempo Real
Universidad de Cantabria
Diseño y Evaluación de Configuraciones
Monitoreo de CPU y memoria
Ejemplo (comando free)
3 Mar 2011
Miguel Telleria de Esteban telleriam AT unican.es)
Página 14 de 42
Computadores y Tiempo Real
Universidad de Cantabria
Diseño y Evaluación de Configuraciones
Monitoreo de CPU y memoria
Memoria asociada a un proceso
● Los procesos definen zonas de memoria
● Puede estar mapeada a un fichero o ser anónima
● Tiene asociados permisos de ejecución, lectura y/o escritura
● Puede estar compartida o no con otros procesos
pmap 3070
08048000 3152K r-x-- /usr/bin/claws-mail
0835c000 160K rw--- /usr/bin/claws-mail
08384000 80K rw--- [ anon ]
0a372000 42372K rw--- [ anon ]
aad3e000 8620K r-
Comentarios de: Monitoreo de CPU y memoria (0)
No hay comentarios