He estado tratando de encontrar una respuesta directa a esta, y ha resultado difícil de alcanzar. Esta pregunta y su respuesta están cercanas, pero en realidad no me dan los detalles que me gustaría. Comencemos con lo que creo que sé.
Si tiene un dispositivo de bloqueo estándar y lo ejecuta sudo blockdev --report
, obtendrá algo como esto:
RO RA SSZ BSZ StartSec Size Device
rw 256 512 4096 0 500107862016 /dev/sda
rw 256 512 4096 2048 399999238144 /dev/sda1
rw 256 512 1024 781252606 1024 /dev/sda2
Ahora, decide cambiar ese valor predeterminado de 256 a 128 usando --setra
cualquiera de las particiones y le sucede a todo el dispositivo de bloque, así:
sudo blockdev --setra 128 /dev/sda1
sudo blockdev --report
RO RA SSZ BSZ StartSec Size Device
rw 128 512 4096 0 500107862016 /dev/sda
rw 128 512 4096 2048 399999238144 /dev/sda1
rw 128 512 1024 781252606 1024 /dev/sda2
Esto tiene mucho sentido para mí: el dispositivo de nivel de bloque es donde está la configuración, no la partición, por lo que todo cambia. También la relación predeterminada entre la configuración de RA y el dispositivo tiene sentido para mí, generalmente es:
RA * sector size (default = 512 bytes)
Por lo tanto, los cambios que realicé anteriormente, con el tamaño de sector predeterminado, bajarán de 128k a 64k. Todo bien y bien hasta ahora.
Sin embargo, ¿qué sucede cuando agregamos un RAID de software, o LVM y un mapeador de dispositivos? Imagine que su informe se ve así en su lugar:
RO RA SSZ BSZ StartSec Size Device
rw 256 512 4096 0 10737418240 /dev/xvda1
rw 256 512 4096 0 901875499008 /dev/xvdb
rw 256 512 4096 0 108447924224 /dev/xvdj
rw 256 512 4096 0 108447924224 /dev/xvdi
rw 256 512 4096 0 108447924224 /dev/xvdh
rw 256 512 4096 0 108447924224 /dev/xvdg
rw 4096 512 4096 0 433787502592 /dev/md0
rw 4096 512 512 0 429496729600 /dev/dm-0
En este caso, tenemos un dispositivo LVM dm-0 mapeado por dispositivo encima del md0 creado por mdadm, que de hecho es una banda RAID0 en los cuatro dispositivos xvdg-j.
Tanto el md0 como el dm-0 tienen configuraciones de 4096 para RA, mucho más altas que los dispositivos de bloque. Entonces, algunas preguntas aquí:
- ¿Cómo se pasa la configuración RA por la cadena de dispositivos de bloque virtual?
- ¿Dm-0 triunfa todo porque ese es el dispositivo de bloqueo de nivel superior al que realmente está accediendo?
- ¿Tendría
lvchange -r
un impacto en el dispositivo dm-0 y no aparecería aquí?
Si es tan simple como, la configuración de RA del dispositivo de bloque virtual que está utilizando se pasa, ¿eso significa que una lectura de dm-0 (o md0) se traducirá en 4 x 4096 lecturas de RA? (uno en cada dispositivo de bloque). Si es así, eso significaría que esta configuración explota el tamaño del encabezado en el escenario anterior.
Luego, en términos de averiguar qué está haciendo realmente la configuración de readahead:
¿Qué utiliza, equivalente al tamaño del sector anterior para determinar el valor real de lectura para un dispositivo virtual:
- ¿El tamaño de la banda del RAID (para md0)?
- ¿Algún otro equivalente de tamaño de sector?
- ¿Es configurable y cómo?
- ¿El FS juega un papel (estoy principalmente interesado en ext4 y XFS)?
- O, si simplemente se pasa, ¿es simplemente la configuración RA del dispositivo de nivel superior multiplicada por el tamaño del sector de los dispositivos de bloque real?
Finalmente, ¿habría alguna relación preferida entre el tamaño de banda y la configuración de RA (por ejemplo)? Aquí estoy pensando que si la franja es el elemento más pequeño que se va a extraer del dispositivo RAID, lo ideal sería no tener que tener 2 accesos de disco para dar servicio a esa unidad mínima de datos y desearía hacer el RA Suficientemente grande para cumplir la solicitud con un solo acceso.