Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

6.4.3. Noop

Programador Noop de E/S implementa un algoritmo de programación simple 'primero en entrar, primero en salir' (FIFO). La fusión de solicitudes sucede en la capa de bloque genérica, pero es una cache sencilla de 'último-golpe'. Si un sistema está vinculado a una CPU y el almacenaje es rápido, puede ser el mejor programador de E/S a utilizar.
A continuación se presentan los ajustables disponibles para la capa de bloques.

Ajustables /sys/block/sdX/queue

add_random
En algunos casos, los eventos de sobrecarga de E/S que contribuyen al grupo entrópico para /dev/random es medible. Algunas veces puede establecerse a un valor de 0.
max_sectors_kb
El tamaño de solicitud máximo predeterminado enviado a disco es 512 KB. Este ajustable sirve para aumentar o disminuir dicho valor. El valor mínimo está limitado por el tamaño de bloque lógico y el valor máximo está limitado por max_hw_sectors_kb. Hay algunos SSD que funcionan peor cuando los tamaños de E/S exceden el tamaño de bloque de borrado interno. En estos casos, se recomienda ajustar max_hw_sectors_kb al tamaño de bloque de borrado. Puede probarlo con un generador de E/S tal como iozone o aio-stress, variando el tamaño de registro de 512 bytes a 1 MB, por ejemplo.
nomerges
Este ajustable es principalmente una ayuda de depuración. La mayoría de cargas de trabajo se benefician de la fusión de solicitudes (incluso en un almacenamiento más rápido tal como SSD). En algunos casos, sin embargo, es deseable desactivar la fusión, como cuando se desee ver cuántos IOPS puede procesar un back-end de almacenamiento sin desactivar la lectura anticipada o realizar E/S aleatoria.
nr_requests
Cada cola de solicitud tiene un límite en el total de solicitudes de descriptores que pueden asignarse para cada E/S de lectura y escritura . El número predeterminado es 128, es decir 128 lecturas y 128 escrituras pueden ser puestas en cola a la vez antes de poner a dormir el proceso. El proceso que fue puesto a dormir es el siguiente que intenta asignar una solicitud, no necesariamente el haya asignado todas las solicitudes disponibles.
Si tiene una aplicación sensible de latencia, debe considerar disminuir el valor de nr_requests en su cola de solicitudes y limitar la profundidad de cola de comandos en el almacenaje a un número bajo (incluso tan bajo como 1), así, la retro-escritura de E/S no puede asignar todos los descriptores de solicitudes disponibles y llenar la cola de dispositivo con E/S de escritura. Una vez se haya asignado nr_requests, todos los procesos que intentan realizar E/S serán puestos a dormir para esperar que las solicitudes estén disponibles. Esto hace que las cosas sean justas, ya que las solicitudes se distribuyen en round-robin (en lugar de permitir a un solo proceso consumirlos todos en una rápida sucesión). Observe que solamente es un problema cuando se usan los programadores de tiempo límite o Noop, ya que el CFQ predeterminado protege contra esta situación.
optimal_io_size
En algunas circunstancias, el almacenamiento subyacente reportará un tamaño de E/S óptimo. Esto es más común en RAID de hardware y software, donde el tamaño de E/S óptimo es el tamaño de banda. Si este valor se reporta, las aplicaciones deberán emitir E/S alineada y en múltiples del tamaño óptimo de E/S siempre y cuando sea posible.
read_ahead_kb
El sistema operativo puede detectar cuándo una aplicación está leyendo datos en forma secuencial desde un archivo o un disco. En dichos casos, realiza un algoritmo de lectura anticipada inteligente, donde se leen más datos en el disco que los solicitados por el usuario. Así, cuando el usuario intenta leer un bloque de datos, ya habrá puesto en memoria cache de página del sistema operativo. La desventaja en potencia es que el sistema operativo puede leer más datos que los necesarios, lo cual ocupa espacio en la cache de página hasta que es desalojada debido a una presión de alta memoria. Al tener múltiples procesos haciendo una lectura anticipada, aumentaría la presión de memoria en estas circunstancias.
Para dispositivos de mapeador de dispositivos, suele ser una buena idea aumentar el valor de read_ahead_kb a un número más grande, tal como 8192. La razón es que ese dispositivo de mapeador de dispositivos suele componerse de varias dispositivos subyacentes. Establecer este parámetro al predeterminado (128 KB) multiplicado por el número de dispositivos que usted está asignando es un buen comienzo para el ajuste.
rotational
Los discos duros tradicionales han sido rotatorios (compuestos por bandejas rotatorias). No obstante, los SSD, no lo son. La mayoría de SSD lo publicará adecuadamente. Sin embargo, si se encuentra un dispositivo que no publique este indicador adecuadamente, deberá establecer, de forma manual, el rotatorio a 0; cuando el rotatorio esté desactivado, el elevador de E/S no emplea la lógica que se espera para reducir búsquedas, puesto que hay una pequeña multa para las operaciones de búsqueda en medios que no son rotatorios.
rq_affinity
La afinación de E/S puede ser procesada en una CPU diferente a la que expidió la E/S. La configuración de rq_affinity a 1 hace que el kernel entregue ajustes a la CPU en la cual se emitió E/S. Esto puede mejorar la efectividad de puesta en cache de datos de CPU.