使用PFCACHE技术提高节点上的容器密度



托管服务提供商的目标之一是最大程度地利用现有设备,为最终用户提供优质服务。 终端服务器的资源总是有限的,但是,托管客户端服务的数量(在我们的案例中我们谈论的是VPS)可能会有很大的不同。 阅读有关如何上圣诞树并在猫下吃汉堡的信息。

以这样的方式在节点上整合VPS:客户端完全不会觉得这有很大帮助,可以极大地提高任何托管服务提供商的经济绩效。 当然,如果将容器塞到节点上,则节点不应在接缝处破裂,并且所有客户都会立即感觉到负载激增。

一个节点上可以放置多少个VPS取决于许多因素,例如:

  1. 节点本身的铁的特性
  2. VPS大小
  3. VPS负载模式
  4. 帮助优化密度的软件技术

在这种情况下,我们将分享针对Virtuozzo使用Pfcache技术的经验。
我们使用第6个分支,但是所说的一切对第7个都是正确的。

Pfcache是一种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,而不是从磁盘读取十个文件,而是读取了一个直接进入页面缓存的文件。

 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。 例如,那些用户没有超级用户权限,并且配置了来自扩展映像的环境的用户。

您可以通过配置文件调整pfcache操作
/etc/vz/pfcache.conf

MINSIZE,MAXSIZE-缓存的最小/最大文件大小
超时-两次缓存尝试之间的超时

在链接上可以找到参数的完整列表。

Source: https://habr.com/ru/post/zh-CN444696/


All Articles