|
|
· Abril y mayo, Curso Global de Servidores con CentOS 6.
· Taller de programación de Python. · Curso de programación de PHP. · Prueba ALDOS 1.4.4. Nuestro sistema operativo para escritorio. Planificadores de Entrada/Salida en Linux.
Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com Sitio de Red: http://www.alcancelibre.org/ Jabber ID: darkshram@jabber.org Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1
Introducción.La planificación de Entrada/Salida (Input/Output Scheduling o I/O scheduling) consiste en el método mediante el cual los sistemas operativos deciden el orden en que se procesan las peticiones de lectura/escritura en el disco duro o unidad de almacenamiento. El objetivo de optimizar el sistema, eligiendo un algoritmo de planificación de Entrada/salida, es disminuir los tiempos de búsqueda (seek times), priorizar las peticiones de ciertos procesos de Entrada/salida, asignar un ancho de banda más adecuado a cada procesos o garantizar que algunas peticiones se atenderán antes de una fecha de caducidad. Básicamente, fueron diseñados para mitigar la demora de los tiempos de búsqueda que utilizan el brazo y el cabezal, de los disco duros, para moverse desde una posición, hacia otra posición más alejada. La mayoría de los planificadores de Entrada/Salida (I/O schedulers) se basan sobre el algoritmo del elevador, el cual determina el movimiento del brazo de un disco y cabezal al servir peticiones de lectura/escritura. Este algoritmo basa su nombre sobre el comportamiento del elevador de un edificio, donde éste continúa su trayectoria actual hacia arriba o hacia abajo hasta que éste se vacía por completo, deteniéndose solo para permitir que nuevos individuos lo aborden, siempre que éstos vayan en la misma dirección actual del elevador. Planificadores de Entrada/Salida disponibles en el núcleo de Linux.Anticipatory.Consiste en un algoritmo cuyo objetivo es incrementar la eficiencia de la utilización del disco duro, anticipando las operaciones sincrónicas de lectura. Fue el planificador de Entrada/Salida del núcleo de Linux desde la versión 2.6.0 hasta a versión 2.6.18. Desde la versión 2.6.33, fue eliminado del núcleo de Linux, debido a que hoy en día hay muy pocas unidades de almacenamiento basadas sobre los estándares SCSI-1 y IDE/ATA y que aún estén en operación. Era ideal para servidores HTTP o sistemas de Escritorio, con discos duros SCSI-1 o IDE/ATA, pues se conseguía un rendimiento sensiblemente superior. Funciona realizando una demora controlada antes de despachar los procesos de Entrada/Salida, con la finalidad de agregar o re-ordenar, las operaciones de búsqueda que son realizadas, mejorando el desempeño y reduciendo de manera significativa las operaciones de petición de los discos duros. Está diseñado específicamente para optimizar los sistemas con sub-sistemas de discos pequeños o bien muy lentos, como es el caso de discos duros con estándar SCSI-1 y algunos antiguos modelos de IDE/ATA. Es totalmente inadecuado para discos duros que utilicen TCQ (Tagged Command Queuing), que es una tecnología consiste en la optimización de peticiones de lectura/escritura desde la propia unidad de disco duro, permitiendo al sistema operativo realizar múltiples peticiones de lectura/escritura. Esta tecnología es utilizada en los discos duros con el estándar SCSI-2, PATA y SATA, es decir todos los modernos disco duros que actualmente existen en mercado. Es totalmente inapropiado para unidades de almacenamiento de alto desempeño, así como con arreglos de discos por RAID. Asumiendo que se dispone de un disco duro basado sobre el estándar SCSI-1 o bien IDE/ATA, que se ha asignado como el dispositivo /dev/sda, este planificador de Entrada/Salida puede aplicarse de manera inmediata ejecutando:
Lo anterior hará que el sistema utilice este planificador de Entrada/Salida hasta el siguiente reinicio. Verifique que realmente se ha establecido como el planificador de Entrada/Salida actual ejecutando lo siguiente:
Lo cual debe devolver una salida similar a la siguiente:
Para que el cambio sea permanente, se debe editar el archivo /boot/grub/menu.lst:
Y añadir a los parámetros de inicio del núcleo el parámetro elevator, con el valor anticipatory.
CFQ.CFQ, que es el acrónimo de Completely Fair Queuing, que podría traducirse como encolado de procesamiento completamente justo, es el planificador de Entrada/Salida predeterminado de CentOS y Red Hat Enterprise Linux. Ofrece un excelente rendimiento para la mayoría de los usos que se le pueda dar al sistema operativo. Su objetivo es mantener una cola de procesamiento de Entrada/Salida escalable por proceso, e intentar distribuir equitativamente el ancho de banda disponible para los procesos de Entrada/Salida, entre todas las peticiones de Entrada/Salida. Funciona colocando peticiones sincrónicas, enviadas por un proceso, dentro de un número de colas de procesamiento por proceso y luego distribuyendo intervalos de tiempo para cada una de las colas de procesamiento, a fin de que puedan acceder al disco duro. La longitud de los intervalos de tiempo, así como también el número de peticiones que tiene permitido una cola de procesamiento, depende de la prioridad del mismo procesos de Entrada/Salida. De este modo, las peticiones asincrónicas para todos los procesos son agrupadas y procesadas, en menos colas de procesamientos, asignando una por prioridad. Técnicamente, tiene el mismo efecto similar al del planificador de Entrada/Salida Anticipatory, manteniendo una buena capacidad de procesamiento, al permitir que las colas de procesamiento puedan pausar al finalizar un procesos de Entrada/Salida, anticipando el procesos de Entrada/Salida más cercano de ese mismo proceso. Puede verificar que CFQ es el planificador de Entrada/Salida utilizado por el sistema, ejecutando lo siguiente:
Lo cual debe devolver una salida similar a la siguiente:
Para utilizar este planificador de Entrada/Salida, es innecesario hacer modificación alguna, pues es el predeterminando del sistema. Deadline.Funciona de modo similar al tiempo real, utilizando una política de asignación en circuito (round robin), para intentar distribuir equitativamente las peticiones de Entrada/Salida, evitando se agote la capacidad de procesamiento. Básicamente impone tiempos de caducidad (deadline) a todas las operaciones de Entrada/Salida, con la finalidad de impedir que se agote la capacidad de recibir peticiones. Utiliza cinco colas de procesamiento, dos de las cuales son ordenadas de acuerdo a los tiempos de caducidad, al mismo tiempo que las colas de procesamiento son ordenadas de acuerdo a su número de sector. Antes de servir la siguiente petición, decide que cola de procesamiento utilizar, otorgando mayor prioridad a las peticiones de lectura, verificando después si ha caducado la primera petición en la cola de procesamiento. De modo predeterminado, los tiempos de caducidad son de 500 ms para las peticiones de lectura y de 5 segundos para las peticiones de escritura. Se recomienda su uso para servidores dedicados para bases de datos y particularmente para aquellos sistemas que disponen de discos duros con capacidad de TCQ, así como en sistemas con unidades de almacenamiento de alto desempeño, es decir discos duros con el estándar SCSI-2, PATA o SATA Asumiendo que se dispone de un disco duro o unidad de almacenamiento, que se ha asignado como el dispositivo /dev/sda, este planificador de Entrada/Salida puede aplicarse de manera inmediata ejecutando:
Lo anterior hará que el sistema utilice este planificador de Entrada/Salida hasta el siguiente reinicio. Verifique que realmente se ha establecido como el planificador de Entrada/Salida actual ejecutando:
Lo cual debe devolver una salida similar a la siguiente:
Para que el cambio sea permanente, se debe editar el archivo /boot/grub/menu.lst:
Y añadir a los parámetros de inicio del núcleo el parámetro elevator, con el valor deadline.
Noop.Es el planificador de Entrada/Salida más simple que existe. Funciona insertando todas las peticiones de Entrada/Salida dentro de una cola de procesamiento tipo FIFO (first in, first out, que se traduce como primero en entrar, primero en salir), e implementando fusión de peticiones. Asume que la optimización del desempeño de Entrada/Salida será gestionado por otro nivel de la jerarquía de Entrada/Salida, como pudiera ser en el dispositivo de bloque o bien un HBA (Host Bus Adapter o adaptador de transporte del anfitrión) inteligente, como en el caso en los controladores RAID para SAS (Serial Attached SCSI) o bien un controlador conectado de manera externa, como ocurre con los SAN (Storage Area Network o Redes de Área de Almacenamiento). Este planificador de Entrada/Salida es principalmente utilizado con unidades de estado sólido (SSD, Solid State Drives) basadas sobre memoria Flash, NAND o SDRAM y en dispositivos que carecen de dependencia a movimientos mecánicos, los cuales carecen de re-ordenamiento de peticiones múltiples de Entrada/Salida, donde se agrupan juntas las peticiones de Entrada/Salida que están físicamente cercanas, reduciendo el tiempo de petición y la variabilidad del tiempo de servicio de Entrada/Salida. Asumiendo que se dispone de un disco duro o unidad de almacenamiento, que se ha asignado como el dispositivo /dev/sda, este planificador de Entrada/Salida puede aplicarse de manera inmediata ejecutando:
Lo anterior hará que el sistema utilice este planificador de Entrada/Salida hasta el siguiente reinicio. Verifique que realmente se ha establecido como el planificador de Entrada/Salida actual ejecutando:
Lo cual debe devolver una salida similar a la siguiente:
Para que el cambio sea permanente, se debe editar el archivo /boot/grub/menu.lst:
Y añadir a los parámetros de inicio del núcleo el parámetro elevator, con el valor noop.
¿Cuál planificador de Entrada/Salida elegir?Depende del tipo de unidad(es) de almacenamiento, servicios utilizados en el sistema, capacidades de procesamiento y los tipos de procesos que se quieran priorizar. En general, se puede utilizar anticipatory en equipos con discos duros viejos (SCSI-1 o IDE/ATA). En lo que respecta a cfq, se recomienda en sistemas para uso general. Definitivamente se recomienda utilizar deadline en servidores para bases de datos. En cuanto a noop, será conveniente en sistemas con unidades de estado sólido basadas sobre memoria Flash, NAND, SDRAM, máquinas virtuales o bien sistemas con unidades de almacenamiento controladas por HBA inteligentes. Se recomienda realizar pruebas de desempeño y de rendimiento, antes de elegir el planificador de Entrada/salida definitivo para un sistema en particular. Simplemente, elija el que se considere que funcione mejor. Bibliografía.
|
Comentarios Recientes