PFCACHE ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ์˜ ์ปจํ…Œ์ด๋„ˆ ๋ฐ€๋„ ๋†’์ด๊ธฐ

PFCACHE ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ์˜ ์ปจํ…Œ์ด๋„ˆ ๋ฐ€๋„ ๋†’์ด๊ธฐ

ํ˜ธ์ŠคํŒ… ์ œ๊ณต์—…์ฒด์˜ ๋ชฉํ‘œ ์ค‘ ํ•˜๋‚˜๋Š” ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ณ ํ’ˆ์งˆ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด ์žฅ๋น„์˜ ํ™œ์šฉ๋„๋ฅผ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ตœ์ข… ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค๋Š” ํ•ญ์ƒ ์ œํ•œ๋˜์–ด ์žˆ์ง€๋งŒ ํ˜ธ์ŠคํŒ…๋˜๋Š” ํด๋ผ์ด์–ธํŠธ ์„œ๋น„์Šค์˜ ์ˆ˜(์ด ๊ฒฝ์šฐ VPS์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Œ)๋Š” ํฌ๊ฒŒ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋ฌด์— ์˜ค๋ฅด๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ ˆ๋‹จ๋œ ๋ถ€๋ถ„ ์•„๋ž˜์—์„œ ๋ฒ„๊ฑฐ๋ฅผ ๋จน๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ฝ์–ด๋ณด์„ธ์š”.

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „ํ˜€ ๋Š๋ผ์ง€ ๋ชปํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋…ธ๋“œ์—์„œ VPS๋ฅผ ์••์ถ•ํ•˜๋ฉด ํ˜ธ์ŠคํŒ… ์ œ๊ณต์—…์ฒด์˜ ๊ฒฝ์ œ์  ์„ฑ๊ณผ๋ฅผ ๋†’์ด๋Š” ๋ฐ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก , ๋…ธ๋“œ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ฝ‰ ์ฐจ ์žˆ์œผ๋ฉด ๋…ธ๋“œ๊ฐ€ ํ„ฐ์ ธ์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ๋ถ€ํ•˜ ๊ธ‰์ฆ์ด ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์—์„œ ์ฆ‰์‹œ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ ๋…ธ๋“œ์—์„œ ํ˜ธ์ŠคํŒ…ํ•  ์ˆ˜ ์žˆ๋Š” VPS ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ์š”์†Œ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

1. ๋…ธ๋“œ ์ž์ฒด์˜ ํ•˜๋“œ์›จ์–ด ํŠน์„ฑ
2. VPS ํฌ๊ธฐ
3. VPS ๋ถ€ํ•˜์˜ ์„ฑ๊ฒฉ
4. ๋ฐ€๋„ ์ตœ์ ํ™”๋ฅผ ๋•๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ธฐ์ˆ 

์ด ๊ฒฝ์šฐ Virtuozzo์— Pfcache ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•œ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” 6๋ฒˆ์งธ ์ง€์ ์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์•ž์„œ ๋งํ•œ ๋ชจ๋“  ๋‚ด์šฉ์€ 7๋ฒˆ์งธ ์ง€์ ์—๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

Pfcache โ€“ ์ปจํ…Œ์ด๋„ˆ์˜ IOPS ๋ฐ RAM ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ์˜ ๋™์ผํ•œ ํŒŒ์ผ์„ ๋ณ„๋„์˜ ๊ณตํ†ต ์˜์—ญ์— ํ• ๋‹นํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” Virtuozzo ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ๋Š” ๋‹ค์Œ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
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๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋””์Šคํฌ์—์„œ XNUMX๊ฐœ์˜ ํŒŒ์ผ์„ ์ฝ๋Š” ๋Œ€์‹  XNUMX๊ฐœ์˜ ํŒŒ์ผ์„ ์ฝ๊ณ  ์ฆ‰์‹œ ํŽ˜์ด์ง€ ์บ์‹œ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

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

๋”ฐ๋ผ์„œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์•ฝ 40GB์˜ ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ์— ์ €์žฅํ•˜๊ณ  ์บ์‹œ์—์„œ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.

์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๋” ์ž˜ ์ž‘๋™ํ•˜๋ ค๋ฉด ๋…ธ๋“œ์— ๊ฐ€์žฅ "๋™์ผํ•œ" VPS๋ฅผ ๋ฐฐ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฃจํŠธ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์—†๊ณ  ๋ฐฐํฌ๋œ ์ด๋ฏธ์ง€์˜ ํ™˜๊ฒฝ์ด ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ํŒŒ์ผ์„ ํ†ตํ•ด pfcache๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
/etc/vz/pfcache.conf

MINSIZE, MAXSIZE โ€“ ์บ์‹ฑ์„ ์œ„ํ•œ ์ตœ์†Œ/์ตœ๋Œ€ ํŒŒ์ผ ํฌ๊ธฐ
TIMEOUT - ์บ์‹ฑ ์‹œ๋„ ์‚ฌ์ด์˜ ์‹œ๊ฐ„ ์ดˆ๊ณผ

๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ „์ฒด ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งํฌ.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€