Sei sulla pagina 1di 23

Tema del día:

Planificación de
Discos en el
Kernel Linux
Objetivos

En esta clase trataremos de:


– Ver cómo se superan las limitaciones de los
algoritmos de de planificación de “libro”.
– Ver cómo un sistema operativo real trata con los
problemas de la planificación de discos.
– Evaluar las ventajas y desventajas de cada algoritmo
de planificación, así como sus aplicaciones.
Repaso...
Buffers
Control de Archivo
Acceso Registros Caché de
Bloques Adm. de espacio
libre.
Usuario

Método de Caché de
Controladora
Acceso Planif. de
disco.
Repaso...

Cómo trabaja un disco?

• Un disco es un conjunto de bloques de datos.


• Un disco tiene cabezas.
• Los datos sólo pueden ser leídos cuando la
cabeza está sobre ellos.
• Mover los cabezales es MUY LENTO!
• Una vez que el cabezal está posicionado el
tiempo de la transferencia es muy pequeño.
Repaso...
Sector 0
Sector 1
track2
track1
track0

head 0

Cylinder 0

platters
head 1

Cylinder 1

head 2
Planificación de Discos

En caso de tener muchas solicitudes para el mismo


disco, en qué orden las atendemos?

Qué objetivos persigue?


– Maximizar el throughput.
• Operaciones/seg., bytes/seg.
– Lograr ecuanimidad.
– Evitar la inanición.
– Cuestiones de Tiempo Real.
• Garantizar un determinado tiempo máximo de espera.
Planificación de Discos

Qué Falta?
Los sistemas operativos dan prioridades a varios
recursos:
– Procesador.
– Memoria.
– Acceso a Red.

Pocos a los accesos a disco...


Planificación de Discos

A tener en cuenta:

•Las controladoras modernas poseen su propio


sistema de colas y planificación.
•Hay controladoras que pueden encolar hasta 512
solicitudes (una controladora SATA puede encolar
entre 16 y 32 solicitudes).
•Si hay colas en la controladora (TCQ, NCQ, etc.)
los objetivos del planificador del S.O. pueden
verse seriamente afectados...
Planificación en Linux

Historia
Kernels 1.x
– Planificación??? Para qué???
Kernels 2.0 – 2.2 – 2.4
– C-SCAN (con algunas variantes)
Kernels 2.6.X
– Tres planificadores en tres años...
• Noop, Anticipatory, Deadline, CFQ.
– Es posible cambiarlos por cada dispositivo de bloques,
e inclusive en tiempo de ejecución...
Planificación en Linux

En la actualidad...

• No-op
• Deadline
• Anticipatory (default 2.6.0 - 2.6.18)
• Complete Fair Queuing (default >= 2.6.18)

# cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]
Planificación en Linux

No-Op

• Atiende las solicitudes a medida que llegan.


• A pesar de ello, si llega otra solicitud adyacente,
la une con la anterior.

• Muy simple.
• Útil para disp. sin tiempo de búsqueda.
Planificación en Linux

Deadline

• Es un C-SCAN con algunos agregados.


• Cada solicitud tiene un deadline.
• Si se vence el deadline de alguna solicitud la
atiende inmediatamente.
• Trata la lecturas y escrituras por separado
(atiende el doble de lecturas que escrituras)
Planificación en Linux

Deadline

• Tiene varios parámetros:


– fifo_batch (número de solicitudes en un batch)
– read_expire, write_expire (en ms)
– writes_starved (cuántas lecturas por escritura)
– front_merges (si funde solicitudes al llegar)

• Buena para aplicaciones de Tiempo Real.


Planificación en Linux

Anticipatory Scheduling (AS)

• Todas las características de Deadline, pero


agrega anticipación.
• Antes de atender una solicitud, la demora unos
milisegundos, en espera de que llegue otra
cercana.
• El valor de la demora depende de lo rápido que
sea el disco... Antes que tener el disco
desocupado, podemos usar ese tiempo en la
búsqueda... ;)
Planificación en Linux

Anticipatory Scheduling (AS)

Tiene otras diferencias con Deadline:


• La solicitudes en un lote se atienden con SCAN y
no deben ser contiguas.
• Se permiten búsquedas hacia atrás (de hasta
1Mbit) pero con el doble del costo.
• No trata las lecturas y escrituras por separado,
pero si las operaciones síncronas y asíncronas.
Planificación en Linux

Anticipatory Scheduling (AS)

• Tiene varios parámetros:


– antic_expire (tiempo de espera)
– read_expire, (deadline síncrono)
– write_expire (deadline asíncrono)
– est_time (estadísticas)

• Mejora el tiempo de respuesta medio.


Planificación en Linux

Completely Fair Queuing (CFQ)

• Trata de ser ecuánime. Además soporta


anticipación y deadliness.
• Se da a cada proceso un tiempo (rodaja) en el
cual puede hacer peticiones síncronas.
• Todos los procesos comparten 17 colas para
solicitudes de E/S asíncrona (una por cada
prioridad). También tienen rodajas de tiempo,
pero además un máximo de solicitudes.
Planificación en Linux

Completely Fair Queuing (CFQ)

• Cada cola de solicitudes obtiene una rodaja de


tiempo de acuerdo a su prioridad. Las rodajas se
asignan usando una cola circular.
• Dentro de cada rodaja las solicitudes se pueden
fundir y son planificadas usando SCAN (con una
penalización por volver).
• Además demorará las próximas solicitudes en
espera de más E/S de ese proceso (AS)
Planificación en Linux
T-R

Q1 Planif. Round-R + AS +
Deadline C-SCAN

Q2

Q3

Disco

Qn

Completely Fair Queuing (CFQ)


Planificación en Linux

Completely Fair Queuing (CFQ)

• Complejo!
• Da soporte a tiempo real.
• Ecuánime y combate a los abusadores.
• No admite inanición.
– Sin contar a los procesos T-R.
• Permite prioridades.
– Aunque aún no está claro como asignarlas...
Planificación en Linux

Completely Fair Queuing (CFQ)

• Tiene varios parámetros:



fifo_expire_(a)sync deadline (a)síncrono

slice_(a)sync rodaja de tiempo (a)síncrona

slice_async_rq máximo de peticiones asinc.

quantum cantidad de peticiones por lote
Bibliografía

Esta clase puede ser ampliada viendo:


– “Linux Block IO: present and future”
Jens Axboe - July, 2004 Ottawa, Ontario Canada
Proceedings of the Linux Symposium
– Wikipedia :)
• http://en.wikipedia.org/wiki/Noop_scheduler
• http://en.wikipedia.org/wiki/Deadline_scheduler
• http://en.wikipedia.org/wiki/Anticipatory
• http://en.wikipedia.org/wiki/CFQ
– Jens Axboe presentando CFQ:
http://lca2007.linux.org.au/talk/123.html
Gracias!
Ing. Gabriel E. Arellano
gabrielarellano@gmail.com
http://www.gabriel-arellano.com.ar/so/

(2008) Gabriel E. Arellano


Permission is granted to copy, distribute and/or modify this document under the terms of the
GNU Free Documentation License, Version 1.2 or any later version published by the Free
Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
Texts. The GNU Free Documentation License as applicable to this document can be found at:
http://www.gnu.org/copyleft/fdl.html

Potrebbero piacerti anche