Bi karanîna teknolojiya PFCACHE re tîrêjiya konteynerê li ser girêkek zêde dike

Bi karanîna teknolojiya PFCACHE re tîrêjiya konteynerê li ser girêkek zêde dike

Yek ji armancên pêşkêşvanê mêvandariyê ev e ku karanîna amûrên heyî zêde bike da ku karûbarê kalîteya bilind ji bikarhênerên dawî re peyda bike. Çavkaniyên serverên paşîn her gav bi sînor in, lê hejmara karûbarên xerîdar ên mêvandar, û di rewşa me de em li ser VPS-ê diaxivin, dikare bi girîngî cûda bibe. Bixwînin ka meriv çawa hilkişin ser darê û li binê qulikê burgerek bixwin.

Tevlihevkirina VPS-ê li ser girêkek bi vî rengî ku xerîdar bi wê hîs nekin pir alîkar dike ku performansa aborî ya her pêşkêşkerek mêvandariyê zêde bike. Bê guman, ger girêk bi konteyneran tijî be, divê girêkek li ser diran neteqe, û her zêdebûnek barkirinê tavilê ji hêla hemî xerîdar ve tê hîs kirin.

Çiqas VPS dikare li ser yek nodê were mêvandar kirin bi gelek faktoran ve girêdayî ye, yên wekî eşkere:

1. Taybetmendiyên hardware girêka xwe
2. Mezinahiya VPS
3. Xwezaya barkirina li ser VPS
4. Teknolojiyên nermalava ku alîkariya xweşbînkirina dendikê dikin

Di vê rewşê de, em ê ezmûna xwe ya karanîna teknolojiya Pfcache ji bo Virtuozzo parve bikin.
Em şaxa 6-an bikar tînin, lê her tiştê ku tê gotin ji bo 7-an jî rast e.

Pfcache - mekanîzmayek Virtuozzo ya ku dibe alîkar ku IOPS û RAM-ê di konteyneran de dubare bike, pelên yeksan ên di konteyneran de li deverek hevpar a cihêreng veqetîne.

Di rastiyê de, ew ji:
1. Koda Kernel
2. Bikarhêner-cihê cin
3. Karûbarên cîhê bikarhêner

Li aliyê girêkê, em beşek tevahî vediqetînin ku tê de pelên ku dê rasterast ji hêla hemî VPS-ên li ser nodê ve werin bikar anîn veqetînin. Di vê beşê de amûrek blokek ploop-ê tête danîn. Dûv re, gava ku konteynir dest pê dike, ji bo vê beşê referansek distîne:

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

Li vir statîstîkên texmînî yên li ser hejmara pelên li ser yek ji girêkên me hene:

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

Prensîba pfcache wiha ye:
• Daemon cîhê bikarhêner Pfcached sha-1-ê pelê bi taybetmendiya xattr ya vê pelê dinivîse. Ne hemî pel têne pêvajo kirin, lê tenê di pelrêça /usr, /bin, /usr/sbin, /sbin, /lib, /lib64 de

• Bi îhtîmaleke mezin pelên di van pelrêçan de dê "parvekirî" bin û ji hêla çend konteyneran ve werin bikar anîn;

• Pfcached bi awayekî periyodîk statîstîkên xwendina pelan ji kernelê berhev dike, wê analîz dike û heke pir caran pelan bikar bînin pelan li cache zêde dike;

• Dibe ku ev pelrêçan cuda bin û di pelên veavakirinê de hatine mîheng kirin.

• Dema ku pelek dixwîne, tê kontrol kirin ka di nav taybetmendiyên dirêjkirî yên xattr de haşa diyarkirî heye yan na. Ger tê de hebe, pelê "giştî" li şûna pelê konteynerê tê vekirin. Ev cîgir ji hêla koda konteynerê ve nayê dîtin û di kernelê de veşartî ye;

• Dema ku li pelekê dinivîsin, haş betal dibe. Bi vî rengî, gava ku hûn wê vekin, pelê konteynerê bixwe dê were vekirin, û ne cache wê.

Bi girtina pelên hevpar ên ji /vz/pfcache-ê di cacheya rûpelê de, em di vê cache-ê bixwe de, û hem jî di IOPS-ê de teserûfê bi dest dixin. Li şûna ku em deh pelan ji dîskê bixwînin, em yek dixwînin, ku yekser diçe kaşê rûpelê.

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

Lîsteya VMA ya pelê yekane dimîne (em bîranînê jêbirin) û kêm caran ji dîskê tê xwendin (iops tomar dike). Fona meya hevpar li ser SSD-ê ye - di lezê de qezencek zêde.

Mînak ji bo cachkirina pelê /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

Em karbidestiya karanîna hesab dikin script amade.

Ev skrîpt di nav hemî konteynerên li ser nodê re derbas dibe, pelên cache yên her konteyneran hesab dike.

[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

Bi vî rengî, em ji bîrê nêzî 40 gigabayt pelan di konteyneran de hilînin; ew ê ji cacheyê werin barkirin.

Ji bo ku ev mekanîzma hîn çêtir bixebite, pêdivî ye ku VPS-ya herî "heval" li ser girêkê were danîn. Mînakî, yên ku bikarhêner xwedan gihandina root tune ye û li ser wan jîngeha ji wêneyê hatî veqetandin tête mîheng kirin.

Hûn dikarin pfcache bi pelê mîhengê vekin
/etc/vz/pfcache.conf

MINSIZE, MAXSIZE - herî kêm / herî zêde mezinahiya pelê ji bo cachkirinê
TIMEOUT - dema di navbera hewldanên cachkirinê de derbas dibe

Hûn dikarin navnîşa tevahî ya parametreyan bibînin link.

Source: www.habr.com

Add a comment