操作系统虚拟化的研究现状与展望

摘要

本文是论文《操作系统虚拟化的研究现状与展望》的笔记

操作系统虚拟化的技术架构

可以分为三层:容器实例层、容器管理层、内核资源层

容器实例层

研究要点

  • 容器应用场景的适用性
  • 容器应用的性能分析

适用性

  • 能快速部署,提高资源利用率
  • 《Skyport – Container-Based Execution Environment Management for Multi-Cloud Scientific Workflows》(2014 无等级 浏览) 解决了科学计算平台的软件部署以及资源利用率低下的的问题:大概也就是个在AWS上部署的框架
  • 《Serverless Computation with OpenLambda》(未读)更细粒度的无服务器架构

性能分析

  • 比传统虚拟化技术性能更好
  • 《A performance isolation analysis of disk-intensive workloads on container-based clouds》(2015 无等级 粗读):cgroups的资源隔离机制有问题,当一个容器爆资源了,会影响其他容器的性能。但是在这篇论文里用LXC容器跑Oracle数据库性能远好于KVM,存在瘦死骆驼比马大的现象。
  • 《Performance evaluation of container-based virtualization for high performance computing environment》(2013 浏览) 相当老的一篇论文了,Docker都还没出生。容器性能好,但是只有CPU能较好的隔离,内存、磁盘、网络均不能理想的隔离。文中提到了一个比较有意思的隔离性测试集:IBS (Isolation Benchmark Suite)
  • 《A performance study of containers in cloud enviornment》(2016 浏览) :LXC比Docker更适合IO密集型应用,因为没有花卷文件系统;Docker在延迟上由于多了一次NAT,性能略差于Docker;虚拟机+Docker性能差到难以想象!(怪不得我的阿里云上跑的Docker卡成PPT)

容器管理层

研究要点

  • 镜像管理
  • 容器编排:对容器完整生命周期包括容器的准备、部署和监控等多个方面的自动化管理

镜像管理

  • 容器启动时有76%的时间都是花在了镜像的拉取上
  • 有人优化了镜像的拉取策略,先拉取重要的内容
  • 也有人优化了镜像的缓存预取策略提高了性能

容器编排

  • Docker Compose实现了单机多容器应用的管理,它可以根据配置文件自动构建、管理、编排一组容器,为容器应用的定义和运行带来了极大的便捷
  • 目前比较流行的解决方案:Kubernets、Docker Swarm、Omega、Borg、Mesos,实现了容器集群的生命周期管理、动态负载均衡、应用配置管理、资源额度管理等内容

内核资源层

研究要点

  • 资源隔离:统计和限制一个容器的资源消耗能力,从而为其他容器保证资源的公平共享,一般用cgroup实现,主要解决容器之间的资源竞争问题。
  • 安全隔离:限制容器对逻辑对象的访问,例如文件、内存地址空间、端口号、用户标志、进程标志,使容器之间相互不可见

资源隔离

  • cgroup是Linux内核提供的一种可以限制、记录、隔离进程组所使用的物理资源的机制,还可以对容器进行挂起和恢复
  • 目前有一些研究工作注重对没有得到cgroup支持的资源进行隔离需求分析或者简单隔离
  • 《A two-tiered approach to I/O quality of service in Docker containers》(2015 B会 已读) :使用新的内核功能让IO隔离更加好;让SWARM搜集节点的IO状态,来更好的负载均衡。
  • https://linuxcontainers.org/lxcfs/introduction/ (未读)试图利用内核的用户态文件系统模块在容器内实现虚拟/sys和/proc文件系统,以增强容器的资源视图隔离性

安全隔离

  • 最初是通过chroot实现文件系统的隔离,后来改为使用Linux内核提供的namespace进行隔离

  • 《Rapid task provisioning with serverless-optimized containers》(2018 A会 未读):namespace会带来额外的性能开销

  • 《云计算虚拟化技术的发展与趋势》(2017 未读):很多云厂商用虚机+docker的形式

利用体系结构技术的方法

使用体系结构来优化namespace的不足是主要趋势

一些想法:

有时间把所有内核升级关于namespace和cgroup的内容都刷一遍,看一下有没有能做研究的地方?

从Docker的release note来看,只更新了针对高内核版本的overlay2的优化