Una gran cantidad de RAM gratuita, NVMe Intel P4500 y todo se ralentiza: la historia de la adición fallida de la partición de intercambio

En este artículo, hablaré sobre la situación que ocurrió recientemente con uno de los servidores en nuestra nube VPS, confundiéndome durante varias horas. He estado configurando y solucionando problemas de los servidores Linux durante unos 15 años, pero este caso no se ajusta a mi práctica en absoluto: hice algunas suposiciones falsas y me desesperé un poco antes de poder determinar correctamente la causa del problema y resolverlo.


Preámbulo


Operamos una nube de tamaño mediano, que construimos en servidores típicos de la siguiente configuración: 32 núcleos, 256 GB de RAM y NVMe PCI-E Intel P4500 4TB. Realmente nos gusta esta configuración, porque nos permite no pensar en la falta de E / S, proporcionando la restricción correcta a nivel de tipos de instancias (instancias) de la VM. Dado que el NVMe Intel P4500 tiene un rendimiento impresionante, podemos proporcionar simultáneamente la provisión completa de IOPS a las máquinas y el almacenamiento de respaldo en un servidor de respaldo con cero IOWAIT.


Pertenecemos a los mismos viejos creyentes que no usan SDN hiperconvergentes y otras piezas juveniles elegantes y de moda para almacenar volúmenes de VM, creyendo que cuanto más simple es el sistema, más fácil es bromear bajo las condiciones de "el gurú principal fue a las montañas". Como resultado, almacenamos volúmenes de VM en formato QCOW2 en XFS o EXT4, que se implementa sobre LVM2.


También nos vemos obligados a usar QCOW2 por el producto que usamos para orquestación: Apache CloudStack.

, LVM2 (, , LVM2 , Intel P4500 ). lvmcreate -s .. dd ZFS. — ZFS , DD VM mount -o loop ....


, , LVM2, RO QCOW2, , , XFS , , . , - "" , - , . XFS RO , LVM2.

, 600-800 MB/s , — 10Gbit/s, .


8 . , , , -, , , 8 GB/, -.


, — Intel P4500, NFS , , ZFS.



- SWAP 8 GB, - "" DD . 2xSATA SSD RAID1 2xSAS HDD RAID1 LSI HP. , , , " readonly", SWAP-. RAM 30-40% , SWAP .


. :


#!/bin/bash

mkdir -p /mnt/backups/volumes

DIR=/mnt/images-snap
VOL=images/volume
DATE=$(date "+%d")
HOSTNAME=$(hostname)

lvcreate -s -n $VOL-snap -l100%FREE $VOL
ionice -c3 dd iflag=direct if=/dev/$VOL-snap bs=1M of=/mnt/backups/volumes/$HOSTNAME-$DATE.raw
lvremove -f $VOL-snap

ionice -c3, NVMe , IO :


cat /sys/block/nvme0n1/queue/scheduler
[none] 

, legacy- SSD RAID-, , AS IS. , , ionice .


iflag=direct DD. direct IO , IO . , oflag=direct , ZFS .


.


… , , IOWAIT 50%. :


Volume group "images" not found

" Intel P4500", , , . LVM2 LVM2:


vgcfgrestore images

:


— , , VPS- , . , — iostat IOPS- IOWAIT. , " NVMe" , .



. VPS- 128 GB RAM. , 32 GB . VPS , , SWAP- .


. vm.swappiness - 60. SWAP SAS HDD RAID1.


( ). DD , RAM NFS. , swappiness, VPS , HDD RAID1. , IOWAIT , IO NVMe, IO HDD RAID1.


. 32GB. 16 , , SWAP . swappiness 5 .


¿Cómo podría no suceder esto ? En primer lugar, si SWAP estuviera en un dispositivo SSD RAID o NVMe, y en segundo lugar, si no hubiera un dispositivo NVMe, pero habría un dispositivo más lento que no produciría tal volumen de datos, irónicamente, el problema ocurrió que NVMe es demasiado rápido


Después de eso, todo comenzó a funcionar como antes, con cero IOWAIT.


All Articles