Jedným z cieľov poskytovateľa hostingu je maximalizovať využitie existujúcich zariadení za účelom poskytovania vysokokvalitných služieb koncovým používateľom. Zdroje koncových serverov sú vždy obmedzené, ale počet hostovaných klientskych služieb, v našom prípade hovoríme o VPS, sa môže výrazne líšiť. Prečítajte si o tom, ako vyliezť na strom a zjesť hamburger pod rezom.
Zhutnenie VPS na uzle tak, aby to klienti vôbec nepocítili, výrazne pomáha zvyšovať ekonomickú výkonnosť každého poskytovateľa hostingu. Samozrejme, uzol by nemal praskať vo švíkoch, ak je preplnený kontajnermi a každý nárast zaťaženia okamžite pocítia všetci klienti.
Koľko VPS môže byť hosťovaných na jednom uzle, závisí od mnohých faktorov, ako napríklad:
1. Charakteristika hardvéru samotného uzla
2. Veľkosť VPS
3. Charakter zaťaženia VPS
4. Softvérové technológie, ktoré pomáhajú optimalizovať hustotu
V tomto prípade sa podelíme o naše skúsenosti s používaním technológie Pfcache pre Virtuozzo.
Používame 6. vetvu, ale všetko povedané platí aj pre 7. vetvu.
V skutočnosti pozostáva z:
1. Kód jadra
2. Démon používateľského priestoru
3. Pomôcky pre užívateľský priestor
Na strane uzla vyčleníme celú sekciu, v ktorej sa vytvoria súbory, ktoré budú priamo využívať všetky VPS na uzle. V tejto sekcii je namontované blokové ploop zariadenie. Potom, keď sa kontajner spustí, dostane odkaz na túto sekciu:
[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
...
Tu sú približné štatistiky o počte súborov na jednom z našich uzlov:
[root@pcs13 ~]# find /vz/pfcache -type f | wc -l
45851
[root@pcs13 ~]# du -sck -h /vz/pfcache
2.4G /vz/pfcache
2.4G total
Princíp pfcache je nasledovný:
• Démon užívateľského priestoru Pfcached zapíše hash sha-1 súboru do atribútu xattr tohto súboru. Nie všetky súbory sú spracované, ale iba v adresároch /usr, /bin, /usr/sbin, /sbin, /lib, /lib64
• Je najpravdepodobnejšie, že súbory v týchto adresároch budú „zdieľané“ a budú používané niekoľkými kontajnermi;
• Pfcached pravidelne zhromažďuje štatistiky o čítaní súborov z jadra, analyzuje ich a pridáva súbory do vyrovnávacej pamäte, ak sa často používajú;
• Tieto adresáre sa môžu líšiť a sú konfigurované v konfiguračných súboroch.
• Pri čítaní súboru sa kontroluje, či obsahuje zadaný hash v rozšírených atribútoch xattr. Ak obsahuje, namiesto kontajnerového súboru sa otvorí súbor „všeobecný“. Táto substitúcia sa vyskytuje bez povšimnutia kódom kontajnera a je skrytá v jadre;
• Pri zápise do súboru je hash neplatný. Pri ďalšom otvorení sa teda otvorí samotný súbor kontajnera a nie jeho vyrovnávacia pamäť.
Uchovávaním zdieľaných súborov z /vz/pfcache vo vyrovnávacej pamäti stránky dosiahneme úsporu v tejto vyrovnávacej pamäti samotnej, ako aj úsporu v IOPS, namiesto čítania desiatich súborov z disku prečítame jeden, ktorý okamžite ide do vyrovnávacej pamäte stránky.
struct inode {
...
struct file *i_peer_file;
...
};
struct address_space {
...
struct list_head i_peer_list;
...
}
Zoznam VMA pre súbor zostáva jediný (odstránime duplikáciu pamäte) a číta sa z disku menej často (ušetríme iops). Náš spoločný fond sa nachádza na SSD – dodatočný nárast rýchlosti.
Príklad ukladania súboru /bin/bash do vyrovnávacej pamäte:
[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
Vypočítame efektivitu použitia
Tento skript prechádza všetkými kontajnermi v uzle a vypočítava súbory uložené vo vyrovnávacej pamäti každého kontajnera.
[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
Z pamäte teda uložíme asi 40 gigabajtov súborov v kontajneroch, ktoré sa načítajú z vyrovnávacej pamäte.
Aby tento mechanizmus fungoval ešte lepšie, je potrebné umiestniť na uzol čo najviac „identické“ VPS. Napríklad tie, ku ktorým nemá užívateľ root prístup a na ktorých je nakonfigurované prostredie z nasadeného obrazu.
pfcache môžete vyladiť cez konfiguračný súbor
/etc/vz/pfcache.conf
MINSIZE, MAXSIZE – minimálna/maximálna veľkosť súboru pre ukladanie do vyrovnávacej pamäte
TIMEOUT – časový limit medzi pokusmi o ukladanie do vyrovnávacej pamäte
Môžete si pozrieť úplný zoznam parametrov
Zdroj: hab.com