php自己做网站吗,seo快速排名易下拉霸屏,wordpress编辑器添加代码工具,正规网站制作公司哪里有Numa 介绍NUMA,即Non-Uniform Memory Access Architecture#xff0c;非统一内存访问架构。背景传统的SMP中#xff0c; 所有处理器共享系统总线#xff0c;当cpu数目增大时#xff0c; 系统总现竞争就相应增加#xff0c;会成为系统的瓶颈#xff0c;所以SMP系统的CPU数…Numa 介绍NUMA,即Non-Uniform Memory Access Architecture非统一内存访问架构。背景传统的SMP中 所有处理器共享系统总线当cpu数目增大时 系统总现竞争就相应增加会成为系统的瓶颈所以SMP系统的CPU数目一般只有数十个。Numa物理内存管理有两种类型计算机分别以不同方式管理内存。UMA(一致内存访问unifurm memory access)将内存以连续方式组织起来(可能会有小缺口)。SMP系统中的每个cpu访问的内存区都有一样的。NUMA(非一致内存访问non-uniform memory access)是多处理器计算机各个cpu都有本地的内存支持快速的访问各个处理器通过总线连接用以支持其他cpu本地内存的访问相比本地内存访问较慢。节点pg_data_t 用于表示节点的基本元素。zone每个节点的内存被分为多个块称做zone。ZONE_DMA, DMA内存域ZONE_NORMAL , 可以直接映射到内核的普通内存域。ZONE_HIGDMEM , 超出内核段的物理地址。调度在每个任务创建时都会赋予一个HOME结点(所谓HOME结点就是该任务获得最初内存分配的结点)它是当时创建该任务时全系统负载最轻的结点由于目前Linux中不支持任务的内存从一个结点迁移到另一个结点因此在该任务的生命期内HOME结点保持不变。一个任务最初的负载平衡工作(也就是选该任务的HOME结点)缺省情况下是由exec()系统调用完成的也可以由fork()系统调用完成。在任务结构中的node_policy域决定了最初的负载平衡选择方式。linux kernel 3.8支持page在numa node上迁移。3.8前调度器对进程page 分配是无感知的迁移进程是基于对进程cache hotness来预估的因此在3.8前若想获得尽可能好的性能应使用taskset, cpuset等工具将进程pin到特定的核上(c框架seastar正是这种策略避免迁移的同时也实现了share-nothing)policymemory policy指的是在NUMA系统下的内存分配到哪个node上的问题。一种memory policy由一个mode, 可选的mode flags和可选的nodes组成。分配针对的对象可以是整个系统可以是某个进程可以是进程的某段内存区域系统默认级别将使用local allocations任务/进程级别如果没有被设置回退到默认如果被设置可由fork, exec, clone继承。对于进程设定memory policy之前分配的任何pages在设定之后保持原样VMA级别 未设定时默认取基于进程的policy 主要作用于annoymous mapping(stack,heap) 可在共享虚拟页面的任务上共享比如线程 exec调用时不继承它因为exec会丢弃父进程页面重新创建 如果任务试图在此VMA的子块内再次安装VMA policy内核会将它分裂成多个VMA 默认情况下在安装此policy之前的page保持原样除非mbind调用导致迁移shared策略作用于memory objects与VMA策略类似也有不同之处分配模式NODE LOCAL (系统默认)在当前代码执行的地方分配内存Interleave第一页分配在node 0,下一页在node 1再下一页node 0如此轮换。适合被多个线程访问的数据进程的Numa分配可通过/proc//numa_maps查看单个node分配查看/sys/devices/system/node/node/meminfo。进程会从父进程那继承分配策略即默认的node local且Linux 调度器会尽可能地在负载均衡的同时保持进程的cache不失效也即尽可能让进程在靠近分配内存的node的CPU上运行。但万一负载非常不均调度器是会将进程迁移到其它numa node上的这时的内存访问就变成了remote acess性能会下降。kernel 3.8支持将数据迁移到running node上。参考