cpuset/NUMA 相关知识

官方文档地址:https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt

基础

numa (Non-Uniform Memory Access),主要是为了避免多个cpu竞争总线,这里的总线是指:CPU和内存控制器之间的前端总线 (FSB)。架构图如下,从这里cgroup 之 cpuset 简介盗来的

java-javascript

lscpu命令,会显示有多少个numa,每个numa有多少个cpu。

numactl命令,输出差不多,会显示有多少个numa node,并显示每个node的cpu核数(这里显示的应该是超线程数,也就是逻辑CPU,逻辑cpu为:物理CPU数量 * 每个物理CPU有多少核 * 超线程数)。

对照下面命令看下:

----- 物理 CPU 数量
$ cat /proc/cpuinfo | grep "physical id" | sort | uniq
----- 每块 CPU 的核心数
$ cat /proc/cpuinfo | grep "cores" | uniq
----- 查看主机总的逻辑线程数
$ cat /proc/cpuinfo | grep "processor" | wc -l

cpusets

使用cpuset时,需要同时设置cpuset.cpus,以及cpuset.mems两个配置文件。支持逗号和横线。

# echo "0-1, 3-4" > /sys/fs/cgroup/cpuset/foobar/cpuset.cpus
# echo "0" > /sys/fs/cgroup/cpuset/foobar/cpuset.mems

应该是多少个numa节点就有多少个mem节点。

问题

如果容器分配的cpu跨numa了,也会产生跨numa的内存访问。

同一个numa节点的L3 cache是共享,绑核了也会产生冲突。

参考

大佬的博客,看不懂系列【计算机体系结构】NUMA架构详解

大佬的博客,看不懂系列INTRODUCTION 2016 NUMA DEEP DIVE SERIES