GDP - caep.org.cn...生态环境资产核 算研究 主要介绍了绿色GDP 核算,自然资源资产负债表编制和自然资源资产干部 离任审计等生态环境资产核算进展情况。首先,介绍了绿色GDP
Container 内核原理介绍
description
Transcript of Container 内核原理介绍
Container 内核原理介绍邱模炯 @ UCloud
虚拟化技术: VM 与 Container
Hardware
Host Kernel
Hypervisor(VMM)
GuestKernel
Binaries/Libraries
App
System Virtualization
GuestKernel
Binaries/Libraries
App
GuestKernel
Binaries/Libraries
App
Hardware
Host Kernel
Binaries/Libraries
App
Binaries/Libraries
App
Binaries/Libraries
App
Container Virtualization
虚拟化技术: VM 与 Container
Hardware
Host Kernel
Hypervisor(VMM)
GuestKernel
Binaries/Libraries
App
System Virtualization
GuestKernel
Binaries/Libraries
App
GuestKernel
Binaries/Libraries
App
Hardware
Host Kernel
Binaries/Libraries
App
Binaries/Libraries
App
Binaries/Libraries
App
Container Virtualization
namespace & cgroup
内容:•namespace•cgroup•aufs•两者对比
namespace :进程组虚拟化的手段• 进程运行环境有哪些?
– VFS mount, 即文件系统 rootfs– uid, gid– network, 即独立的网络设备和 tcpip– pid, 父 pid– devices, hostinfo,
IPC, /proc, /sys 等
• 进程虚拟化 / 隔离• 已有 ns
– pid :进程 ID– mnt :文件系统挂载点– net :网络栈– uts :主机名– ipc :进程间通信– user :用户 ID, 组 ID ,
capabilities
• 子进程自动继承父的 ns
nsproxy 相当于运行环境struct task_struct{ struct nsproxy *nsproxy ...}
struct task_struct{ struct nsproxy *nsproxy ...}
struct task_struct{ struct nsproxy *nsproxy ...}
struct nsproxy: uts_namespace ipc_namespace pid_namespace mnt_namespace net
struct nsproxy: uts_namespace ipc_namespace pid_namespace mnt_namespace net
UTS0
UTS1
PID0
PID1
NET0
MNT0
IPC0
NET1
mnt ns 提供私有的 rootfs• 每个 mnt ns 有自己的 rootfs ,相对于 host 的根目录
struct mnt_namespace{ struct mount * root; ...}
pid ns 映射后的 pid 空间struct pid_namespace{ struct pidmap pidmap[PIDMAP_ENTRIES]; ...}
net ns 提供独立的网络栈每一个 ns• 私有的网络设备
– lo, veth 等虚设备– 物理网卡
• 独立的协议栈– ipv4, ipv6 (含
IP 地址和路由表)– tcp, sctp, dccp– iptables 规则– ipvs 等
其他 ns• uts, ipc• user ns
– C1 的 1001 id 和 C2 的 1001 不是同一– 主要处理 uid, gid, capabilities 的虚拟化– 3.8 版本提交;需要文件系统配合,目前不完善
• 还有什么 namespace 没有实现?– time, device, security keys, security
namespace 能做到什么?虚拟机,但资源无保证• 独立的 mnt ( chroot )• 独立的 pid 空间• 独立的网络协议栈• uts• uid, gid• ipc Hardware
Host Kernel
Binaries/
Libraries
App
Binaries/Libraries
App
Binaries/Librarie
s
App
namespace
cgroup: 资源隔离和统计
/cgroup
cont1 cont2
apache mysql ftp
group1: 内存上限 3072M ,group2: 内存上限 1024M ,
哪些控制组• memory
• usage_in_bytes• limit_in_bytes• stat• kmem...• kmem.tcp...• memsw...
• cpu• blkio• cpuset, freezer, net_cls,
net_prio, devices, perf, cpuacct, hugetlb
mount –t cgroup none /cgroup
ulimit 的群体版
cgroup: 内存子系统接口memory.limit_in_bytesmemory.soft_limit_in_bytesmemory.usage_in_bytesmemory.failcntmemory.max_usage_in_bytesmemory.stat
memory.kmem.limit_in_bytesmemory.kmem.usage_in_bytesmemory.kmem.failcntmemory.kmem.max_usage_in_bytes
memory.kmem.tcp.xxx
总体内存
kmem 内存kmem.tcp 内存
cgroup: 内存子系统原理mem_cgroup
mm_struct
task_struct
mm_struct
task_struct
page page_cgroup
-mem_cgroup 包含该 group 允许使用内存上限,当前使用量, LRU 等信息-每个进程 task_struct 知道自己属于哪个 group
-每个页面 page 有对应的page_cgroup 信息,从page_cgroup 可知道该页面属于哪个 group
- 在 page fault 或分配 page cache 页面时,系统会设置page_cgroup 属于哪个mem_cgroup
cgroup: CPU 子系统接口cpu.shares group 间 CPU 调度权重cpu.stat
cpu.cfs_period_uscpu.cfs_quota_us
cpu.rt_runtime_uscpu.rt_period_us
cgroup: CPU 子系统原理Complete Faire Scheduling 调度的基础是 red-black tree ,二叉排序树。启用 cgroup前,所有可运行进程都被排序
p1
p2
p3
p4
p6
p5
group1 group2
root
p1
p2
p3 p4
p5
p6
启用 cgroup后,变为两级调度!第一级: container 间第二级: container 内
cgroup: 其它子系统• blkio
• cpuset, freezer, net_cls, net_prio, devices, perf, cpuacct, hugetlb
namespace + cgroup 能做到?
虚拟机且资源有保证但,如何使得 container 精简?
Hardware
Host Kernel
Binaries/Libraries
App
Binaries/Libraries
App
Binaries/Libraries
App
namespace & cgroup
aufs overview • Another Union File System 同类: Overlayfs
/basebootbinliblib64usrsbin
/c1data
mount -t aufs -o br=/base=ro:/c1=rw none /union
/unionbootbinliblib64usrsbindata
aufs: 原理
aufs
aufs: 有待完善• 一个写操作导致整个文件的拷贝• branch 文件重名时的处理• 如何确保可预测可推理的行为
– “ 下层”文件被绕开修改– “ 上层”编辑文件,新
branch 恰有同名文件
/rw(none)
/rofileA
/newfileA
/unionfileA
Container VS VM: 内核是运行环境的一部分• 内核版本与 libc 有一定耦合• 内核特性• 系统调用, /proc, /sys• 磁盘设备名• 系统配置文件 硬件
用户态环境
内核
程序
VM
Container
Container VS VM :应用场景• 性能和大小
– 运行开销、部署速度、启动速度• 迁移• 隔离和安全适用场景 ?
Thank You