Økende beholdertetthet på en node ved hjelp av PFCACHE-teknologi

Økende beholdertetthet på en node ved hjelp av PFCACHE-teknologi

Et av målene til vertsleverandøren er å maksimere utnyttelsen av eksisterende utstyr for å kunne yte service av høy kvalitet til sluttbrukere. Ressursene til sluttservere er alltid begrenset, men antallet hostede klienttjenester, og i vårt tilfelle snakker vi om VPS, kan variere betydelig. Les om hvordan du klatrer i treet og spiser en burger under snittet.

Å komprimere VPS på en node på en slik måte at klienter ikke føler det i det hele tatt, bidrar i stor grad til å øke den økonomiske ytelsen til enhver hostingleverandør. Selvfølgelig skal en node ikke sprekke i sømmene hvis den er stappfull av containere, og enhver økning i belastningen merkes umiddelbart av alle klienter.

Hvor mange VPS som kan være vert for en node avhenger av mange faktorer, så åpenbare som:

1. Kjennetegn på maskinvaren til selve noden
2. VPS-størrelse
3. Type belastning på VPS
4. Programvareteknologier som bidrar til å optimalisere tettheten

I dette tilfellet vil vi dele vår erfaring med å bruke Pfcache-teknologi for Virtuozzo.
Vi bruker 6. gren, men alt som er sagt er også sant for 7.

Pfcache – en Virtuozzo-mekanisme som hjelper til med å deduplisere IOPS og RAM i containere, og allokere identiske filer i containere til et eget fellesområde.

Faktisk består den av:
1. Kjernekode
2. User-space demon
3. Brukerplassverktøy

På nodesiden tildeler vi en hel seksjon der det skal lages filer som skal brukes direkte av alle VPS på noden. En blokkpløkkeanordning er montert i denne seksjonen. Deretter, når beholderen starter, mottar den en referanse for denne delen:

[root@pcs13 ~]# cat /proc/mounts
...
/dev/ploop62124p1 /vz/pfcache ext4 rw,relatime,barrier=1,data=ordered,balloon_ino=12 0 0
...
/dev/ploop22927p1 /vz/root/418 ext4 rw,relatime,barrier=1,data=ordered,balloon_ino=12,pfcache_csum,pfcache=/vz/pfcache 0 0
/dev/ploop29642p1 /vz/root/264 ext4 rw,relatime,barrier=1,data=ordered,balloon_ino=12,pfcache_csum,pfcache=/vz/pfcache 0 0
...

Her er omtrentlig statistikk over antall filer på en av våre noder:

[root@pcs13 ~]# find /vz/pfcache -type f | wc -l
45851
[root@pcs13 ~]# du -sck -h /vz/pfcache
2.4G    /vz/pfcache
2.4G    total

Prinsippet for pfcache er som følger:
• User-space daemon Pfcached skriver sha-1-hashen til filen til xattr-attributtet til denne filen. Ikke alle filer behandles, men bare i katalogene /usr, /bin, /usr/sbin, /sbin, /lib, /lib64

• Det er mest sannsynlig at filene i disse katalogene vil bli "delt" og vil bli brukt av flere beholdere;

• Pfcached samler med jevne mellomrom statistikk om å lese filer fra kjernen, analyserer den og legger til filer i hurtigbufferen hvis de brukes ofte;

• Disse katalogene kan være forskjellige og er konfigurert i konfigurasjonsfiler.

• Når du leser en fil, sjekkes det om den inneholder den angitte hashen i de utvidede xattr-attributtene. Hvis den inneholder, åpnes den "generelle" filen i stedet for containerfilen. Denne erstatningen skjer ubemerket av beholderkoden og er skjult i kjernen;

• Når du skriver til en fil, blir hashen ugyldig. Dermed, neste gang du åpner den, vil selve containerfilen bli åpnet, og ikke cachen.

Ved å beholde delte filer fra /vz/pfcache i sidecachen oppnår vi besparelser i selve cachen, samt besparelser i IOPS I stedet for å lese ti filer fra disk leser vi en som umiddelbart går til sidecachen.

struct inode {
...
 struct file             *i_peer_file;
...
};
struct address_space {
...
 struct list_head        i_peer_list;
...
}

VMA-listen for filen forblir singel (vi dedupliserer minne) og leses sjeldnere fra disk (sparer iops). Vårt fellesfond er plassert på en SSD - en ekstra gevinst i hastighet.

Eksempel for bufring av /bin/bash-filen:

[root@pcs13 ~]# ls -li /vz/root/2388/bin/bash
524650 -rwxr-xr-x 1 root root 1021112 Oct  7  2018 /vz/root/2388/bin/bash
[root@pcs13 ~]# pfcache dump /vz/root/2388 | grep 524650
8e3aa19fdc42e87659746f6dc8ea3af74ab30362 i:524650      g:1357611108  f:CP
[root@pcs13 ~]# sha1sum /vz/root/2388/bin/bash
8e3aa19fdc42e87659746f6dc8ea3af74ab30362  /vz/root/2388/bin/bash
[root@pcs13 /]# getfattr -ntrusted.pfcache /vz/root/2388/bin/bash
# file: vz/root/2388/bin/bash
trusted.pfcache="8e3aa19fdc42e87659746f6dc8ea3af74ab30362"
[root@pcs13 ~]# sha1sum /vz/pfcache/8e/3aa19fdc42e87659746f6dc8ea3af74ab30362
8e3aa19fdc42e87659746f6dc8ea3af74ab30362  /vz/pfcache/8e/3aa19fdc42e87659746f6dc8ea3af74ab30362

Vi beregner brukseffektiviteten ferdig manus.

Dette skriptet går gjennom alle beholderne på noden, og beregner de hurtigbufrede filene til hver beholder.

[root@pcs16 ~]# /pcs/distr/pfcache-examine.pl
...
Pfcache cache uses 831 MB of memory
Total use of pfcached files in containers is 39837 MB of memory
Pfcache effectiveness: 39006 MB

Fra minnet lagrer vi derfor omtrent 40 gigabyte med filer i containere; de ​​vil bli lastet fra cachen.

For at denne mekanismen skal fungere enda bedre, er det nødvendig å plassere den mest "identiske" VPS-en på noden. For eksempel de som brukeren ikke har root-tilgang til og som miljøet fra det distribuerte bildet er konfigurert på.

Du kan stille inn pfcache gjennom konfigurasjonsfilen
/etc/vz/pfcache.conf

MINSIZE, MAXSIZE – minimum/maksimum filstørrelse for caching
TIMEOUT – tidsavbrudd mellom cachingforsøk

Du kan se hele listen over parametere по ссылке.

Kilde: www.habr.com

Legg til en kommentar