ื”ื’ื“ืœืช ืฆืคื™ืคื•ืช ืžื™ื›ืœ ืขืœ ืฆื•ืžืช ื‘ืืžืฆืขื•ืช ื˜ื›ื ื•ืœื•ื’ื™ื™ืช PFCACHE

ื”ื’ื“ืœืช ืฆืคื™ืคื•ืช ืžื™ื›ืœ ืขืœ ืฆื•ืžืช ื‘ืืžืฆืขื•ืช ื˜ื›ื ื•ืœื•ื’ื™ื™ืช PFCACHE

ืื—ืช ื”ืžื˜ืจื•ืช ืฉืœ ืกืคืง ื”ืื™ืจื•ื— ื”ื™ื ืœืžืงืกื ืืช ื ื™ืฆื•ืœ ื”ืฆื™ื•ื“ ื”ืงื™ื™ื ืขืœ ืžื ืช ืœืชืช ืฉื™ืจื•ืช ืื™ื›ื•ืชื™ ืœืžืฉืชืžืฉื™ ื”ืงืฆื”. ื”ืžืฉืื‘ื™ื ืฉืœ ืฉืจืชื™ ื”ืงืฆื” ืชืžื™ื“ ืžื•ื’ื‘ืœื™ื, ืื‘ืœ ืžืกืคืจ ืฉื™ืจื•ืชื™ ื”ืœืงื•ื—ื•ืช ื”ืžืชืืจื—ื™ื, ื•ื‘ืžืงืจื” ืฉืœื ื• ืื ื—ื ื• ืžื“ื‘ืจื™ื ืขืœ VPS, ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉื•ื ื” ื‘ืื•ืคืŸ ืžืฉืžืขื•ืชื™. ืงืจืื• ื›ื™ืฆื“ ืœื˜ืคืก ืขืœ ื”ืขืฅ ื•ืœืื›ื•ืœ ื”ืžื‘ื•ืจื’ืจ ืžืชื—ืช ืœื—ืชืš.

ื“ื—ื™ืกื” ืฉืœ VPS ืขืœ ืฆื•ืžืช ื‘ืฆื•ืจื” ื›ื–ื• ืฉืœืงื•ื—ื•ืช ืœื ื™ืจื’ื™ืฉื• ื‘ื–ื” ื‘ื›ืœืœ ืขื•ื–ืจืช ืžืื•ื“ ืœื”ื’ื‘ื™ืจ ืืช ื”ื‘ื™ืฆื•ืขื™ื ื”ื›ืœื›ืœื™ื™ื ืฉืœ ื›ืœ ืกืคืง ืื™ืจื•ื—. ื›ืžื•ื‘ืŸ, ืฆื•ืžืช ืœื ืฆืจื™ืš ืœื”ืชืคื•ืฆืฅ ื‘ืชืคืจื™ื ืื ื”ื•ื ื“ื—ื•ืก ืžืœื ื‘ืžื›ื•ืœื•ืช, ื•ื›ืœ ืขืœื™ื™ื” ื‘ืขื•ืžืก ืžื•ืจื’ืฉ ืžื™ื“ ืขืœ ื™ื“ื™ ื›ืœ ื”ืœืงื•ื—ื•ืช.

ื›ืžื” VPS ื ื™ืชืŸ ืœืืจื— ื‘ืฆื•ืžืช ืื—ื“ ืชืœื•ื™ ื‘ื’ื•ืจืžื™ื ืจื‘ื™ื, ื‘ืจื•ืจื™ื ื›ืžื•:

1. ืžืืคื™ื™ื ื™ ื”ื—ื•ืžืจื” ืฉืœ ื”ืฆื•ืžืช ืขืฆืžื•
2. ื’ื•ื“ืœ VPS
3. ืื•ืคื™ ื”ืขื•ืžืก ืขืœ ื”-VPS
4. ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ืชื•ื›ื ื” ื”ืžืกื™ื™ืขื•ืช ื‘ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืœ ื”ืฆืคื™ืคื•ืช

