Publicado el 14 de Enero del 2017
1.067 visualizaciones desde el 14 de Enero del 2017
862,3 KB
42 paginas
Creado hace 12a (01/03/2013)
Kernel: CPU y Memoria
Diseño y Evaluación de Configuraciones
Curso 2012-13
Miguel Telleria de Esteban
telleriam AT unican.es
Computadores y Tiempo Real
http://www.ctr.unican.es
Uso de CPU y planificación
Computadores y Tiempo Real
Universidad de Cantabria
Diseño y Evaluación de Configuraciones
Kernel: CPU y Memoria
Procesos y Threads
POSIX API: fork(), getpid(), pthread_create()
fork()
GLIBC
Proceso 1
thread 1
pid 1
Proceso 2
pid 2
thread 2
pthread_create()
p
thread 3
pid 3
SYSCALLS: clone, getpid, gettid
KERNEL
SCHEDULER
task 1
pid 1
task 2
pid 2
task 3
pid 3
VMA A
MMU
VMA B
● GNU/Linux soporta procesos y
threads
● Procesos: Espacio de memoria
propio
● Threads: Espacio de memoria
compartido
● Para el kernel procesos y
threads se planifican
indistintamente:
● PID
● Política de planificación
● Prioridad
● Afinidad
● Estadísticas
● Relojes de ejecución
28 Feb 2013
Miguel Telleria de Esteban telleriam AT unican.es)
Página 3 de 42
Computadores y Tiempo Real
Universidad de Cantabria
Diseño y Evaluación de Configuraciones
Kernel: CPU y Memoria
Planificador de Linux
Desde el 2.6.23 (2007) CFS: Completely Fair Scheduler
Jerarquia I Real Time:
- Baja latencia (para alta prioridad)
- Bajas prioridades pueden no ejecutar
- SCHED_RR: Timeslice fija para todos
- SCHED_FIFO: Hasta que no termine no para
SCHED_FIFO
SCHED_RR
Jerarquia II: Timeshare
SCHED_OTHER
TASKs
(rbtree)
- Alto throughput “para todos”
- Todas las tareas tiene garantizada la CPU
- SCHED_OTHER: Round-robin con timeslice inversamente proporcional al nice
Multicores: Balanceo de carga periódico segun afinidad
28 Feb 2013
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
Kernel: 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_OTHER.
● Nice: Avaricia del proceso
● Sólo se usa en SCHED_OTHER, 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_OTHER
●
● Máscara de afinidad
● Define en que CPU(s) un proceso admite ser ejecutado
28 Feb 2013
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
Kernel: CPU y Memoria
Nice y nivel de preempcion entremezcladas
● 100 – 139 valor inverso a la prioridad (100 más prioritario)
– Donde: PROCFS: /proc/<pid>/sched (prio).
– NOTA: Cuando se cambia a RT este valor permanece igual (pero es ignorado)
● 0 – 99 creciente en prioridad (sólo en SCHED_FIFO, SCHED_RR)
– Donde
● chrt -p <pid>
● API's de POSIX (set_sched_param)
●
-20 a 19 (SCHED_OTHER) orden inverso a prioridad
– Donde:
● Htop,
● chrt -p <pid>
● Gnome-system-monitor
● 0 – 39 (SCHED_OTHER) orden inverso a la prioridad
– Donde:
● top
28 Feb 2013
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
Kernel: CPU y Memoria
Asignación de prioridad y política desde consola
● Comando chrt
● Vemos en que prioridad corre: Usamos -p para el pid
– chrt -p 16951
pid 16951's current scheduling policy: SCHED_OTHER
pid 16951's current scheduling priority: 0
● Pasamos a SCHED_FIFO prioridad alta 80/90 -p para prioridad
– chrt –fifo -p 80 169510
– chrt -p 16951
pid 16951's current scheduling policy: SCHED_FIFO
pid 16951's current scheduling priority: 80
● Vuelta a SCHED_OTHER con nice a 0 (valor por defecto)
– chrt –other -p 0 16951
28 Feb 2013
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
Kernel: CPU y Memoria
Afinidad
● 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
...
● Asignación y obtención desde consola (parecido al chrt)
● Se obtiene con taskset -p <pid>
– Taskset -p 16951
pid 16951's current affinity mask: f
● Se asigna con taskset -p <mascara> <pid>
taskset -p 1 16951
–
– Taskset -p 16951
28 Feb 2013
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
Kernel: CPU y Memoria
Estados de un thread 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
28 Feb 2013
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
Kernel: CPU y Memoria
CPU ocupada sin ningún thread 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)
– Top half (irq ISR)
– Bottom half (workqueue, tasklet, softirq)
● 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
● Respondiendo a necesidades de emergencia
– Liberando memoria de caches o de procesos
– Usando la swap del disco
● Realizando cambios de contexto
● No realizando nada (idle)
28 Feb 2013
Miguel Telleria de Esteban telleriam AT unican.es)
Página 10 de 42
Funcionamiento de la memoria
Computadores y Tiempo Real
Universidad de Cantabria
Diseño y Evaluación de Configuraciones
Kernel: CPU y Memoria
Paginación en Linux
● Hardware MMU (Memory management unit) provee:
● Manejo en bloques de páginas (típicamente 4k en i386).
● Mapeados de direcciones (i386: tablas PGPT, PMD, PTE)
● Detección de fallos de página (acceso a páginas no mapeadas)
● Permisos de lectura / escritura / ejecución
● TLB: Cache de traducción de páginas
● El S.O. (linux) ha de programar todo ello:
● Maneja un bitmap de todas las páginas de memoria.
● Actualiza las tablas en los cambios de contexto: Espacios de memoria
● Utiliza los fallos de página para
– Detectar accesos prohibidos
–
Implementar paginación bajo demanda
Implementar cache memoria ↔ disco
Implementar espacio swap
–
–
28 Feb 2013
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
Kernel: CPU y Memoria
Distribución de la memoria física en Linux
● Páginas para el kernel mismo:
● El fichero vmlinuz se carga permanentemente en memoria
● Los módulos se cargan bajo demanda (y se quedan permanentes mientras no se quite el módulo)
● Losas (slab) estructuras pre-allocated (inodos, descriptores de procesos, página...)
– Cada losa ocupa menos que una página, por lo que el kernel maneja su reuso).
– Parte de estos objetos se cachean (inode cache, dentry cache)
● Páginas para los procesos (de usuario y de kernel)
● Código ejecutable (text) (compartido con otros procesos)
● Datos estáticos (data)
● Stack y thread-level-storage (bss)
● Heap
● Páginas de caché de disco (page_cache)
● Caché: Contenido real de disco
● Buffers: Metadata de los inodos (timestamps, permisos...)
● Pool de páginas libres
● Para satisfacer rápidamente peticiones urgentes
28 Feb 2013
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
Kernel: CPU y Memoria
Memoria asociada a un proceso
● El kernel define zonas de memoria VMA para los procesos
● 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---- /usr/share/icons/hicolor/icon-theme.cache
ab5a9000 48536K r---- /usr/share/icons/gnome/icon-theme.cache
ae50f000 4K ----- [ anon ]
afd13000 8192K rw--- [ anon ]
b0513000 112K r--s- /usr/share/mime/mime.cache
b0d9a000 48536K r---- /usr/share/icons/gnome/icon-theme.cache
b3d00000 2048K rw--- [ anon ]
b469b000 8192K rw--- [ anon ]
b4e9b000 484K r-x-- /usr/lib/claws-mail/plugins/vcalendar.so
b4f14000 40K rw--- /usr/lib/claws-mail/plugins/vcalendar.so
28 Feb 2013
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
Kernel: CPU y Memoria
Linux intenta usar la máxima memoria
¡¡ Memoria sin usar es memoria desperdiciada !!
28 Feb 2013
Miguel Telleria de Esteban telleriam AT unican.es)
Página 15 de 42
Computadores y Tiempo Real
Universidad de Cantabria
Diseño y Evaluación de Configuraciones
Kernel: CPU y Memoria
¿Cual es entonces la “memoria disponible”?
● Rule of thumb: Libre + page-cache
28 Feb 2013
Mig
Comentarios de: Funcionamiento del kernel: CPU y memoria (0)
No hay comentarios