(N)UMA 模型中的内存组织------《深入Linux内核架构》笔记

【BIOS/UEFI硬件知识储备】内存——UMA和NUMA两种内存访问方式 根据处理器对内存的访问方式,将共享存储器方式的分为两大类,即UMA(Uniform Memory Access,统一内存访问)和NUMA(Non Uniform Memory Access,非统一内存访问。 阅读详情

UMA(一致内存访问,uniformmemory access): 计算将内存以连续的方式组织起来。SMP中每个cpu访问各内存区具有一样的速度

NUMA(非一致内存访问,non-uniformmemory access):SMP中的各个cpu都有本地的内存,可支持快速访问。各个cpu之间通过总线连接,对其它cpu的内存的访问将会慢于对自己内存的访问。结构如下图:

在内核中内存划分为节点,每个节点关联到一个cpu,在内核中用pg_data_t表示。


各个节点进一步划分为域,在内核中用structzone来表示。对于x86来说,总共有ZONE_DMA,ZONE_NORMAL,ZONE_HIGMENT三个域实例。ZONE_DMA负责对负责分配用于DMA操作的内存,ZONE_NORMAL负责分配可以直接映射到内核段的内存,ZONE_HIGMENT负责分配超出内核段的物理内存(应该是指另外的3GB内存)。

注意:内存域这个概念是对于物理内存而言的,而不是虚拟内存


每个域中会包含一个structfree_area成员,该成员用于实现伙伴系统,管理该区域中的空闲内存页。


页在内核中对应的结构体为structpage,该结构体采用union语法来减少结构体的大小。Page中的mapping指定了页帧所在的地址空间,virtual用于存储该页的虚拟地址,在x86体系中virtual成员是没有的。  


上图展示了节点,域,页之间的关系。这里再对每个概念所涉及功能进一步阐述(这里只是简单介绍部分功能,详细信息请参考《深入linux内核架构》3.2节):


//节点(简化版)
typedef struct pglist_data {
	struct zone node_zones[MAX_NR_ZONES];//指明该节点下包含有多少个域
	//指向page实例数组的指针,用于描述节点的所有物理内存页,它包含了节点中所有内存域的页
	struct page *node_mem_map;
	//备用节点的内存域的链表,用于在NUMA中,该节点无法提供内存,需要到其它的节点分配
	struct zonelist node_zonelists[MAX_ZONELISTS];
	struct bootmem_data *bdata;//用于为分配在系统初始化之前所需要的内存?
}pg_data_t;


//域(简化版,并没有考虑NUMA)
struct zone {
	unsigned long watermark[NR_WMARK];//系统在分配页之后,需要保证剩余下了的页的数量大于水印
	//当空闲页数低于该值时,读取空闲页将会导致附加的操作被执行,而这一附加的操作是为了躲避能让水印被违反的per-cpucounter drift。
	unsigned long percpu_drift_mark;
	//分别为各个内存域指定若干的保留页,用于系统的紧急内存分配
	unsigned long lowmem_reserve[MAX_NR_ZONES];
	struct per_cpu_pageset pageset[NR_CPUS];//用于存放冷热页,在高速缓存中的页称为热页。
	struct free_area free_area[MAX_ORDER];//用于实现伙伴系统
	spinlock_t lock;//自旋锁
	ZONE_PADDING(_pad1_)//用于实现将每个自旋锁放置于不同的缓存行,x86中每个缓存行为32Bytes
	//以下两个成员用于页面回收程序使用
	spinlock_t lru_lock;
	struct zone_lru {
		struct list_head list;
	}lru[NR_LRU_LISTS];//分别保存活动页和非活动页。页访问频繁及认为为活动页
	struct zone_reclaim_stat reclaim_stat;
	unsigned long pages_scanned; /* since last reclaim */
	unsigned long flags;// 用于描述内存域所处的状态,比如被LOCKED,所有的不能回收
	atomic_long_t vm_stat[NR_VM_ZONE_STAT_ITEMS];//用于保存对该域的统计数据,如活动页的数目
	ZONE_PADDING(_pad2_)
	//以下三个字段,实现进程等待某一页
	wait_queue_head_t *wait_table;
	unsigned long wait_table_hash_nr_entries;
	unsigned long wait_table_bits;
	struct pglist_data *zone_pgdat;//关联到自己所属的节点
	unsigned long zone_start_pfn;// 内存域的第一个页帧
	unsigned long spanned_pages; //总共的长度,包含空洞
	unsigned long present_pages; //内存数量(不包含空洞)
	const char *name;//域的名字,内核将很少使用的字段放到结构体的末尾
}____cacheline_internodealigned_in_smp;


//页(简化版),slab,freelist,inuse用于实现slub
struct page {
unsigned long flags	;//记录该页的状态信息,如该页是否被LOCKED,是否脏等等
	atomic_t_count;//使用计数,表示内核中引用该页的次数
	union {
		atomic_t_mapcount;// _mapcount为32位,表示在页表中多少项指向该页
		struct {
			u16inuse;//用于slub分配器,对象的数目,该成员不需要原子特性
			u16objects;
		};
	};
	union {
		struct {
			//一个指向私有数据的指针,根据页的用途,可以用不同的方式使用该指针
			unsigned longprivate;
			//指定页帧所在的地址空间,index是页帧在内部的偏移量。当mapping最低位置1时该指针并不指向address_space实例,而是指向anon_vma
			struct address_space *mapping;
		};
		struct kmem_cache *slab;//用于SLUB分配器,指向slab的指针
		struct page *first_page;//指向compoundpage中的首页
	};
	union {
		pgoff_tindex;/* Our offset within mapping. */
		void *freelist;/* SLUB: freelist req. slablock */
	};
	struct list_head lru;//用于将页按不同的类别分组,如活动和不活动
#ifdefined(WANT_PAGE_VIRTUAL)
	void*virtual;
//在x86体系中,没有该成员
#endif/*WANT_PAGE_VIRTUAL */



《深入Linux内核架构》笔记:(N)UMA模型中的内存组织     在Linux中,内核对一致和非一致内存访问系统使用相同的数据结构,因此针对各种不同形式的内存布局,各个算法几乎没有什么差别。在UMA系统上,只使用一个NUMA结点来管理整个系统内存。    首先内在划分为结点。每个结点关联到系统中的一个处理器,在内核中表示为pg_data_t的结构。    各个结点又划分为内存域,是内存的进一步细分。例如,对可用于(ISA设备的)DMA操作的内存区是有限制的。只有前16M适用,还有一个高端内存区域无法直接映射。在二者之间是通用的“普通”内存区。因此一个结点最多有3个 阅读详情

相关推荐

深入Linux内核架构—内存管理(二)

一、(N)UMA 模型中的内存组织 Linux支持的各种不同体系结构在内存管理方面差别很大。由于内核的明智设计,以及某些情况下插入的兼容层,这些差别被隐藏起来了。按照先前讨论过的,一个主要的问题是页表中不同数目的间接层。另一个关键是NUMA和UMA系统的划分。 内核对一致和非一致内存访问系统使用相同的数据结构,针对各种不同形式的内存布局,各个算法几乎没有什么差别。在UMA系统上,只使用一个NU...

xiezhi123456的博客 367

【Linux内核架构】【(二)内存管理】(N)UMA模型中的内存组织(上)

介绍Linux内核内存管理中的内存域zone、内存结点pg_data_t、结点状态node_states

m0_45372381的博客 1853

基于UMa和RMa传播模型的5G覆盖性能研究

3GPP约定,5G NR所使用的频谱分成两个大的范围:FR1和FR2,一个是6 GHz频段,另一个是之前常说的毫米波高频段范围,而且5G NR物理层也根据这些范围定义了最大带宽及各类子载波间隔,在6 GHz频段,最大的带宽是100 MHz,而毫米波采用的最大带宽是400 MHz。本文通过对影响5G覆盖性能的场景因素和路径损耗进行研究,并采用UMa和RMa两种传播模型进行仿真分析,结合传播模型和链路预算表,得出3.5 GHz频段下5G系统的覆盖性能,希望对从事5G频段覆盖研究的学者有所帮助。

qq_61890005的博客 1712

UMA架构与NUMA架构

根据处理器对内存的访问方式将共享存储器方式的计算机系统分为两大类,即UMA(Uniform Memory Access,统一内存访问)架构和NUMA(Non Uniform Memory Access,非统一内存访问)架构。 UMA是对称多处理器计算机采用的存储器架构,因此对称多处理器系统有时也称为UMA架构系统。在对称多处理器架构下,系统中的每个处理器内核地位相同,其看到的存储器和共享硬件也都是相同的。在UMA架构的多处理器系统中,所有的处理器都访问一个统一的存储器空间,这些存储器往往以多通道的方式组织

weixin_41687819的博客 5357

GlobalPlatform Technology Secure Channel Protocol ‘03‘ 标准 - 安全通道协议简介

按照GlobalPlatform Technology Secure Channel Protocol '03' (SCP03)标准,描述了如何利用S-MAC,S-RMAC,S-ENC进行安全通信的过程。

mmmx777的专栏 6091

jmeter5.4.1 使用案例

jmeter主要用于接口压力测试,模拟海量请求并发访问接口 1.下载jmeter https://jmeter.apache.org/download_jmeter.cgi 2.启动jemter 双击即可 3.配置jmeter 1.先更改语言 2.创建线程组 配置线程执行规划 3.创建http请求默认值 4.创建http请求 5.创建http信息头管理器 指定 Content-Type:application/json 6.创建响应断言 7.创建察看结果数 直接点击 执行 按.

SpringHASh的博客 1221

linux内存管理基础知识-UMA/NUMA架构 与 FLATMEM/DISCONTIGMEM/SPARSEMEM模型

在我们理解了物理内存的 NUMA 架构,以及在 NUMA 架构下的内存分配策略之后,本小节笔者来为大家介绍下如何正确的利用 NUMA 提升我们应用程序的性能。前边我们介绍了这么多的理论知识,但是理论的东西总是很虚,正所谓眼见为实,大家一定想亲眼看一下 NUMA 架构在计算机中的具体表现形式,比如:在支持 NUMA 架构的机器上到底有多少个 NUMA 节点?每个 NUMA 节点包含哪些 CPU 核,具体是怎样的一个分布情况?前面也提到 CPU 在访问本地 NUMA 节点中的内存时,速度是最快的。

wwwlyj123321的博客 2434

用矿卡P104-100在PVE 8.0.4上跑Ollama:保姆级显卡直通与驱动安装避坑指南

本文详细介绍了如何在PVE 8.0.4环境下通过显卡直通技术,利用矿卡P104-100高效部署本地大模型Ollama的全流程。从硬件配置、BIOS设置到驱动安装和性能调优,提供了保姆级的避坑指南和实战解决方案,特别针对矿卡无显示输出的特殊性进行了优化。

weixin_33228769的博客 752

N)UMA 模型中的内存组织------《深入Linux内核架构》笔记

http://blog.youkuaiyun.com/daniel_ice/article/details/6833835 UMA(一致内存访问,uniformmemory access): 计算将内存以连续的方式组织起来。SMP中每个cpu访问各内存区具有一样的速度 NUMA(非一致内存访问,non-uniformmemory access):SMP中的各个cpu都有本地的内存,可支持快速访

djinglan的专栏 1942

Ubuntu 22.04 搭建 PX4 飞控系统完全指南:从仿真到硬件试飞

定义消息文件protobufuint64 timestamp # 时间戳float32 temperature # 温度float32 humidity # 湿度生成代码:bashPX4 在 Ubuntu 22.04 的搭建涉及环境配置、编译仿真、硬件连接等多环节,核心是理解 PX4 1.14 的新特性(uXRCE-DDS、动态控制分配)。通过本文指南,开发者可快速构建稳定的 PX4 开发环境,为无人机应用开发奠定基础。

zqmgx13291的博客 3039

蓝牙攻防实战:蓝牙技术详解

蓝牙作为轻量级、低功耗的无线通信技术,其设计兼顾了效率与灵活性,但也留下了诸多安全隐患。随着物联网设备的爆发式增长,蓝牙的攻击面也在不断扩大。理解其底层通信机制、协议栈结构以及配对加密逻辑,是提升无线安全防护能力的关键。

idlecloud0105的博客 739

【Linux内核架构】【(二)内存管理】(N)UMA模型中的内存组织(下)

介绍内存水印WaterMark、冷热页管理pageset[NR_CPUS]、页帧page

m0_45372381的博客 2224

0.1 ROCm rocr-libhsakmt实现深度剖析专栏介绍

本专栏深入解析AMD ROCm生态核心组件rocrruntime,从底层硬件交互到上层封装实现。重点剖析libhsakmt驱动层的七大核心模块设计,包括拓扑管理、队列调度、事件同步等关键机制;详解C++接口封装策略与工程实践,如资源管理、多线程优化等。通过"硬件-驱动-应用"全链路技术拆解,帮助开发者深入理解ROCm运行时机制,解决性能调优、调试等实际问题,为HPC/AI应用开发提供底层技术支撑。

图形/计算GPU的驱动与虚拟化技术分享园地 5979

【深入理解Linux内核架构】3.2 (N)UMA模型中的内存组织

  内核对一致和非一致内存访问系统使用相同的数据结构。在UMA系统上,只使用一个NUMA结点来管理整个系统内存。而内存管理的其他部分则相信他们是在处理一个伪NUMA系统。 3.2.1 概述   内存划分为结点。每个结点关联系统中的一个处理器,在内核中,使用pg_data_t的实例。   各个结点又划分为内存域,是内存的进一步细分。分为:normal、DMA、highmem 最多3个...

aiyuanu424665的博客 464

YOLOv8改进策略【Neck】| CGA Fusion:内容引导的注意力融合模块,空间权重引导的多模态特征自适应融合

本文记录的是利用CGA Fusion 模块改进 YOLOv8 的多模态融合部分。(Content-Guided Attention Fusion)通过内容引导注意力生成空间权重,引导高低层特征的自适应融合。本文利用模块,通过内容引导注意力生成空间权重,自适应地融合两个模态的特征,在特征融合阶段实现跨模态语义对齐与噪声抑制,增强对不同模态互补特征的利用能力,从而提升模型在多模态场景下的检测鲁棒性与准确性。DEA-Net: Single image dehazing based on detail-enhanc

Limiiiing的博客 282

25、BDS-3卫星信号性能与PPP-B2b增强消息完整性分析

本文对BDS-3卫星信号性能及PPP-B2b增强消息的完整性进行了系统分析。评估了MEO、IGSO和GEO卫星的轨道与时钟精度,得出BDS-3总体SISRE为0.25 m,系统完整性可覆盖99.999%的误差。分析表明SIS中断主要由时钟调整和轨道机动引起,个别卫星存在因境外监测受限导致的非计划中断。通过自研解码软件对PPP-B2b增强消息进行采集与解析,实验结果显示BDS-3和GPS的平均历元完整性率均高于98.55%,其中卫星掩码和时钟校正消息的完整性率超过99.8%。研究还发现IGSO卫星相比MEO卫

quiet的专栏 145

《深入linux内核架构》C3 内存管理--之1--内存模型

前言 本章篇幅过长,拆分几篇博文简述个人对Linux内核内存管理的理解。本博主要描述物理内存在系统的组织模型。 概述 我们或许已经知道,操作系统中的每个进程都分配有虚拟内存空间(虚拟地址空间),此虚拟内存空间由内核负责划分与运维,虚拟地址空间与物理内存间通过页表映射。Linux X86内核架构下通常是4G的虚拟地址空间,按照3:1进行划分,底部3G用于进程用户...

本博客纯属个人学习记载,不对外负责,若有错误,请批评指正 498

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

3.2 (N)UMA模型的内存组织

3.2 (N)UMA模型中的内存组织 Linux支持的各种不同体系结构在内存管理方面差别很大。 内核对一致和非一致内存访问系统使用相同的数据结构,因此针对各种不同形式的内存布局,各个算法几乎没有什么差别。3.2.1 概述 首先,内存划分为结点。每个节点关联到系统中的一个处理器,在内核中表示为pg_data_tr的实力。 各个节点又划分为内存域,是内存的进一步细

艾小小雨的博客 1472

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

物理内存组织结构

内存管理在内核中占据着举足轻重的地位,毕竟它是用来处理处理器和内存之间的协作的,而后两者都是计算机中最为重要的资源。内存管理的目标就是高效合理的使用物理内存,不造成浪费。 1. 体系结构 在计算机发展初期,如上图,CPU通过总线访问整个地址空间,这是一种简单经济的方式,可以尽可能使用内存。但是这个系统本身也存在伸缩性的问题,因为总线的宽度是有限的,这也限制了处理器的数量。如果添加CPU,会引起以下两个问题 CPU增加,每个节点的可用带宽会减少 CPU增加,总线长度会增加,进而增加了延迟 于.

不才的专栏 2672

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Linux内核 内存管理

一,概述 Linux内核一般将处理器的虚拟地址空间划分为两个部分。底部比较大的部分用于用户进程,顶部专用于内核。虽然(在两个用户进程之间的)上下文切换期间会改变下半部分,但是虚拟地址空间的内核部分总是保持不变。 有两种类型计算机,分别以不同的方法管理物理内存。 (1) UMA计算机 (一致内存访问,uniform memory access) 将可用内存以连续方式组织起来。SMP系统中的每个处理器访问各个内存区都是同样快。 (2) NUMA计算机(非一致性内存访问, non-uniform memo

fangwei1993的博客 551

Linux内存描述之内存页面page--Linux内存管理(四)

原文链接:https://blog.youkuaiyun.com/gatieme/article/details/52384636 日期 内核版本 架构 作者 GitHub 优快云 2016-09-01 Linux-4.7 X86 & arm gatieme LinuxDeviceDrivers Linux内存管理 1 前景回顾 1.1 UMA和NUMA两种模型 共享存储型多处理机有两种模型 均匀存储器存取(Uniform-Mem

weixin_39094034的博客 1103

Linux内存管理:内存描述之内存区域zone

目录 1 前景回顾 1.1 UMA和NUMA两种模型 1.2 (N)UMA模型中linux内存的机构 1.3 Linux如何描述物理内存 1.4 用pd_data_t描述内存节点node 1.5 今日内容(内存管理域zone) 2 为什么要将内存node分成不同的区域zone 3 内存管理区类型zone_type 3.1 内存区域类型zone_type 3.2 不同的内存区域的作用 3.3 典型架构(x86)上内存区域划分 4 管理区结构zone_t 4.1 struct zone

RToax 2488

Linux内存描述之概述--Linux内存管理(一)

1 前景回顾 前面我们讲到服务器体系(SMP, NUMA, MPP)与共享存储器架构(UMA和NUMA) 1.1 UMA和NUMA两种模型 共享存储型多处理机有两种模型 均匀存储器存取(Uniform-Memory-Access,简称UMA)模型,将可用内存以连续方式组织起来, 非均匀存储器存取(Nonuniform-Memory-Access,简称NUMA)模型 1.2 UMA模型 传...

~~ LINUX ~~ 432

epub 深入linux内核架构_深入Linux内核架构[Professional Linux Kernel Architecture]pdf

摘要众所周知,Linux操作系统的源代码复杂、文档少,对程序员的要求高,要想看懂这些代码并不是一件容易事。《深入Linux内核架构》结合内核版本2.6.24源代码中关键的部分。深入讨论Lirnux内核的概念、结构和实现。具体包括进程管理和调度、虚拟内存、进程间通信、设备驱动程序、虚拟文件系统、网络、时间管理、数据同步等。《深入Linux内核架构》引导你阅读内核源代码,熟悉Lirnux妍有的内在工作...

weixin_32227927的博客 737

Linux内存

UMA和NUMA模型: 均匀存储器存取(UMA):将多个处理器与一个集中的存储器和I/O总线相连,所有处理器只能访问同一个物理存储器,缺点是伸缩性有限。 NUMA:分布式存储器访问方式,处理器可以同时访问不同的存储器地址。NUMA模式下,处理器被划分成多个“节点”,每个节点都可以访问全部的系统物理存储器。内存被划分成多个区域(BANK,簇)。当前多数系统会把内存分割成2块区域,一块是专门给CP...

jansert的博客 1707
上一篇: java 读取图片的缩略图和dpi
下一篇: 3.4 初始化内存管理------《深入Linux内核架构》笔记
wong_daniel
博客等级 码龄19年 37粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值