ื‘ืžืงืจื” ื–ื”, ื ืฉืชืฃ ืืช ื”ื ื™ืกื™ื•ืŸ ืฉืœื ื• ื‘ืฉื™ืžื•ืฉ ื‘ื˜ื›ื ื•ืœื•ื’ื™ื™ืช Pfcache ืขื‘ื•ืจ Virtuozzo.
ืื ื—ื ื• ืžืฉืชืžืฉื™ื ื‘ืกื ื™ืฃ ื”ืฉื™ืฉื™, ืื‘ืœ ื›ืœ ืžื” ืฉื ืืžืจ ื ื›ื•ืŸ ื’ื ืœื’ื‘ื™ ื”ืฉื‘ื™ืขื™.

Pfcache โ€“ ืžื ื’ื ื•ืŸ Virtuozzo ื”ืžืกื™ื™ืข ืœื‘ื˜ืœ ื›ืคื™ืœื•ืช ืฉืœ IOPS ื•-RAM ื‘ืงื•ื ื˜ื™ื™ื ืจื™ื, ืชื•ืš ื”ืงืฆืืช ืงื‘ืฆื™ื ื–ื”ื™ื ื‘ืงื•ื ื˜ื™ื™ื ืจื™ื ืœืื–ื•ืจ ืžืฉื•ืชืฃ ื ืคืจื“.

ืœืžืขืฉื” ื”ื•ื ืžื•ืจื›ื‘ ืž:
1. ืงื•ื“ ืœื™ื‘ื”
2. ืฉื“ ืžืจื—ื‘ ืžืฉืชืžืฉ
3. ื›ืœื™ ืขื–ืจ ืœืžืจื—ื‘ ืžืฉืชืžืฉ

ื‘ืฆื“ ื”ืฆื•ืžืช, ืื ื• ืžืงืฆื™ื ืงื˜ืข ืฉืœื ื‘ื• ื™ื™ื•ื•ืฆืจื• ืงื‘ืฆื™ื ืฉื™ืฉืžืฉื• ื™ืฉื™ืจื•ืช ืืช ื›ืœ ื”-VPS ื‘ืฆื•ืžืช. ื‘ืกืขื™ืฃ ื–ื” ืžื•ืชืงืŸ ื”ืชืงืŸ ื‘ืœื•ืง ืคืœื•ืค. ืœืื—ืจ ืžื›ืŸ, ื›ืืฉืจ ื”ืžื™ื›ืœ ืžืชื—ื™ืœ, ื”ื•ื ืžืงื‘ืœ ื”ืคื ื™ื” ืขื‘ื•ืจ ืกืขื™ืฃ ื–ื”:

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

ืœื”ืœืŸ ื ืชื•ื ื™ื ืกื˜ื˜ื™ืกื˜ื™ื™ื ืžืฉื•ืขืจื™ื ืขืœ ืžืกืคืจ ื”ืงื‘ืฆื™ื ื‘ืื—ื“ ืžื”ืฆืžืชื™ื ืฉืœื ื•:

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

ื”ืขื™ืงืจื•ืŸ ืฉืœ pfcache ื”ื•ื ื›ื“ืœืงืžืŸ:
โ€ข ื“ืžื•ืŸ ืžืจื—ื‘ ื”ืžืฉืชืžืฉ Pfcached ื›ื•ืชื‘ ืืช ื”-sha-1 ืฉืœ ื”ืงื•ื‘ืฅ ืœืชื›ื•ื ืช xattr ืฉืœ ืงื•ื‘ืฅ ื–ื”. ืœื ื›ืœ ื”ืงื‘ืฆื™ื ืžืขื•ื‘ื“ื™ื, ืืœื ืจืง ื‘ืกืคืจื™ื•ืช /usr, /bin, /usr/sbin, /sbin, /lib, /lib64

