Öka tätheten av behållare på en nod med hjälp av PFCACHE-teknik

Öka tätheten av behållare på en nod med hjälp av PFCACHE-teknik

Ett av målen för värdleverantören är att maximera utnyttjandet av befintlig utrustning för att kunna tillhandahålla högkvalitativ service till slutanvändare. Resurserna för slutservrarna är alltid begränsade, men antalet värdbaserade klienttjänster, och i vårt fall talar vi om VPS, kan skilja sig markant. Läs om hur du klättrar i trädet och äter en hamburgare under hugget.

Att komprimera VPS på en nod på ett sådant sätt att kunderna inte känner det alls hjälper till att öka den ekonomiska prestandan för alla värdleverantörer. Naturligtvis ska en nod inte spricka i sömmarna om den är fullproppad med behållare, och varje belastningsökning känns omedelbart av alla klienter.

Hur många VPS som kan finnas på en nod beror på många faktorer, så uppenbara sådana som:

1. Egenskaper för hårdvaran för själva noden
2. VPS-storlek
3. Typ av belastning på VPS
4. Mjukvaruteknik som hjälper till att optimera densiteten

I det här fallet kommer vi att dela med oss ​​av vår erfarenhet av att använda Pfcache-teknik för Virtuozzo.
Vi använder den 6:e grenen, men allt som sägs är också sant för den 7:e.

Pfcache – en Virtuozzo-mekanism som hjälper till att deduplicera IOPS och RAM i behållare, och allokerar identiska filer i behållare till ett separat gemensamt område.

Den består faktiskt av:
1. Kärnkod
2. Användarutrymmesdemon
3. Användarutrymmesverktyg

På nodsidan allokerar vi en hel sektion där filer kommer att skapas som kommer att användas direkt av alla VPS på noden. En blockploopanordning är monterad i denna sektion. Sedan, när behållaren startar, får den en referens för detta avsnitt:

[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
...

Här är ungefärlig statistik över antalet filer på en av våra 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

Principen för pfcache är följande:
• User-space-demonen Pfcached skriver sha-1-hash för filen till xattr-attributet för denna fil. Alla filer bearbetas inte, utan bara i katalogerna /usr, /bin, /usr/sbin, /sbin, /lib, /lib64

• Det är mest troligt att filerna i dessa kataloger kommer att "delas" och kommer att användas av flera behållare;

• Pfcached samlar med jämna mellanrum statistik om att läsa filer från kärnan, analyserar den och lägger till filer i cachen om de används ofta;

• Dessa kataloger kan vara olika och är konfigurerade i konfigurationsfiler.

• När en fil läses kontrolleras om den innehåller den angivna hashen i de utökade attributen xattr. Om den innehåller, öppnas den "allmänna" filen istället för containerfilen. Denna substitution sker obemärkt av behållarkoden och är gömd i kärnan;

• När du skriver till en fil ogiltigförklaras hashen. Nästa gång du öppnar den kommer alltså själva behållarfilen att öppnas, och inte dess cache.

Genom att behålla delade filer från /vz/pfcache i sidcachen uppnår vi besparingar i själva denna cache, samt besparingar i IOPS.Istället för att läsa tio filer från disk läser vi en, som direkt går till sidcachen.

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

VMA-listan för filen förblir singel (vi deduplicerar minne) och läses från disk mer sällan (sparar iops). Vår gemensamma fond är placerad på en SSD - en extra vinst i hastighet.

Exempel på cachelagring av filen /bin/bash:

[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 beräknar användningseffektiviteten färdigt manus.

Detta skript går igenom alla behållare på noden och beräknar de cachade filerna för varje behållare.

[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

Från minnet sparar vi alltså cirka 40 gigabyte filer i behållare, de kommer att laddas från cachen.

För att denna mekanism ska fungera ännu bättre är det nödvändigt att placera den mest "identiska" VPS på noden. Till exempel de som användaren inte har root-åtkomst till och där miljön från den distribuerade avbildningen är konfigurerad.

Du kan ställa in pfcache genom konfigurationsfilen
/etc/vz/pfcache.conf

MINSIZE, MAXSIZE – minsta/högsta filstorlek för cachning
TIMEOUT – timeout mellan cachningsförsök

Du kan se hela listan med parametrar по ссылке.

Källa: will.com

Lägg en kommentar