帮助中心

ClearContainers简介

时间:2018-12-23 13:37 点击:

  ClearContainers简介

  DevOps和信息技术部门喜欢易于管理和部署。当Docker以类似于iPhone改变客户端应用程序格局的方式改变服务器端的应用程序开发行业时,容器在很大程度上成为人们关注的焦点。但是,“容器”这个词不仅仅用于应用程序;它还用于描述可以以独立方式运行一个软件的技术。此类容器涉及使用控制组来管理资源和内核命名空间,以限制容器应用程序的可见性和范围。对于典型的LWN阅读器,这可能是人们在遇到“容器”这个词时所想到的。许多倡导容器的人首先说虚拟机价格昂贵且启动缓慢,并且容器提供了更有效的替代方案。通常的对立面是关于安全内核容器如何真正对抗对手用户,他们口袋里有大量漏洞利用。合理的人可以在这个主题上争论几个小时,但现实是很多容器的潜在用户都认为这是一个节目。在开源项目和初创公司中,正在进行许多努力来提高容器和名称空间的安全性。

  Linux内核启动速度非常快。在真机上,内核中的大部分启动时间都花在初始化某些硬件上。然而,在虚拟机中,这些硬件延迟都没有-毕竟它都是假的-并且在实践中,人们只使用几乎可以自由设置的virtio类设备。我们不得不优化一些早期启动的CPU初始化延迟;但是,在虚拟机环境中启动内核大约需要32毫秒,还有很多空间可供优化。在2008年,我们在管道工大会上讨论了5秒钟的启动,从那时起,许多事情都发生了变化-其中systemd位居榜首。Systemd使创建快速启动的用户空间环境变得微不足道。我想在这里写一篇关于我们如何优化用户空间的长篇文章,但实际情况是-通过一些小的调整,只需将操作系统正确地放在一起-用户空间启动已经很快(少于75毫秒)。(当以高分辨率采样记录引导图时,它会多一点,但这都是测量开销。)

  帮助内存消耗的一个关键特性是DAX,4.0内核现在支持ext4文件系统。如果您的存储作为主机CPU的常规内存可见,则DAX使系统能够对存储在那里的文件执行就地执行。换句话说,使用DAX时,可以完全绕过页面缓存和虚拟内存子系统。对于使用mmap的应用程序,这意味着真正的零拷贝方法,对于使用read系统调用(或等效)的代码,您将只有一个数据副本。DAX最初设计用于快速闪存式存储,显示为CPU的内存;但在虚拟机环境中,这种类型的存储很容易模拟。我们需要在主机上执行的操作是将磁盘映像文件映射到guest虚拟机的物理内存,并在guest虚拟机内核中使用一个小型设备驱动程序,该内核将此内存区域作为DAX就绪块设备公开给内核。

  这个DAX解决方案提供的是零拷贝,无内存成本的解决方案,用于将所有操作系统代码和数据放入访客的用户空间。此外,当在管理程序中使用MAP_PRIVATE标志时,存储变为免费写入时复制;在guest虚拟机中写入文件系统并不是持久的,因此当guest容器终止时它们将消失。这种MAP_PRIVATE解决方案使得在所有容器之间共享相同的磁盘映像变得微不足道,并且还意味着即使一个容器受到攻击并且操作系统映像混乱,这些更改也不会在将来的容器中持续存在。降低内存成本的第二个关键特性是主机上的内核同页合并(KSM)。KSM是一种在进程和KVM来宾之间和之间对内存进行重复数据删除的方法。

  最后,我们优化了核心用户空间,以最小化内存消耗。这主要包括在驻留守护进程初始化结束时调用glibcmalloc_trim函数,导致它们将glibc所持有的任何malloc缓冲区返回给内核。默认情况下,Glibc实现了一种滞后类型,它可以保留一定量的释放内存作为优化,以便很快再次需要内存。以上就是小编对于clearcontainers的一些了解,如果您有什么相关的看法欢迎前来讨论,交流。