如何numactl成员内的Docker容器中的进程?

我有一个带有16GB 片上内存的英特尔至强融核64内核CPU设置为NUMA节点1.我想将在Docker容器中运行的进程绑定到此NUMA节点,但是出错:

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

我也尝试将整个Docker母舰绑定到NUMA节点1,但没有运气:

 localhost$ sudo numactl --membind 1 docker run xyz /bin/bash 

这不会给出任何错误,但是不会显示片上存储器的使用情况。

我的问题是:如何将一个进程绑定到NUMA节点1? 谢谢!

  1. 你需要得到哪个cpus属于1个numa节点:

    $ lscpu | grep node1

    NUMA node1 CPU(s): 8-15,24-31

  2. 为docker创buildcpuset:

    $ cgcreate -g cpuset:docker

    $ echo 8-15 > /sys/fs/cgroup/cpuset/docker/cpuset.cpus

  3. 如果您只想在特定NUMA节点上运行某些容器,请执行以下操作:

    cgcreate -g cpuset:my-cgroup

    echo 8-15 > /sys/fs/cgroup/cpuset/my-cgroup/cpuset.cpus

  4. 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/