详细介绍请参考:https://access.redhat.com/site/documentation/zh-CN/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/
查看是否支持numa及其numa信息:
[root@abc tmp]# numactl --show
policy: default                    //当前numa策略为default
preferred node: current
physcpubind: 0 1 2 3 4 5 6 7
cpubind: 0 1
nodebind: 0 1
membind: 0 1                     //以上为可供绑定的cpu mem node等资源
[root@abc tmp]# numactl --hardware
available: 2 nodes (0-1)          //表示有两个可用节点
node 0 cpus: 0 2 4 6
node 0 size: 8192 MB
node 0 free: 2904 MB               //节点0包含的cpu及其内存使用情况(本地资源情况)
node 1 cpus: 1 3 5 7
node 1 size: 8179 MB
node 1 free: 4220 MB               //节点1
node distances:
node   0   1
  0:  10  20
  1:  20  10                     //节点0访问节点0即本地资源的代价是10,节点0访问节点1的资源代价是20(访问本地资源比远程快)
在Linux上NUMA API支持四种内存分配策略:
     1. 缺省(default) - 总是在本地节点分配(分配在当前线程运行的节点上)
     2. 绑定(bind) - 分配到指定节点上
     3. 交织(interleave) - 在所有节点或者指定的节点上交织分配
     4. 优先(preferred) - 在指定节点上分配,失败则在其他节点上分配
绑定和优先的区别是,在指定节点上分配失败时(如无足够内存),绑定策略会报告分配失败,而优先策略会尝试在其他节点上进行分配。强制使用绑定有可能会导致前期的内存短缺,并引起大量换页。缺省的策略是更加普适的优先策略。
三、使用cgroup软件对资源进行分配控制与隔离Cgroups是control groups的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如:cpu,memory,IO等等);
1、安装yum install libcgroup -y
2、配置cat > /etc/cgconfig.conf <<END
mount {
    cpuset  = /cgroup/cpu_and_mem;           
    memory  = /cgroup/cpu_and_mem;           //cpuset memory资源子系统挂载路径
}
group chunk_server {                                   //控制族群chunk_server,可包括lssubsys -a查看到的一些系统支持的子系统
cpuset {
         cpuset.cpus = "0,2,4,6";                     //cpu使用第0,2,4,6,属于同一node
         cpuset.mems="0";                             //node 0的memory资源
      }
memory {
         memory.limit_in_bytes=4G;                //memory限制大小为4G
         memory.memsw.limit_in_bytes=4G;      //限制mem+swap的大小为4G
         memory.swappiness=0;                     //积极使用物理内存(同vm.swappiness)
        }
}
group other {
cpuset {
         cpuset.cpus = "1,3,5,7";
         cpuset.mems="1";
      }
memory {
         memory.limit_in_bytes=8G;
         memory.memsw.limit_in_bytes=8G;
         memory.swappiness=0;
        }
}
END
memory.limit_in_bytes     内存;
memory.memsw.limit_in_bytes     内存与swap的和(大于memory.limit_in_bytes);
以上步骤的2跟4操作方法我觉得比较适用,当然也可以使用命令对资源进行挂载、分配、使用,如:cgcreate/cgget /cgset /cgdelete/cgclear/cgclassify等;
5、某些命令
[root@abc tmp]# lssubsys -am               //查看当前支持的子系统及其挂载情况
ns
cpu
cpuacct
devices
freezer
net_cls
blkio
perf_event
net_prio
cpuset,memory /cgroup/cpu_and_mem         
[root@abc tmp]# lscgroup                //查看当前cgroup层次结构
cpuset,memory:/
cpuset,memory:/other
cpuset,memory:/chunk_server
[root@abc tmp]# wc -l /cgroup/cpu_and_mem/chunk_server/tasks
31 /cgroup/cpu_and_mem/chunk_server/tasks
[root@abc tmp]# wc -l /cgroup/cpu_and_mem/other/tasks           
243 /cgroup/cpu_and_mem/other/tasks
//当前这两个资源group中的任务数,tasks中记录的是进程id(也可以手动加入某进程id到tasks文件中,则该进程及其子进程将受到该group控制)
[root@abc tmp]# cat /proc/`pidof chunk_server`/cgroup 
2:memory,cpuset:/chunk_server         //查看chunk_server程序所在group信息(此处表示层次为2,资源为memory和cpuset,group为/chunk_server)