یکی از اهداف ارائه دهنده هاست، به حداکثر رساندن استفاده از تجهیزات موجود به منظور ارائه خدمات با کیفیت بالا به کاربران نهایی است. منابع سرورهای پایانی همیشه محدود است، اما تعداد سرویس های مشتری میزبانی شده، و در مورد ما در مورد VPS صحبت می کنیم، می تواند به طور قابل توجهی متفاوت باشد. در مورد نحوه بالا رفتن از درخت و خوردن همبرگر زیر برش بخوانید.
فشرده سازی VPS در یک گره به گونه ای که کلاینت ها اصلا آن را احساس نکنند به افزایش عملکرد اقتصادی هر ارائه دهنده هاست کمک زیادی می کند. البته، اگر یک گره پر از ظروف باشد، نباید از درزها بترکد و هر گونه افزایش بار بلافاصله توسط همه مشتریان احساس می شود.
اینکه چه تعداد VPS می تواند روی یک گره میزبانی شود به عوامل زیادی بستگی دارد، از جمله موارد واضح:
1. ویژگی های سخت افزار خود گره
2. اندازه VPS
3. ماهیت بار روی VPS
4. فناوری های نرم افزاری که به بهینه سازی چگالی کمک می کنند
در این مورد، ما تجربه خود را از استفاده از فناوری Pfcache برای Virtuozzo به اشتراک خواهیم گذاشت.
ما از شاخه 6 استفاده می کنیم، اما همه چیزهایی که گفته شد برای 7 نیز صادق است.
در واقع شامل موارد زیر است:
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 را روی گره قرار دهید. به عنوان مثال، مواردی که کاربر به آنها دسترسی روت ندارد و محیط از تصویر مستقر شده روی آنها پیکربندی شده است.
شما می توانید pfcache را از طریق فایل کانفیگ تنظیم کنید
/etc/vz/pfcache.conf
MINSIZE، MAXSIZE - حداقل / حداکثر اندازه فایل برای ذخیره سازی
TIMEOUT - فاصله زمانی بین تلاشهای ذخیرهسازی حافظه پنهان
می توانید لیست کامل پارامترها را مشاهده کنید
منبع: www.habr.com