论文阅读:SOCK:Serverless场景的runc容器启动优化方案

容器性能剖析从三个方面,容器存储,逻辑隔离,性能隔离。 

1.容器存储 

使用Storage Driver有些需要在跟Backing Filesystem有关的 

 根据查阅资料可知总体上,overlay要比aufs和device mapper快一点,在某些场景下甚至比btrfs快。下面是对overlay性能影响较大的几个方面:  

- 页缓存(page caching):overlayfs支持页缓存的共享,这意味着多个使用同一文件的容器可以共享同一页缓存,这使得overlayfs具有很高的内存使用效率;  

- copy-up操作:overlay的拷贝操作工作在文件层面上,也就是对文件的第一次修改需要复制整个文件,这回带来一些性能开销,在修改大文件时尤其明显。  

但overlay的拷贝操作比aufs还是快一点,因为aufs有很多层,而overlay只有两层,所以overlay在文件的搜索方面相对于aufs具有优势。  

- i节点限制:使用overlay作为storage driver会消耗大量的i节点,随着镜像和容器数量的增长这种消耗尤其显著,这在一定程度上限制了overlay的使用。 

本文是将bind mount与上述容器存储解决方案进行实验对比 

mount 的 bind 选项将第一个目录克隆到第二个。一个目录中的改变将会在另一个中出现 — 毕竟,它是同一磁盘上的同一个块。 

使用 bind 与对同一设备进行两次挂载的区别在于:您可以挂载子目录而无需挂载整个文件系统。 

2.逻辑隔离:namespace 

用namespse进行NET,UTS,IPC,PID划分并且给出了部分操作的结果,提现了工作量 

3.性能隔离:cgroup 

本文通过对cgroup创建多个实例进行对比 

 

通过上述实验 

作者结论使用bind挂载方式,使用开销小的chroot来替代mnt ns,并没有说明使用其他cgroup技术。 

作者寻找了公用的python page包使用比例进行优化 

作者基于上述实验和构想提出了SOCK容器runc 

存储使用bind mount 通信用了unix domain socket通信,用namespace进行隔离 

然后通过预加载python包的方式进行容器优化。 

主要实现使用Zygotes机制这样的机制会增大内存开销,会加速运行速度 .

 

Zygotes机制 

ZygoteInit 主要完成 4 项工作: 

1.注册一个 Socket。Zygote 是一个孵化器,一旦有新程序需要运行时,系统会通过这个 Socket 在第一时间通知它孵化一个进程 

2.预加载各类资源(类比于此处加载python包) 

3.启动 SystemServer。Zygote 只会初始化一次,因此它需要新建一个专门的进程来承载系统服务的运行 

4.进入死循环,不断地处理 Socket 请求 

由此可以知道,Zygote 主要是通过 Socket 来处理客户端的请求的。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值