Muita RAM livre, NVMe Intel P4500 e tudo fica mais lento - a história da adição malsucedida da partição swap

Neste artigo, falarei sobre a situação que ocorreu recentemente com um dos servidores em nossa nuvem VPS, me confundindo por várias horas. Estou configurando e solucionando problemas de servidores Linux há cerca de 15 anos, mas esse caso não se encaixa na minha prática - fiz algumas suposições falsas e fiquei um pouco desesperado antes de poder determinar corretamente a causa do problema e resolvê-lo.


Preâmbulo


Operamos uma nuvem de tamanho médio, construída em servidores típicos da seguinte configuração - 32 núcleos, 256 GB de RAM e NVMe PCI-E Intel P4500 de 4 TB. Gostamos muito dessa configuração, porque ela nos permite não pensar na falta de E / S, fornecendo a restrição correta no nível dos tipos de instâncias (instâncias) da VM. Como o NVMe Intel P4500 possui um desempenho impressionante, podemos fornecer simultaneamente o fornecimento completo de IOPS às máquinas e o armazenamento de backup em um servidor de backup com zero IOWAIT.


Pertencemos aos mesmos velhos crentes que não usam SDNs hiperconvergentes e outras peças jovens elegantes e modernas para armazenar volumes de VM, acreditando que quanto mais simples o sistema, mais fácil é brincar nas condições de "o principal guru foi para as montanhas". Como resultado, armazenamos volumes de VM no formato QCOW2 em XFS ou EXT4, que são implantados no LVM2.


Também somos forçados a usar o QCOW2 pelo produto que usamos para orquestração - 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 .


Como isso não aconteceu ? Primeiro, se o SWAP estivesse em um dispositivo SSD RAID ou NVMe e, em segundo lugar, se não houvesse um dispositivo NVMe, mas haveria um dispositivo mais lento que não produziria esse volume de dados - ironicamente, o problema ocorreu que o NVMe é muito rápido.


Depois disso, tudo começou a funcionar como antes - com zero IOWAIT.


All Articles