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.
fuente
Respuestas:
Depende. Supongamos que está dentro de Xen domU y tiene RA = 256. Su / dev / xvda1 es LV real en el dom0 visible bajo / dev / dm1. Entonces tienes RA (domU (/ dev / xvda1)) = 256 y RA (dom0 (/ dev / dm1)) = 512. Tendrá tal efecto que el núcleo dom0 accederá / dev / dm1 con otro RA que no sea el núcleo domU. Simple como eso.
Se producirá otra situación si asumimos la posición / dev / md0 (/ dev / sda1, / dev / sda2).
Configurar / dev / md0 RA no afectará a / dev / sdX blockdevices.
Por lo tanto, en mi opinión, el kernel accede al dispositivo de bloque de la manera que realmente se establece. Se puede acceder a un volumen lógico a través de RAID (del que forma parte) o dispositivo devicemapper y cada uno con otro RA que será respetado.
Entonces, la respuesta es: la configuración RA es en mi humilde opinión, no se pasa por la cadena de dispositivos de bloque, pero cualquiera que sea la configuración RA del dispositivo de nivel superior, se utilizará para acceder a los dispositivos constituyentes
Si te refieres a la propagación profunda por "triunfar sobre todo", según mi comentario anterior, creo que puedes tener diferentes RA para diferentes dispositivos en el sistema.
Sí, pero este es un caso particular. Supongamos que tenemos / dev / dm0, que es / dev / vg0 / blockdevice de LVM. Si lo haces:
/ dev / dm0 también cambiará porque / dev / dm0 y / dev / vg0 / blockdevice es exactamente el mismo dispositivo de bloque cuando se trata de acceso al kernel.
Pero supongamos que / dev / vg0 / blockdevice es lo mismo que / dev / dm0 y / dev / xvda1 en Xen domU que lo está utilizando. Establecer el RA de / dev / xvda1 tendrá efecto pero dom0 verá que todavía tiene su propio RA.
Normalmente descubro RA experimentando con diferentes valores y probándolo con hdparm.
Lo mismo que arriba.
Claro, este es un tema muy grande. Te recomiendo que comiences aquí http://archives.postgresql.org/pgsql-performance/2008-09/msg00141.php
fuente
Conozca la respuesta más difícil de explicar, así que lo haré, por ejemplo. Supongamos que tiene 3 dispositivos de bloque y configura su RA para decir 4 (4 * 512 bytes) suponiendo un sector estándar. Si tuviera que usar un esquema RAID-5 usando los 3 discos, cualquier lectura que incluso tocara una banda en un disco único agravaría el RA por el factor que inicialmente configuró para bloquear el RA del dispositivo. Entonces, si su lectura abarcó exactamente los 3 discos, su RA efectiva sería 12 * 512 byte. Esto puede agravarse mediante la configuración de RA en los distintos niveles, por ejemplo, MD o LVM. Como regla general, si mi aplicación se beneficia de RA, la configuro en la capa más alta posible para que no componga la RA innecesariamente. Luego inicio el sistema de archivos en el sector 2049 y compenso cada inicio de sector en un número divisible por 8. Puede que esté muy lejos de lo que está preguntando, pero este es mi 2 ¢.
fuente
Eso es por la explicación. Hice algunas pruebas con una configuración RAID y LVM para demostrar que tienes razón:
https://fatalfailure.wordpress.com/2017/05/13/where-to-set-readahead-lvm-raid-devices-device-mapper-block-devices
El que importa es el que usa el sistema operativo
fuente