Contenido
Conceptos
Notas sobre el planificador de Linux y la gestin de memoria Gnome-system-monitor Top y htop Ps /usr/bin/time
Herramientas de monitorizacin
3 Mar 2011
Pgina 2 de 42
ConceptossobreCPUymemoria
Procesos y threads
En GNU/Linux la interfaz POSIX thread est ofertada por la librera NPTL integrada en la librera general GLIBC
Cada uno tiene su PID. pthread_self() no tiene efecto en el kernel Cada uno tiene su prioridad y poltica de planificacin Cada uno tiene su mscara de afinidad de CPU El kernel mantiene estadsticas y relojes de ejecucin independientes
3 Mar 2011
Se pasa del antiguo O(1) a CFS: Complete Fairness Scheduler Es jerrquico llevado por clases de procesos
Caractersticas:
Primera prioridad: Clase real-time: Polticas SCHED_FIFO y SCHED_RR Clase normal (por defecto): Polticas 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 Adems realiza peridicamente un reparto de carga entre los diferentes cores
3 Mar 2011
Pgina 5 de 42
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
Slo se usa en SCHED_NORMAL, se ignora para real time Oscila entre: (-20 valor ms prioritario y 19), por defecto 0 Se usa en SCHED_RR y SCHED_FIFO, ignorada en SCHED_NORMAL Define en que CPU(s) un proceso admite ser ejecutado
Miguel Telleria de Esteban telleriam AT unican.es) Pgina 6 de 42
Mscara de afinidad
3 Mar 2011
0 99: Prioridad realtime, task bajo SCHED_RR o SCHED_FIFO 100-139: Valor de nice, task bajo SCHED_OTHER 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
CPU 0: 1
CPU 1: 2
CPU 3: 4
CPU 4: 8
...
3 Mar 2011
Las diferentes herramientas que vamos a ver indican la siguiente informacin sobre cada LWP
Identificador del LWP en el kernel y herramientas Identificador del LWP- padre en el kernel Estado del LWP (ver ms 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 Porcentaje de uso de la CPU Tiempo de ejecucin en user-mode Tiempo de ejecucin en kernel-mode Tiempo de bloqueo en espera Nmero de cambios de contexto Numero de operaciones I/O
Miguel Telleria de Esteban telleriam AT unican.es) Pgina 8 de 42
Mtricas
3 Mar 2011
R S D T Z
Running Sleep: Suspendido en un wait() o sleep(). Se le puede interrumpir Uninterruptible sleep (tipicamente disk IO). Slo se le interrumpe con kill -9 Traceado en debug Zombie, difunto:
A la espera de que el padre les espere (o muera y sean esperados por init)
< N L l s +
Valor nice negativo, (avaricioso) Valor nice positivo, (generoso) Mantiene pginas en memoria bloqueadas Tiene pthreads asociados Lider de sesin: Proceso que controla el terminal Pertenece al foreground-process-group
Miguel Telleria de Esteban telleriam AT unican.es) Pgina 9 de 42
3 Mar 2011
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
3 Mar 2011
Situacin El LWP no est esperando I/O bloqueante o no (similar al select()): ratn, teclado, network sockets Esperando en un lock para memoria compartida. Recibiendo por un network socket En terminacin, el proceso es zombie El LWP est listo para ejecutar pero an no tiene la CPU Esperando datos de otro proceso Durmiendo a la espera de un timer
Miguel Telleria de Esteban telleriam AT unican.es) Pgina 10 de 42
Existen situaciones en el que el kernel tiene la CPU ocupada sin ejecutar ningn cdigo o servicio de usuario.
Atendiendo a una interrupcin hardware (ej. timer) Atendiendo a una interrupcin software (ej page-fault + swap) Ejecutando tareas de mantenimiento:
3 Mar 2011
Pgina 11 de 42
El fichero vmlinuz se carga permanentemente en memoria Los mdulos se cargan bajo demanda (pero no se suelen descargar) Diferentes estructuras (inodos, descriptores de procesos, descriptores de pgina) se manejan con el slab allocator y se liberan cuando no se usan Stacks de threads del kernel Cdigo ejecutable compartido Stack bsico Ampliaciones del stack Heap Todo el I/O de disco pasa por memoria antes Ciertas partes de los ficheros se comparten con mmap() Para aumentar el tamao de la cache de disco y mejorar el rendimiento
Miguel Telleria de Esteban telleriam AT unican.es) Pgina 12 de 42
3 Mar 2011
Memoria swap
Caso 1: Cuando no podemos dar servicio a la demanda de memoria Caso 2: Cuando un proceso se queda inactivo durante mucho tiempo La cache de inodos La cache de disco (page_cache)
Otras estructuras de datos no usadas en mucho tiempo. Se puede dar un valo bajo a sysctl.kernel.swapiness Se puede desactivar la swap
3 Mar 2011
3 Mar 2011
Pgina 14 de 42
Puede estar mapeada a un fichero o ser annima Tiene asociados permisos de ejecucin, lectura y/o escritura Puede estar compartida o no con otros procesos
pmap 3070 08048000 0835c000 08384000 0a372000 aad3e000 ab5a9000 ae50f000 afd13000 b0513000 b0d9a000 b3d00000 b469b000 b4e9b000 b4f14000 3152K 160K 80K 42372K 8620K 48536K 4K 8192K 112K 48536K 2048K 8192K 484K 40K r-x-rw--rw--rw--r---r-------rw--r--sr---rw--rw--r-x-rw--/usr/bin/claws-mail /usr/bin/claws-mail [ anon ] [ anon ] /usr/share/icons/hicolor/icon-theme.cache /usr/share/icons/gnome/icon-theme.cache [ anon ] [ anon ] /usr/share/mime/mime.cache /usr/share/icons/gnome/icon-theme.cache [ anon ] [ anon ] /usr/lib/claws-mail/plugins/vcalendar.so /usr/lib/claws-mail/plugins/vcalendar.so
Pgina 15 de 42
3 Mar 2011
Herramientasdemonitorizacin
Gnome-System-Monitor
Intuitva Se ve en tiempo real la jerarqua de los procesos Se pueden hacer acciones sobre los procesos con un slo click Muestra informacin de ficheros abiertos, zonas de memoria No exporta ningn dato a texto o a fichero No muestra los pthreads No se puede congelar el resultado No se pueden reorganizar las columnas
Negativo:
3 Mar 2011
Pgina 17 de 42
3 Mar 2011
Pgina 18 de 42
Trucos de gnome-system-monitor
Parando el ratn sobre una fila muestra la lnea de comandos Se pueden ordenar los procesos por consumo:
Se puede observar la jerarqua de los procesos Se pueden ordenar los procesos por usuario
3 Mar 2011
Pgina 19 de 42
top
3 Mar 2011
Pgina 20 de 42
-d ss.cc -p -H -b h f O o W
Periodo de refresco en centsimas de segundo <pid1>,<pid2> Restringir a los pids en cuestion Mostrar los pthreads que dependen de cada pid Modo batch
Ayuda Permite aadir o quitar campos Cambiar el criterio de ordenamiento Elegir el orden de disposicin de los campos mostrados Guardar la configuracin para futuras llamadas o modo batch
3 Mar 2011
Pgina 21 de 42
3 Mar 2011
Pgina 22 de 42
Personalizacin de top
La configuracin se guarda en ~/.toprc Se mantiene en modo batch. Es la nica forma de asegurar que ciertos campos aparezcan en dicho modo. Activar cmdlines completas: c Seleccionar algunos campos que no aparecen por defecto:
Colocar el campo processor antes del nice: o J J Activar sumario de CPU's separadas: 1 (el nmero 1)
Miguel Telleria de Esteban telleriam AT unican.es) Pgina 23 de 42
3 Mar 2011
Muestra siempre los mismos campos (usando el fichero de opciones) Ignora cualquier input de teclado o stdin.
Invocacin clsica
Parmetros:
%CPU y tiempos: Periodos largos ya que los tiempo de ejecucin son acumulativos. Memoria: Periodos cortos ya que las muestras son instantneas
prioridad nice: Cuanto ms prioridad (valor ms pequeo) ms se forzar la periodicidad de muestreo frente a sobrecarga de CPU
Miguel Telleria de Esteban telleriam AT unican.es) Pgina 24 de 42
3 Mar 2011
P 0 0 1 1 0 1 0
NI 0 0 0 0 0 0 0
S %CPU %MEM R 100 1.3 S 0 1.3 S 0 1.3 S 0 1.3 S 0 1.3 S 0 1.3 S 0 1.3
Cada bloque de muestreo comienza en una linea con la palabra top Seguido del top est el timestamp del momento de muestreo Despus de la siguiente lnea vaca se encuentran las cabeceras de os campos Cada valor de campo de cada LWP est separado por espacios salvo el COMMAND al final.
Miguel Telleria de Esteban telleriam AT unican.es) Pgina 25 de 42
3 Mar 2011
htop
Es ms interactivo y resumido Permite seleccionar LWP's para cambiarles la prioridad, afinidad... Permite mostrar la jerarqua de procesos y pthreads Se puede llamar directamente a strace y ltrace para tracear llamadas del sistema y/o de libreras Si se redirige la salida a fichero aparecen cdigos de escape ANSI
3 Mar 2011
Personalizacin de htop
La personalizacin se mantiene entre ejecuciones en ./~htopr Mtricas: Aadir el hostname a la parte derecha del sumario Display options:
Mi personalizacin personal
Tree view ON Hide kernel threads OFF Display threads in different color ON Show custom thread names ON Highlight program basename ON Detailed CPU time ON
3 Mar 2011
-A Todos los procesos -F Inclur todos los detalles -L Incluir los pthreads
ps -ALF
Cual usar?
Ventajas
top Modo batch Salida parseable Muestra todos los threads Buen modo interactivo Fcil de usar Interfaz con strace, lsof, ltrace Muestra todos los threads Muestra toda la informacin Grfico en tiempo real Re-ordenamiento con un click Muestra los mapas de memoria
Inconvenientes
No muestra todos los threads No tiene modo jerquico No muestra la afinidad No es fcil de parsear
Aplicacin
Muestreo peridico de pids conocidos Vigilancia interactiva Toma de comandos (prioridad, afinidad)
htop
ps
Opciones de comando complicadas No tiene muestreo peridico No muestra los pthreads No exporta los datos Poco flexible en visualizacin
3 Mar 2011
Pgina 29 de 42
/usr/bin/time
Esta herramienta mide tiempos de ejecucin asociados a una aplicacin distinguiendo tiempo de sistema y de usuario
3 Mar 2011
Pgina 30 de 42
3 Mar 2011
Pgina 31 de 42
Traceadodeejecucin
FTRACE
Framework para tracear funcionalidades del kernel de linux Viene con unos set de traceadores predefinidos:
sched_switch: Cambios de contexto y activaciones Function: Entrada en funciones del cdigo de kernel graph_function: Entrada y salida de funciones de cdigo de kernel ... Se apoya en DEBUGFS
3 Mar 2011
Pgina 33 de 42
Mount -t debugfs none /debug (/debug debe existir) Esto hace que aparezca /debug/tracing cat /debug/tracing/available_tracers echo sched_switch > /debug/tracing/current_tracer Echo 1 > /debug/tracing/tracing_enable
Seleccionar sched_switch
Activar el traceado
Echo 0 >/debug/tracing/tracing_enable
3 Mar 2011
Herman Ten Brugge ha hecho un programa en C que pasea el traceado y lo convierte en un fichero de seales electrnicas VCD.
http://www.spinics.net/lists/linux-rt-users/msg04268.html Thread parado: Estado Z (cable desconectado) Thread ejecutando: Estado 0 o 1 dependiendo de la CPU Tras eliminar los : de flush-8:0 :)
El mapeado es el siguiente:
3 Mar 2011
Pgina 35 de 42
timestamp (sg.us)
dest_cpu
java-2619
3 Mar 2011
Pgina 36 de 42
Guardar el timestamp Agruparlos por PID y CPU Guardar comienzo, final y calcular la duracin Agruparlos por PID y CPU Diferenciar el estado de salida
'R': La tarea la para el scheduler (fin de timeslice, expulsin por otra...) 'S': La tarea se bloquea (sleep, I/O...) pero es interrumpible 'D': La tarea se bloquea pero no es interrumpible (slo thread de Kernel) Nota: El estado de entrada siempre es R
3 Mar 2011
Qu podemos obtener
Formatos de salida:
CSV: Lo necesario para estadsticas XML: Informacin completa SVG: Diagrama de ejecucin????
parser_ftrace_sched_switch.pl <fichero.txt>
Requiere el paquete libtext-csv-perl Saca un fichero .csv con todos los procesos
3 Mar 2011
Pgina 38 de 42
Referencias
IBM Redbook: Eduardo CLIENDO, Takechica KUNIMASA, Linux Performance and Tuning Guidelines, 2007 Descargable libremente
Explica el funcionamiento del kernel en aspectos como memoria e I/O Detalla herramientas de lnea de comando y benchmarks estndares Da consejos de configuracin del kernel
Mark WILDING Dan BEHMAN, Self service Linux: Mastering the Art of Problem Determination Prentice Hall 2006. Bruce Perens Open Source series. ISBN 978-0-13-147751-3 Descargable libremente
Ms orientado a desarrollo y a traceado de bajo nivel Detalla el formato ELF y conceptos de debugueo Al final lista diferentes herramientas de monitorizacin y da un script para captura de datos.
3 Mar 2011
Pgina 40 de 42
Ftrace
Documentation/trace/ftrace.txt
LWN.net tiene los siguientes artculos introductorios escritos por el propio autor
A look at Ftrace (Mar 2009) http://lwn.net/Articles/322666/ Debugging the kernel with Ftrace (Dic 2009) http://lwn.net/Articles/365835/ (Parte I) http://lwn.net/Articles/366796/ (Parte II) Trace-cmd front-end para ftrace (Oct 2010) http://lwn.net/Articles/410200/
Herman ten Brugge, Utilidad para parsear output de ftrace sched_switch. Descargable aqu
Miguel Telleria de Esteban telleriam AT unican.es) Pgina 41 de 42
3 Mar 2011
Robert LOVE, Linux Kernel Development, 3rd Edition Addison-Wesley 2010, ISBN 978-0-672-32946-8
Abarcable y sencillo de leer. Punto de vista: Desarrollador que quiere aadir cdigo propio al kernel y utilizar algunos servicios sin interferir en el funcionamiento normal. Aunque es una edicin reciente, hay muchas novedades del kernel (ftrace, hrtimers, Xen) que no se han aadido. Un buen review del libro en LWN.net https://lwn.net/Articles/419855/
Daniel POVET, Marco CESATI, Understanding the Linux Kernel, 3rd Edition O'Reilly 2005 ISBN 978-0-596-00565-2. Disponible en google books. UTLK3
Muy completo pero denso de leer y digerir Punto de vista: Investigador o estudiante que quiere entender como funciona el kernel por dentro para diagnosticar problemas o copiar las tcnicas en otros mbitos. Aunque tiene ya 6 aos, la filosofa del kernel sigue siendo la misma, si bien los procedimientos de funcionamiento que detalla el libro pueden haber evolucionado
3 Mar 2011
Pgina 42 de 42