• 容器技术基石:Linux namespace 和 cgroups


    先放结论,namespace 是用来做资源隔离, cgroup 是用来做资源限制。

    Namespace

    先说Namespace,虚拟技术基本要求就是资源隔离,简单的说就是我独占当前所有的资源。比如我在 8080 端口起 web 服务器,不用担心其他进程端口占用。Linux 自带 namespace 就能达到这个目的。namespace 从2002 开始开发到现在已经快20年的历史了,到现在一共有6种 namespace:

    • mnt, 文件系统

    • pid, 进程

    • net, 网络

    • ipc, 系统进程通信

    • uts, hostname

    • user, 用户

    可以通过三个系统调用的方式

    • clone,创建新的进程和新的namespace,新创建的进程 attach 到新创建的 namespace

    • unshare,不创建新的进程,创建新的 namespace 并把当前进程 attach 上

    • setns, attach 进程到已有的 namespace 上

    shell 也提供了一个和系统调用同名的 unshare 命令可以非常简单的创建 namespace。

    sudo unshare --fork --pid --mount-proc bash

    这样创建了一个新的 PID namespace 并在里面运行了 bash。我们看看当前 namespace 的进程

    图片

    在这个 namespace 里,就只有两个进程了。

    Cgroups

    cgroups 是 control groups 控制组的意思, 可以通过文件系统来访问这些信息。一般cgroups 挂载在 /sys/fs/cgroup

    图片

    内核会读取这些信息来调度资源分配给每个进程。比如我要限制进程占用CPU的时间。我用 Go 写了一个模拟高 CPU 的代码。

    func IsPrime(value int) bool {    for i := 2; i <= int(math.Floor(float64(value)/2)); i++ {        if value%2 == 0 {            return false        }    }    return true}
    func main() { for i := 0; i < 999999999; i++ { fmt.Printf("%v is prime: %v\n", i, IsPrime(i)) }}

    我创建两个 CPU 的 cgroups

    sudo cgcreate -g cpu:/cpulimitedsudo cgcreate -g cpu:/lesscpulimited

    cpu.shares 是给内核为每个进程决定 CPU 计算资源,默认值是1024。给 cpulimited 设置为 512,lesscpulimited 保留默认值,那么在这两个组的进程会以1 :2的比例占用CPU。

    sudo cgset -r cpu.shares=512 cpulimited

    图片

    我们来验证一下。

    在 cpulimited 起一个进程

    sudo cgexec -g cpu:cpulimited ./main > /dev/null &

    可以看到独占了 100% 的 CPU,在 cpulimited 再起一个进程

    图片

    两个进程都在 cpulimited,各占50%的 CPU。在 lesscpulimited 起一个进程

    图片

    sudo cgexec -g cpu:lesscpulimited ./main > /dev/null &

    图片

    两个 cpulimited 进程的 CPU 之和 与 一个 lesscpulimited 进程的 CPU 差不多就是 1:2的关系。

    来源:https://zhuanlan.zhihu.com/p/55099839

  • 相关阅读:
    poj2623
    poj2635
    案例解析丨 Spark Hive 自定义函数应用
    云图说 | 华为云GPU共享型AI容器,让你用得起,用得好,用的放心
    云小课 |选定合适的证书,做“有证”的合规域名
    记一次 node 项目重构改进
    SpringBoot写后端接口,看这一篇就够了!
    如何让知识图谱告诉你“故障根因”
    我敢说,这个版本的斗地主你肯定没玩过?
    5 分钟带你掌握 Makefile 分析
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/15916713.html
Copyright © 2020-2023  润新知