Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ плотности ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π½Π° Π½ΠΎΠ΄Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ PFCACHE

Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ плотности ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π½Π° Π½ΠΎΠ΄Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ PFCACHE

Одной ΠΈΠ· Ρ†Π΅Π»Π΅ΠΉ хостинг-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° являСтся максимально возмоТная утилизация ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎΡΡ оборудования для прСдоставлСния качСствСнного сСрвиса ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ. РСсурсы ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… сСрвСров всСгда ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹, ΠΎΠ΄Π½Π°ΠΊΠΎ количСство Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Ρ… клиСнтских сСрвисов, Π° Π² нашСм случаС Ρ€Π΅Ρ‡ΡŒ ΠΎ VPS, ΠΌΠΎΠΆΠ΅Ρ‚ сущСствСнно ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ. О Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π½Π° Π΅Π»ΠΊΡƒ Π²Π»Π΅Π·Ρ‚ΡŒ ΠΈ Π±ΡƒΡ€Π³Π΅Ρ€ ΡΡŠΠ΅ΡΡ‚ΡŒ, Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚ΠΎΠΌ.

Π£ΠΏΠ»ΠΎΡ‚Π½Π΅Π½ΠΈΠ΅ VPS Π½Π° Π½ΠΎΠ΄Π΅ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ этого совсСм Π½Π΅ чувствовали, ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ‚ΡŒ экономичСскиС ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ любого хостинг-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°. БСзусловно, Π½ΠΎΠ΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Ρ‚Ρ€Π΅Ρ‰Π°Ρ‚ΡŒ ΠΏΠΎ швам, Ссли Π² Π½Π΅Π΅ Π½Π°ΠΏΠΈΡ…Π°Π½ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΏΠΎΠ΄ завязку, ΠΈ любой всплСск ΠΏΠΎ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ сразу Ρ‡ΡƒΠ²ΡΡ‚Π²ΡƒΡŽΡ‚ всС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹.

Бколько VPS ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ Π½ΠΎΠ΄Π΅, зависит ΠΎΡ‚ мноТСства Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Ρ… ΠΊΠ°ΠΊ:

1. Π₯арактСристики ΠΆΠ΅Π»Π΅Π·Π° самой Π½ΠΎΠ΄Ρ‹
2. Π Π°Π·ΠΌΠ΅Ρ€ VPS
3. Π₯Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° VPS
4. Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ софта, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ»ΠΎΡ‚Π½ΠΎΡΡ‚ΡŒ

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ подСлимся ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ использования Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Pfcache для Virtuozzo.
ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ 6-ю Π²Π΅Ρ‚ΠΊΡƒ, Π½ΠΎ всС сказанноС справСдливо ΠΈ для 7-ΠΉ.

Pfcache – ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Virtuozzo, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‰ΠΈΠΉ Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ IOPS ΠΈ RAM Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ…, выдСляя ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ‰ΡƒΡŽ Π·ΠΎΠ½Ρƒ.

ЀактичСски ΠΎΠ½ состоит ΠΈΠ·:
1. Кода ядра
2. User-space Π΄Π΅ΠΌΠΎΠ½Π°
3. User-space ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹

На сторонС Π½ΠΎΠ΄Ρ‹, ΠΌΡ‹ выдСляСм Ρ†Π΅Π»Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‚ нСпосрСдствСнно ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ всС VPS Π½Π° Π½ΠΎΠ΄Π΅. Π’ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π» монтируСтся Π±Π»ΠΎΡ‡Π½ΠΎΠ΅ устройство ploop. Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈ стартС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ рСфСрСнс Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π»:

[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 Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ:
β€’ User-space Π΄Π΅ΠΌΠΎΠ½ Pfcached прописываСт sha-1 Ρ…Π΅Ρˆ Ρ„Π°ΠΉΠ»Π° Π² xattr Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π€Π°ΠΉΠ»Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π΅ всС, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² дирСкториях /usr, /bin, /usr/sbin, /sbin, /lib, /lib64

β€’ НаиболСС вСроятно, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ Π² Π΄Π°Π½Π½Ρ‹Ρ… дирСкториях Π±ΡƒΠ΄ΡƒΡ‚ Β«ΠΎΠ±Ρ‰ΠΈΠΌΠΈΒ» ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ нСсколькими ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ;

β€’ Pfcached пСриодичСски собираСт статистику чтСния Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· ядра, Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π΅, ΠΈ добавляСт Ρ„Π°ΠΉΠ»Ρ‹ Π² кСш, Ссли ΠΈΡ… использованиС частоС;

β€’ Π”Π°Π½Π½Ρ‹Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ, ΠΈ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³Ρ€ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ….

β€’ ΠŸΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° провСряСтся, содСрТит Π»ΠΈ ΠΎΠ½ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ…Π΅Ρˆ Π² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°Ρ… xattr. Если содСрТит – открываСтся Β«ΠΎΠ±Ρ‰ΠΈΠΉΒ» Ρ„Π°ΠΉΠ», вмСсто Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Данная ΠΏΠΎΠ΄ΠΌΠ΅Π½Π° происходит Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ для ΠΊΠΎΠ΄Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΈ скрываСтся Π² ядрС;

β€’ ΠŸΡ€ΠΈ записи Π² Ρ„Π°ΠΉΠ», Ρ…Π΅Ρˆ инвалидируСтся. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΡƒΠΆΠ΅ нСпосрСдствСнно Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π° Π½Π΅ Π΅Π³ΠΎ кСш.

Π”Π΅Ρ€ΠΆΠ° Π² страничном кСшС ΠΎΠ±Ρ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· /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. НапримСр, Ρ‚Π΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π΅Ρ‚ root-доступа ΠΈ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… настроСно ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π°.

Π’ΡŽΠ½ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ pfcache ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Ρ„ΠΈΠ³ Ρ„Π°ΠΉΠ»
/etc/vz/pfcache.conf

MINSIZE, MAXSIZE – ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ/ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° для ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ
TIMEOUT – Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ°ΠΌΠΈ ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ

Π‘ ΠΏΠΎΠ»Π½Ρ‹ΠΌ списком ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ознакомится ΠΏΠΎ ссылкС.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com