oracle 老白,老白学编程 - Netdata学习 - numa

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本地内存的访问,相比本地内存访问较慢。

41732238ef53f6df5cd168366bc430bf.png

节点

pg_data_t 用于表示节点的基本元素。

ccdd22f936a42cfb4d9d7fd6c1b90bb9.png

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);

policy

memory 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上。

参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何安装 Angular CLI 并且检查 CLI 的版本

想在系统中安装 Angular CLI ,如何进行安装并且如何检查 CLI 的版本? 可以使用命令: npm install -g angular/cli 进行安装。 使用命令 ng version 来查看 Angular 的 CLI 的版本 转载于:https://www.cnblogs.com/huyuchengus/p/10879166.htm…

2018-2019-2 网络对抗技术 20165329 Exp 8 Web基础

2018-2019-2 网络对抗技术 20165329 Exp 8 Web基础 原理与实践说明 实践内容概述基础问题回答实践过程记录 1.Web前端:HTML2.Web前端:javascipt3.Web后端:MySQL基础4.Web后端:编写PHP网页5.最简单的SQL注入,XSS攻击测试…

为JVM分配内存:一个案例研究

这篇文章是关于最近的性能调整练习的。 与往常一样,这些开始于关于症状的模糊表述。 这次,魔鬼采取了“应用程序速度慢,我们无法访问源代码的形式。 我们有什么改善情况的选择”。 对该应用程序进行仔细研究后发现,它由捆绑在一起…

Thymeleaf与Spring集成(第2部分)

1.简介 这是Thymeleaf与Spring教程集成的第二部分。 您可以在此处阅读第一部分,在那里您将学习如何配置该项目。 如本教程第一部分开头所述,Web应用程序将发送两种类型的请求: 插入新访客:将同步请求发送到服务器以添加新访客。…

我们正在破解JDBC,因此您不必

我们喜欢使用JDBC 没人说。 曾经 更严重的是,如果考虑一下,JDBC实际上是一个非常出色的API。 这也可能是Java成为当今流行平台的原因之一 。 在JDK 1.1 之前 , 以及在ODBC之前 (这已经很久了),很难想象有任…

python之requests

转载:https://www.cnblogs.com/zhangxinqi/p/9201594.html 阅读目录 1、requests简介2、requests的安装3、requests请求4、请求响应5、requests异常处理6、cookies7、请求会话(Session)8、SSL证书验证9、代理设置10、身份认证11、编码12、其他说明1、requests简介 requests是通…

php如何清理网站缓存,php怎么清除opcache缓存

php清除opcache缓存的方法:1、开发环境中修改php.ini文件,将“opcache.revalidate_freq”的值改为1;2、在线上环境中,可以在PHP文件中执行“opcache_reset();”代码,重启web服务器。本教程操作环境:windows…

ActiveMQ中的温度,存储和内存使用百分比

为了有效使用ActiveMQ,了解ActiveMQ如何管理内存和磁盘资源以处理非持久性消息和持久性消息非常重要。 ActiveMQ具有三个关键参数,需要对其进行检查。 临时使用百分比 这是已用于假脱机非持久消息的已分配磁盘存储的百分比 非持久性消息是无法在代理重…

Python 爬虫之 Scrapy 分布式原理以及部署

Scrapy分布式原理 关于Scrapy工作流程 Scrapy单机架构 上图的架构其实就是一种单机架构,只在本机维护一个爬取队列,Scheduler进行调度,而要实现多态服务器共同爬取数据关键就是共享爬取队列。 分布式架构 我将上图进行再次更改 这里重要的就是…

Apache Camel中的断路器模式

骆驼通常在分布式环境中用于访问远程资源。 远程服务可能由于各种原因和期间而失败。 对于短时间后暂时不可用且可恢复的服务,重试策略可能会有所帮助。 但是某些服务可能会失败或挂起更长时间,从而使调用应用程序无响应且速度缓慢。 防止级联故障和关键…

深入学习决策树算法原理

分类技术(或分类法)是一种根据输入数据建立分类模型的系统方法,分类法的例子包括决策分类法,基于规则的分类法,神经网络,支持向量机和朴素贝叶斯分类法。这些技术都使用一种学习算法(learning a…

Java 8 Friday Goodies:精益并发

在Data Geekery ,我们喜欢Java。 而且,由于我们真的很喜欢jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 我们已经写了一些关于Java 8好东西的博客 ,现在我们觉得是时候开始一个新的博客系列了…

Floyd最短路(带路径输出)

摘要(以下内容来自百度) Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。 该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特弗洛伊德命名。 简介编辑 在…

CSS 小结笔记之清除浮动

浮动是一个非常好用的属性&#xff0c;但是有时会出现一些问题&#xff0c;需要进行清除浮动。例如 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wi…

路由与交换--交换机常用配置及其实验案例

1 交换机常用配置命令 1.1 配置主机名与口令 Switch>enable Switch#config t Switch(config)#hostname SA SA(config)#enable password cisco&#xff08;明文&#xff09; SA(config)#enable secret cisco&#xff08;暗文&#xff09; SA(config)#exit SA#show running-co…

linux自动启动network服务,Windows/Linux 创建开机启动服务

系统服务是一种应用程序类型&#xff0c;它在后台运行。服务应用程序通常可以在本地和通过网络为用户提供一些功能。有些软件无需安装解压就能使用&#xff0c;或者在安装时未向系统注册服务。如果我们需要开机启动&#xff0c;需要手动创建服务。Windows系统篇相对于在注册表中…

Xshell 基本使用方式 (1) -- 使用Xshell 连接 VMware下的linux系统

在VMware的虚拟机设置下的网络适配器设置成桥接模式&#xff0c;点击确定。 在终端中输入ifconfig命令查看IP 打开Xshell 新建会话 输入刚刚获取的IP地址&#xff0c;我的是219.219.198.225 如果点击右侧的用户身份验证 输入你的linux登录用户名以及密码 点击连接 可以看到已经…

django01

Django的下载与基本命令: 1、下载Django&#xff1a; pip3 install django 2、创建一个django project django-admin.py startproject mysite manage.py ----- Django项目里面的工具&#xff0c;通过它可以调用django shell和数据库等。    settings.py ---- 包含了项目的…

如何在linux环境下安装kvm,如何在Linux发行版上安装和配置KVM和Open vSwitch?

在如今多租户模式的数据中心环境下&#xff0c;虚拟化技术正从传统的基于虚拟机管理程序的服务器虚拟化&#xff0c;扩展到网络虚拟化。在这种环境下&#xff0c;基于软件的虚拟交换机通常连同虚拟机管理程序一起部署在服务器上&#xff0c;串联起了不同虚拟机之间传送的流量。…

hanlp中的N最短路径分词

N-最短路径 是中科院分词工具NLPIR进行分词用到的一个重要算法&#xff0c;张华平、刘群老师在论文《基于N-最短路径方法的中文词语粗分模型》中做了比较详细的介绍。该算法算法基本思想很简单&#xff0c;就是给定一待处理字串&#xff0c;根据词典&#xff0c;找出词典中所有…