PFCACHE технологийг ашиглан зангилаа дээрх савны нягтыг нэмэгдүүлэх

PFCACHE технологийг ашиглан зангилаа дээрх савны нягтыг нэмэгдүүлэх

Хостинг үйлчилгээ үзүүлэгчийн нэг зорилго бол эцсийн хэрэглэгчдэд өндөр чанартай үйлчилгээ үзүүлэхийн тулд одоо байгаа тоног төхөөрөмжийг хамгийн их ашиглах явдал юм. Төгсгөлийн серверүүдийн нөөц үргэлж хязгаарлагдмал байдаг боловч байршуулсан үйлчлүүлэгчийн үйлчилгээний тоо, бидний тохиолдолд VPS-ийн тухай ярьж байгаа нь ихээхэн ялгаатай байж болно. Мод руу хэрхэн авирч, зүссэн дор бургер идэх талаар уншина уу.

VPS-ийг зангилаа дээр үйлчлүүлэгчид огт мэдрэхгүй байхаар нягтруулах нь аливаа хостинг үйлчилгээ үзүүлэгчийн эдийн засгийн гүйцэтгэлийг нэмэгдүүлэхэд ихээхэн тусалдаг. Мэдээжийн хэрэг, зангилаа нь чингэлэгээр дүүрсэн тохиолдолд давхаргууд дээр тэсрэх ёсгүй бөгөөд ачааллын өсөлтийг бүх үйлчлүүлэгчид шууд мэдэрдэг.

Нэг зангилаа дээр хэдэн VPS байршуулах боломжтой нь олон хүчин зүйлээс хамаарна, тухайлбал:

1. Зангилааны өөрийнх нь техник хангамжийн шинж чанар
2. VPS хэмжээ
3. VPS дээрх ачааллын шинж чанар
4. Нягтыг оновчтой болгоход тусалдаг програм хангамжийн технологиуд

Энэ тохиолдолд бид Pfcache технологийг Virtuozzo-д ашигласан туршлагаа хуваалцах болно.
Бид 6-р салбарыг ашигладаг, гэхдээ хэлсэн бүх зүйл нь 7-д үнэн юм.

Pfcache – Виртуоззо механизм нь чингэлэг дэх 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 нь цөмөөс файлуудыг унших статистик мэдээллийг үе үе цуглуулж, дүн шинжилгээ хийж, байнга ашиглагддаг бол кэшэд файлуудыг нэмдэг;

• Эдгээр сангууд нь өөр байж болох ба тохиргооны файлд тохируулагдсан байдаг.

• Файлыг уншихдаа 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 – кэш хийх оролдлогуудын хоорондох завсарлага

Та параметрүүдийн бүрэн жагсаалтыг харах боломжтой холбоос.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх