python - 如何在 Docker 容器中对进程进行 numactl membind?

标签 python linux docker virtualization numa

我有一个 16GB 的 Intel Xeon Phi 64 核 CPU 片上存储器设置为 NUMA 节点 1。我想将一个在 Docker 容器内运行的进程绑定(bind)到这个 NUMA 节点,但它出错了:

root@Docker$ sudo numactl --membind 1 python script.py
Error: set_mempolicy: Operation not permitted
setting membind: Operation not permitted

我还尝试将整个 Docker 母舰绑定(bind)到 NUMA 节点 1,但没有运气:
localhost$ sudo numactl --membind 1 docker run xyz /bin/bash

这没有给出任何错误,但显示没有使用片上存储器。

我的问题是:如何成功地将进程绑定(bind)到 NUMA 节点 1?谢谢!

最佳答案

  • 您需要获取哪个 cpus 属于 1 个 numa 节点:
    $ lscpu | grep node1NUMA node1 CPU(s): 8-15,24-31
  • 为 docker 创建 cpuset:
    $ cgcreate -g cpuset:docker$ echo 8-15 > /sys/fs/cgroup/cpuset/docker/cpuset.cpus
  • 如果您只想在特定 NUMA 节点上运行某些容器:
    cgcreate -g cpuset:my-cgroupecho 8-15 > /sys/fs/cgroup/cpuset/my-cgroup/cpuset.cpus
  • Docker 允许将新容器放在不同的 cgroup 下:
    docker run -it --rm --cgroup-parent=/my-cgroup/ ubuntu bash

  • 如需更多信息,请参阅 https://sthbrx.github.io/blog/2016/07/27/get-off-my-lawn-separating-docker-workloads-using-cgroups/ .

    关于python - 如何在 Docker 容器中对进程进行 numactl membind?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43267481/

    相关文章:

    python - 以django形式加载动态模型属性

    linux - 使用 kobject_create_and_add 和 kobject_init_and_add 函数动态创建 kobject 的区别

    linux - Linux 中的 IntelliJ IDEA 编译加速

    mysql - 无法使用 MySQL Workbench 将 mysql 构建与 dockerfile 连接

    cron - 为什么Dockerfile中的cron服务不运行?

    python - 为什么官方 docker python 图像包含 GPG_KEY 环境变量?

    python 多处理日志记录 : QueueHandler with RotatingFileHandler "file being used by another process" error

    python - 使用 for 循环写入 csv

    python - 如何使用 pexpect 从后台进程发送信号

    c - Windows 和 Linux 之间通过套接字进行通信的问题