Tengo una CPU Intel Xeon Phi de 64 núcleos con 16 GB de memoria en chip configurada como nodo NUMA 1. Quiero vincular un proceso que se ejecuta dentro de un contenedor Docker a este nodo NUMA, pero falla:
root@Docker$ sudo numactl --membind 1 python script.py Error: set_mempolicy: Operation not permitted setting membind: Operation not permittedTambién traté de vincular toda la nave nodriza de Docker al nodo 1 de NUMA, pero no tuve suerte:
localhost$ sudo numactl --membind 1 docker run xyz /bin/bashEsto no da ningún error, pero no muestra la utilización de la memoria en el chip.
Mi pregunta es: ¿Cómo puedo vincular un proceso al nodo 1 de NUMA con éxito? ¡Gracias!
Debe obtener qué cpus pertenece a 1 nodo numa:
$ lscpu | grep node1
NUMA node1 CPU(s): 8-15,24-31
Crear cpuset para docker:
$ cgcreate -g cpuset:docker
$ echo 8-15 > /sys/fs/cgroup/cpuset/docker/cpuset.cpus
Si desea ejecutar solo ciertos contenedores en un nodo NUMA específico:
cgcreate -g cpuset:my-cgroup
echo 8-15 > /sys/fs/cgroup/cpuset/my-cgroup/cpuset.cpus
Docker permite colocar nuevos contenedores en un cgroup diferente:
docker run -it --rm --cgroup-parent=/my-cgroup/ ubuntu bash
Para obtener más información, consulte https://sthbrx.github.io/blog/2016/07/27/get-off-my-lawn-separating-docker-workloads-using-cgroups/ .
Tuve el mismo problema que se resolvió al crear un contenedor usando el modo " -privilegiado ".
Con este modo, podemos vincular los nodos de memoria y CPU dentro del contenedor y usar numa de manera efectiva.
Utilice el siguiente comando:
#docker run --privileged --name=test_numa --net=host -itd <image_id>Intente otorgar la capacidad CAP_SYS_NICE con nombre engañoso al contenedor, lo que permite que el proceso "establezca la afinidad de la CPU para procesos arbitrarios" [ ref ]:
docker run --cap-add SYS_NICE <other arguments> Este es un enfoque más seguro que --privileged pero aún debería habilitar lo que necesita.