使用 PFCACHE 技術增加節點上的容器密度

使用 PFCACHE 技術增加節點上的容器密度

託管提供者的目標之一是最大限度地利用現有設備,以便為最終用戶提供高品質的服務。 終端伺服器的資源始終是有限的,但託管客戶端服務的數量(在我們的例子中我們討論的是 VPS)可能會有很大差異。 了解如何爬上樹並在切口下吃漢堡。

以客戶根本感覺不到的方式壓縮節點上的 VPS 有助於提高任何託管提供者的經濟績效。 當然,如果一個節點塞滿了容器,那麼它不應該在接縫處爆裂,並且所有客戶端都會立即感受到負載的任何激增。

在一個節點上可以託管多少個 VPS 取決於許多因素,例如:

1.節點本身硬體特點
2.VPS大小
3. VPS 負載的性質
4. 有助於優化密度的軟體技術

在此,我們將分享我們在 Virtuozzo 中使用 Pfcache 技術的經驗。
我們使用第 6 個分支,但上述所有內容也適用於第 7 個分支。

高速緩存 – Virtuozzo 機制,有助於消除容器中重複的 IOPS 和 RAM,將容器中的相同檔案分配到單獨的公共區域。

事實上它包括:
1. 內核程式碼
2. 使用者空間惡魔
3. 使用者空間實用程式

在節點端,我們分配一個完整的部分,其中將建立文件,這些文件將直接由節點上的所有 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的原理如下:
• 使用者空間守護程式Pfcached 將檔案的sha-1 雜湊寫入該檔案的xattr 屬性。 並非所有檔案都被處理,但僅處理 /usr、/bin、/usr/sbin、/sbin、/lib、/lib64 目錄中的文件

• 這些目錄中的檔案很可能會被「共用」並且被多個容器使用;

• Pfcached 定期收集從核心讀取檔案的統計資料並進行分析,如果檔案經常使用,則將其新增至快取;

• 這些目錄可能不同,並且在設定檔中進行設定。

• 讀取檔案時,檢查其xattr 擴充屬性中是否包含指定的雜湊。 如果包含,則開啟「常規」檔案而不是容器檔案。 這種替換不會被容器程式碼注意到,並且隱藏在核心中;

• 寫入檔案時,雜湊值將會失效。 因此,下次打開它時,將打開容器檔案本身,而不是其快取。

透過將/vz/pfcache 中的共享文件保留在頁面快取中,我們可以節省該快取本身,並節省IOPS。我們不是從磁碟讀取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

因此,我們在容器中保存了大約 40 GB 的記憶體檔案;它們將從快取中載入。

為了使該機制更好地發揮作用,需要在節點上放置最「相同」的 VPS。 例如,使用者沒有 root 存取權限並且配置了部署映像中的環境的使用者。

您可以透過設定檔調整pfcache
/etc/vz/pfcache.conf

MINSIZE、MAXSIZE – 快取的最小/最大檔案大小
TIMEOUT – 快取嘗試之間的逾時時間

您可以查看完整的參數列表 鏈接.

來源: www.habr.com

添加評論