Al usar el software RAID y LVM en Linux, ¿qué configuración de IO Scheduler y Readahead se respetan?

28

En el caso de varias capas (unidades físicas -> md -> dm -> lvm), ¿cómo interactúan los programadores, las configuraciones de lectura previa y otras configuraciones de disco?

Imagine que tiene varios discos (/ dev / sda - / dev / sdd) todos parte de un dispositivo RAID de software (/ dev / md0) creado con mdadm. Cada dispositivo (incluidos los discos físicos y / dev / md0) tiene su propia configuración para el programador de E / S ( modificado así ) y readahead ( modificado mediante blockdev ). Cuando agrega cosas como dm (crypto) y LVM, agrega aún más capas con sus propias configuraciones.

Por ejemplo, si el dispositivo físico tiene una lectura anterior a 128 bloques y el RAID tiene una lectura anticipada de 64 bloques, ¿cuál es el honor cuando hago una lectura desde / dev / md0? ¿El controlador md intenta una lectura de 64 bloques que luego el controlador del dispositivo físico traduce a una lectura de 128 bloques? ¿O la lectura RAID "pasa" al dispositivo subyacente, lo que resulta en una lectura de 64 bloques?

¿El mismo tipo de pregunta es válida para los planificadores? ¿Tengo que preocuparme por varias capas de planificadores de E / S y cómo interactúan, o el / dev / md0 anula efectivamente los planificadores subyacentes?

En mis intentos de responder a esta pregunta, he encontrado algunos datos interesantes sobre programadores y herramientas que podrían ayudar a resolver esto:

andrew311
fuente

Respuestas:

7

Si realiza una lectura desde md0, se utiliza el encabezado de lectura para md0. Si hiciste la lectura de sda ​​que es un componente de md0, entonces usaría la configuración sda. El mapeador de dispositivos simplemente divide una E / S en múltiples lecturas y escrituras para hacer el RAID, pero todo eso está debajo de la capa de caché de bloque donde tiene lugar la lectura anticipada. La pila de almacenamiento se ve así:

sistema de archivos: omite la memoria caché cuando abre con O_DIRECT

bloquear caché - leer encabezado, escribir caché, planificador

mapeador de dispositivos: dm, lvm, RAID de software, instantánea, etc.

sd - controlador de disco

SCSI - manejo de errores, enrutamiento de dispositivos

controlador de hardware: tarjeta scsi, tarjeta FC, ethernet

Tenga en cuenta que cuando lo haga

dd if=/dev/sda of=foo

estás leyendo sda como un archivo, por lo que estás pasando por el caché de bloques Para ir directamente al disco, haga

dd if=/dev/sda of=foo iflag=direct

En cuanto a los programadores de elevadores de E / S, solo existen en el controlador de disco (sd). No hay directorio de cola en / sys / block / md o / sys / block / dm. Solo pasas por el elevador de discos una vez.

rígido
fuente
2
Hay un /sys/block/md0/queue/scheduleren mis sistemas, pero la única opción allí es none.
Peter Eisentraut