Cómo administrar el io del disco de Linux usando cgroups

  
                

Todos sabemos que cgroups en el sistema Linux se puede usar para administrar los recursos de la CPU. Hoy en día, Xiaobian desea presentarle cómo usar cgroups para administrar el proceso del disco io. Si está interesado en esto, es posible que desee entenderlo.

Esta característica se logra mediante blkio subsistema.

Hay muchas cosas en el subsistema blkio. Sin embargo, la mayoría de ellos son informes de estado de solo lectura. Los únicos parámetros que se pueden escribir son los siguientes:

El código es el siguiente:

blkio.throttle.read_bps_device

blkio. Throttle.read_iops_device

blkio.throttle.write_bps_device

blkio.throttle.write_iops_device

blkio.weight

blkio.weight_device

Estos son Ambos se utilizan para controlar el proceso del disco io. Obviamente, se divide en dos categorías, que con "aceleración", como su nombre indica es una aceleración, lo que limita el flujo a un cierto valor. Y "peso" es el peso asignado a io.

" throttle " Los cuatro parámetros miran el nombre para saber qué hacer. Tome blkio.throttle.read_bps_device para limitar el número de bytes que se pueden leer por segundo. Ejecute io primero

El código es el siguiente:

dd if = /dev /sda of = /dev /null &

[1] 2750

Utilice iotop para ver el código io

actual de la siguiente manera:

TID PRIO USER DISK READ DISK WRITE SWAPIN IO "COMMAND

2750 be /4 root 66.76 M /s 0.00 B /s 0.00% 68.53% dd if = /dev /sda of = /dev /null

. . .

Luego modifique el límite de recursos y agregue el proceso al grupo de control

El código es el siguiente:

echo ‘ 8: 0 1048576 ’ ”/sys /fs /cgroup /blkio /Foo /blkio.throttle.read_bps_device

echo 2750 sy /sys /fs /cgroup /blkio /foo /tasks

Aquí 8: 0 es el número de dispositivo principal y el sub-dispositivo del dispositivo de bloque correspondiente No Se puede ver con el nombre de archivo del dispositivo ls -l. Por ejemplo, el código

es el siguiente:

# ls -l /dev /sda

brw-rw ----. 1 disco raíz 8, 0 oct 24 11:27 /dev /sda

Aquí, 8, 0 es el número de dispositivo correspondiente. Por lo tanto, cgroups puede imponer diferentes restricciones en diferentes dispositivos. Luego observe el efecto

El código es el siguiente:

TID PRIO USER DISK READ DISK WRITE SWAPIN IO "COMMAND

2750 be /4 root 989.17 K /s 0.00 B /s 0.00% 96.22% dd if = /dev /sda de = /dev /null

. . .

Se puede ver que la lectura del proceso por segundo se reduce a aproximadamente 1 MB. Para eliminar la restricción, escriba a " 8: 0 0 " en el archivo

Sin embargo, debe tenerse en cuenta que este método no sirve para una gran cantidad de io generada en el intervalo de muestreo. Por ejemplo, incluso si genera un pico de 100M por segundo en 1 s, no estará limitado.

Mira blkio.weight de nuevo. Los métodos de aceleración y peso de Blkio son un poco como la cuota y las acciones del subsistema de CPU. Ambos son límites absolutos, el otro es relativo y los recursos pueden utilizarse completamente cuando no están ocupados. Los valores de peso varían de 10 a ndash; 1000 entre.

Probar pesos es un poco más problemático. Debido a que no es un límite absoluto, se ve afectado por el caché del sistema de archivos. Si está realizando pruebas en una máquina virtual, debe desactivar el almacenamiento en caché de la máquina virtual, como el VirtualBox que uso en el host. Para probar el efecto de leer io, Mr. es un archivo grande de dos G /tmp /file_1, /tmp /file_2, que se puede hacer con dd. Luego, establezca los dos pesos

El código es el siguiente:

# echo 500》 /sys/fs/cgroup/blkio/foo/blkio.weight

# echo 100》 /sys /fs/cgroup/blkio/bar/blkio.weight

Vacíe la caché del sistema de archivos antes de realizar pruebas para evitar interferir con los resultados de las pruebas.

El código es el siguiente:

sync

echo 3 proc /proc /sys /vm /drop_caches

Use dd para generar resultados de pruebas de io en estos dos grupos de control.

El código es el siguiente:

# cgexec -g " blkio: foo " dd if = /tmp /file_1 of = /dev /null &

[1] 1838

#cgexec -g " blkio: barra " dd if = /tmp /file_2 de = /dev /null &

[2] 1839

Todavía utilizo iotop Mire el efecto

El código es el siguiente:

TID PRIO USUARIO DISCO LEER DISCO ESCRIBIR SWAPIN IO "COMANDO

1839 be /4 root 48.14 M /s 0.00 B /s 0.00% 99.21% dd if = /tmp /file_2 of = /dev /null

1838 be /4 root 223.59 M /s 0.00 B /s 0.00% 16.44% dd if = /tmp /file_1 of = /dev /Nulo

Aunque el número de bytes leídos por segundo por los dos procesos cambia constantemente, la tendencia general se mantiene en alrededor de 1: 5, lo que es consistente con la relación de peso establecida. Blkio.weight_device es un sub-dispositivo. Al escribir, agregue el número de dispositivo en el frente.

Hay muchas estadísticas en el subsistema blkio

blkio.time

io para cada dispositivo Tiempo de acceso, en milisegundos

blkio.sectors

Entrante o Fuera Número de sectores en el dispositivo

blkio.io_serviced

Los diversos tipos de operaciones de io realizadas, sub-lectura, escritura, sincronización, asíncrono y total

Blkio.io_service_bytes

Cada tipo de cambiador io o fuera de cada dispositivo Número de bytes

blkio.io_service_time

Ejecución en cada dispositivo Cada tipo de tiempo io, en microsegundos

Blkio.io_wait_time

Tiempo de espera para cada tipo de io en la cola en el dispositivo

blkio.io_merged

Número de veces que cada tipo de solicitud de io se fusiona en cada dispositivo

blkio.io_queued

El número de solicitudes de io actualmente en la cola para cada tipo _

Mejores estadísticas y monitoreo del estado de io del proceso mediante estas estadísticas.

Use el código de


de la siguiente manera :

echo 1 "blkio.reset_stats

Todas las estadísticas se pueden borrar.

Lo anterior es el uso del disco de proceso de administración cgroups io en Linux introducido, el subsistema blkio se usará en el disco de proceso de administración io, puede limitar y monitorear el proceso del disco io a través del método anterior. Lo es

Copyright © Conocimiento de Windows All Rights Reserved