โ€ข ืกื‘ื™ืจ ืœื”ื ื™ื— ืฉื”ืงื‘ืฆื™ื ื‘ืกืคืจื™ื•ืช ืืœื• "ื™ืฉืชืคื•" ื•ื™ืฉืžืฉื• ืžืกืคืจ ืงื•ื ื˜ื™ื™ื ืจื™ื;

โ€ข Pfcached ืื•ืกืฃ ืžืขืช ืœืขืช ื ืชื•ื ื™ื ืกื˜ื˜ื™ืกื˜ื™ื™ื ืขืœ ืงืจื™ืืช ืงื‘ืฆื™ื ืžื”ืงืจื ืœ, ืžื ืชื— ืื•ืชื• ื•ืžื•ืกื™ืฃ ืงื‘ืฆื™ื ืœืžื˜ืžื•ืŸ ืื ื ืขืฉื” ื‘ื”ื ืฉื™ืžื•ืฉ ืชื›ื•ืฃ;

โ€ข ืกืคืจื™ื•ืช ืืœื• ืขืฉื•ื™ื•ืช ืœื”ื™ื•ืช ืฉื•ื ื•ืช ื•ืžื•ื’ื“ืจื•ืช ื‘ืงื•ื‘ืฆื™ ืชืฆื•ืจื”.

โ€ข ื‘ืขืช ืงืจื™ืืช ืงื•ื‘ืฅ, ื ื‘ื“ืง ืื ื”ื•ื ืžื›ื™ืœ ืืช ื”-hash ืฉืฆื•ื™ืŸ ื‘ืชื›ื•ื ื•ืช xattr ื”ืžื•ืจื—ื‘ื•ืช. ืื ื”ื•ื ืžื›ื™ืœ, ื”ืงื•ื‘ืฅ "ื”ื›ืœืœื™" ื ืคืชื— ื‘ืžืงื•ื ืงื•ื‘ืฅ ื”ืžื›ื•ืœื”. ื”ื—ืœืคื” ื–ื• ืžืชืจื—ืฉืช ืœืœื ืชืฉื•ืžืช ืœื‘ ืœืงื•ื“ ื”ืžื›ื•ืœื” ื•ื”ื™ื ืžื•ืกืชืจืช ื‘ืงืจื ืœ;

โ€ข ื‘ืขืช ื›ืชื™ื‘ื” ืœืงื•ื‘ืฅ, ื”-hash ืื™ื ื• ื—ื•ืงื™. ืœืคื™ื›ืš, ื‘ืคืขื ื”ื‘ืื” ืฉืชืคืชื—ื• ืื•ืชื•, ืงื•ื‘ืฅ ื”ืžื™ื›ืœ ืขืฆืžื• ื™ื™ืคืชื—, ื•ืœื ื”ืžื˜ืžื•ืŸ ืฉืœื•.

ืข"ื™ ืฉืžื™ืจืช ืงื‘ืฆื™ื ืžืฉื•ืชืคื™ื ืž-/vz/pfcache ื‘ืžื˜ืžื•ืŸ ื”ืขืžื•ื“, ืื ื• ืžืฉื™ื’ื™ื ื—ื™ืกื›ื•ืŸ ื‘ืžื˜ืžื•ืŸ ื–ื” ืขืฆืžื•, ื›ืžื• ื’ื ื—ื™ืกื›ื•ืŸ ื‘-IOPS. ื‘ืžืงื•ื ืœืงืจื•ื ืขืฉืจื” ืงื‘ืฆื™ื ืžื”ื“ื™ืกืง, ืื ื• ืงื•ืจืื™ื ืื—ื“, ืฉืžื™ื“ ืขื•ื‘ืจ ืœืžื˜ืžื•ืŸ ื”ืขืžื•ื“.

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

ืจืฉื™ืžืช ื”-VMA ืฉืœ ื”ืงื•ื‘ืฅ ื ืฉืืจืช ื™ื—ื™ื“ื” (ืื ื—ื ื• ืžื‘ื˜ืœื™ื ื›ืคื™ืœื•ืช ื‘ื–ื™ื›ืจื•ืŸ) ื•ื ืงืจืืช ืžื“ื™ืกืง ื‘ืชื“ื™ืจื•ืช ื ืžื•ื›ื” ื™ื•ืชืจ (ื—ื™ืกื›ื•ืŸ ืฉืœ iops). ื”ืงืจืŸ ื”ืžืฉื•ืชืคืช ืฉืœื ื• ืžืžื•ืงืžืช ืขืœ SSD - ืจื•ื•ื— ื ื•ืกืฃ ื‘ืžื”ื™ืจื•ืช.

ื“ื•ื’ืžื” ืœืื—ืกื•ืŸ ื‘ืžื˜ืžื•ืŸ ืฉืœ ืงื•ื‘ืฅ /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

ืื ื• ืžื—ืฉื‘ื™ื ืืช ื™ืขื™ืœื•ืช ื”ืฉื™ืžื•ืฉ ืชืกืจื™ื˜ ืžื•ื›ืŸ.

ืกืงืจื™ืคื˜ ื–ื” ืขื•ื‘ืจ ืขืœ ื›ืœ ื”ืงื•ื ื˜ื™ื™ื ืจื™ื ื‘ืฆื•ืžืช, ื•ืžื—ืฉื‘ ืืช ื”ืงื‘ืฆื™ื ื”ืžืื•ื—ืกื ื™ื ื‘ืžื˜ืžื•ืŸ ืฉืœ ื›ืœ ืงื•ื ื˜ื™ื™ื ืจ.

[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

ื›ืš, ืžื”ื–ื™ื›ืจื•ืŸ ืื ื• ืฉื•ืžืจื™ื ื›-40 ื’ื™ื’ื”-ื‘ื™ื™ื˜ ืฉืœ ืงื‘ืฆื™ื ื‘ืงื•ื ื˜ื™ื™ื ืจื™ื; ื”ื ื™ื™ื˜ืขื ื• ืžื”ืžื˜ืžื•ืŸ.

ื›ื“ื™ ืฉืžื ื’ื ื•ืŸ ื–ื” ื™ืขื‘ื•ื“ ืืคื™ืœื• ื˜ื•ื‘ ื™ื•ืชืจ, ื™ืฉ ืฆื•ืจืš ืœืžืงื ืืช ื”-VPS ื”"ื–ื”ื”" ื‘ื™ื•ืชืจ ืขืœ ื”ืฆื•ืžืช. ืœื“ื•ื’ืžื”, ืืœื” ืฉืœืžืฉืชืžืฉ ืื™ืŸ ื’ื™ืฉืช ืฉื•ืจืฉ ืืœื™ื”ื ื•ืืฉืจ ืขืœื™ื”ื ืžื•ื’ื“ืจืช ื”ืกื‘ื™ื‘ื” ืžื”ืชืžื•ื ื” ื”ืคืจื•ืกื”.

ืืชื” ื™ื›ื•ืœ ืœื›ื•ื•ืŸ ืืช pfcache ื“ืจืš ืงื•ื‘ืฅ ื”ืชืฆื•ืจื”
/etc/vz/pfcache.conf

MINSIZE, MAXSIZE - ื’ื•ื“ืœ ืงื•ื‘ืฅ ืžื™ื ื™ืžืœื™/ืžืงืกื™ืžืœื™ ืœืื—ืกื•ืŸ ื‘ืžื˜ืžื•ืŸ
TIMEOUT - ืคืกืง ื–ืžืŸ ื‘ื™ืŸ ื ื™ืกื™ื•ื ื•ืช ืฉืžื™ืจื” ื‘ืžื˜ืžื•ืŸ

ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืืช ืจืฉื™ืžืช ื”ืคืจืžื˜ืจื™ื ื”ืžืœืื” ะฟะพ ััั‹ะปะบะต.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”