linux内核numa简单的bitmap操作

Linux内核CPU状态管理:cpumask原理与应用实践 CPU状态管理是操作系统资源调度的核心技术,通过位图数据结构实现多核CPU的精确控制。cpumask作为Linux内核的关键组件,采用bitmap机制高效管理CPU核心的在线状态、任务亲和性等关键信息,其O(1)时间复杂度的位操作特性特别适合现代多核服务器环境。在BPF技术生态中,bpf_cpumask通过引用计数和RCU机制扩展了传统cpumask的能力,为网络监控、性能分析等场景提供安全高效的CPU资源管理方案。典型应用包括任务CPU亲和性设置、中断负载均衡以及BPF程序中的CPU监控,这些实践能显著提 阅读详情

nodemask_t存放的是有关节点的配置信息。
定义如下
typedef struct { DECLARE_BITMAP(bits, MAX_NUMNODES); } nodemask_t;
DECLARE_BITMAP
定义如下

#define DECLARE_BITMAP(name,bits) \
       unsigned long name[BITS_TO_LONGS(bits)]
-----------------------------------------------------------------------
MAX_NUMNODES NODES_SHIFT在numa.h的定义如下:

#ifdef CONFIG_NODES_SHIFT
#define NODES_SHIFT     CONFIG_NODES_SHIFT
#else
#define NODES_SHIFT     0
#endif

#define MAX_NUMNODES    (1 << NODES_SHIFT)

#define       NUMA_NO_NODE  (-1)

------------------------------------------------------------------------

那么在一个有numa系统的环境下代码展开


typedef struct { DECLARE_BITMAP(bits, MAX_NUMNODES); } nodemask_t;
| ->

typedef struct { DECLARE_BITMAP(bits, (1 << NODES_SHIFT)); } nodemask_t;
|->

CONFIG_NODES_SHIFT取决于内核编译时的值,如果没有定义便是0
那么便是
typedef struct { DECLARE_BITMAP(bits, (1 << 0)); } nodemask_t;
typedef struct { DECLARE_BITMAP(bits, (1 << CONFIG_NODES_SHIFT)); } nodemask_t;


其中BITS_TO_LONGS定义在
include/linux/bitops.h

#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
#define BITS_TO_LONGS(nr)   DIV_ROUND_UP(nr, BITS_PER_TYPE(long))


其目的就是求一个数是几个long的长度


#define DECLARE_BITMAP(name,bits) \
       unsigned long name[BITS_TO_LONGS(bits)]

name,保存位的 unsigned long 类型的数据保存在内存中的首地址,或者是bitmap的首地址

bits,我们要用到多少位,或者是bitmap中元素个数

所以
#define DECLARE_BITMAP(name,bits) \
       unsigned long name[BITS_TO_LONGS(bits)]

32位操作系统下
被解析成 DECLARE_BITMAP(name, bits)  == unsigned long name[(bits+31)/32]
64位操作系统下
被解析成 DECLARE_BITMAP(name, bits)  == unsigned long name[(bits+63)/64]

内核中bitmap的使用 bitmap用于实现bool的数组,标识一个事件发生没发生。可以理解为bitmap处理的是有没有的问题。bitmap将一片连续的空间作为一个数据类型,其中的成员都是1位,长度是bitmap的容量。 声明一个 bitmap DECLARE_BITMAP 宏 #define DECLARE_BITMAP(name,bits) \ unsigned long name[BITS_TO_LONGS(bits)] #define BITS_TO_LONGS(nr) DIV_ROUND_UP(... 阅读详情

相关推荐

libnuma详解(A NUMA API for LINUX)

白皮书 numa3手册 numa3手册 一、什么是NUMA 关于这个很多博客都有,基本都是这个白皮书的翻译或者扩充。 在传统的SMP(对称多处理)系统中,计算机有一个由所有cpu共享的内存控制器。当所有处理器同时访问内存时,这种单一内存连接常常成为瓶颈。对于具有更多cpu的大型系统,它也不能很好地扩展。由于这个原因,越来越多的现代系统正在使用CC/NUMA(缓存一致性/非一致性内存访问)架构。例如AMD* Opteron*、IBM* Power5*、HP* Superdome和SGI* Altix*。

叶子心情你不懂 1万+

内核中的位图介绍(DECLARE_BITMAP宏)

1、DECLARE_BITMAP宏定义 #define DIV_ROUND_UP(x,y) (((x) + ((y) - 1)) / (y)) //向上取整 #define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long)) #define DECLARE_BITMAP(name,bits) unsigned long name[BITS_TO_LONGS(bits)] (1)位图:用每一个bit来表示一个含义。比如你需要

weixin_42031299的博客 2362

Linux内核进程管理:SMP

周期性负载均衡:CPU对应的运行队列数据结构记录下一次周期性负载均衡时间,当超过这个时间点后,将触发SCHED_SOFIRQ软中断来进行负载均衡。在对称多处理器系统中,所有处理器的地位都是相同的,所有的资源,特别是存储器、中断及I/O空间,都具有相同的可访问性,消除结构上的障碍。周期性调用进程调度程序scheduler_tick()->trigger_load_balance()中,通过软中断触发负载均衡。进程A唤醒进程B时,try_to_wake_up()中会考虑进程B将在哪个CPU上运行;

m0_74282605的博客 929

linux安装numa库(包括libnuma.so和libnuma.so.1)

问题描述: 没有可用软件包 libnuma。 错误:无须任何处理 当在Linux系统中使用yum安装软件时提示 “没有可用软件包”时,代表在linux系统yum源中已经没有对应的安装包了,这时,我们需要安装EPEL。EPEL(Extra Packages for Enterprise Linux),企业版Linux额外包,RHEL分布非标准包的社区类库。安装如下: yum没有找到对应依赖包,更新epel第三方软件库,运行命令: yum install -y epel-release 此时安装完成后,记得

PiccoloYang的博客 1万+

Linux:积木:数据类型:DECLARE_BITMAP

按照long所占的内存,存放一个bitmap。比如下面这个cpu的cpumask。

mzhan017的博客 1306

105. replace( )函数

【目录】

weixin_63986098的博客 1万+

Linux中NUMA内存分配策略初始化以及相关函数的实现

该函数初始化 NUMA 内存策略子系统,创建必要的缓存,并为系统启动过程设置默认的内存分配策略该系统调用允许用户空间进程设置自己的 NUMA 内存分配策略,决定内存页面在哪个或哪些 NUMA 节点上分配int err;asmlinkage:指示编译器从堆栈中获取参数,而不是寄存器(系统调用约定)参数说明mode:内存策略类型(MPOL_BIND, MPOL_INTERLEAVE, MPOL_PREFERRED 等)nmask:用户空间传递的节点掩码位图指针maxnode:节点掩码的最大节点数。

weixin_51019352的博客 791

halcon3D 点云拟合球体

halon3D 点云拟合球面

weixin_43213429的博客 1639

numactl 设置 numa 内存分配规则

alloc_pages_current //mm/mempolicy.c ,根据memopolicy规则,分为alloc_page_interleave和__alloc_pages_nodemask。__alloc_pages_nodemask //最终也是__alloc_pages_nodemask。vma_replace_policy //替换vm_area_struct的mempolicy。

大隐隐于野 1934

(论文速读)PTV3: 更简单、更快速、更强大的3D点云处理新突破

该论文提出PointTransformerV3(PTv3),通过简化设计实现3D点云处理的效率突破。该研究摒弃复杂注意力机制,转而采用点云序列化和补丁注意力等高效方法,将感受野从16点扩展到1024点,在保持高精度的同时实现3倍速度提升和10倍内存优化。PTv3在超过20个室内外场景任务中取得SOTA结果,ScanNet语义分割达79.4%mIoU,Waymo检测提升3.3%APH。核心创新包括四种空间填充曲线序列化模式和xCPE位置编码,为3D感知的工业应用提供了高效解决方案。

LJ1147517021的博客 1376

【无人机设计与控制】基于PID控制的四旋翼无人机系统Matlab仿真

本文设计并仿真了基于PID控制的四旋翼无人机系统。首先,建立了四旋翼无人机的数学模型,涵盖了无人机的动力学和控制系统。通过PID控制器对四旋翼的姿态和位置进行控制,以实现其稳定飞行。使用MATLAB/Simulink对该系统进行仿真,验证了PID控制算法在四旋翼控制中的有效性。仿真结果表明,PID控制能够较好地调节四旋翼的飞行姿态,并有效抑制外部干扰,使得无人机能够保持平稳飞行。

2401_84610415的博客 1804

Linux内核swap map革新:新一代内存管理技术解析

内存管理是操作系统核心功能之一,其中交换空间(swap)机制通过将内存页换出到存储设备来扩展可用内存。传统swap map采用位图结构管理交换空间,但随着TB级交换设备和NVMe存储的普及,该设计面临内存开销大、锁争用严重等问题。Linux内核新一代交换架构通过分层数据结构、每CPU缓存和NUMA感知分配等创新,显著提升了并发性能和扩展性。在数据库、云计算等内存密集型场景中,新方案可降低83%的交换延迟,同时减少40%的内存开销。这些改进使Linux能更好地支持现代硬件特性,为持久内存和机器学习预测等未来发

weixin_30274627的博客 637

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的专栏 143

【Linux内核学习笔记一】内存管理-节点(node)

      本文用于学习和分享,参考了《深入理解linux内核》《深入理解linux虚拟内存管理》等书籍以及内存管理相关的博文。 1.UMA和NUMA两种模型 UMA:均匀存储器存取(Uniform-Memory-Access,简称UMA)模型 NUMA:非均匀存储器存取(Nonuniform-Memory-Access,简称NUMA)模型 2.簇       在NUMA体系结构中,内存被...

wyy4045的专栏 3209

笔试题-2023-紫光展锐-数字芯片设计【纯净题目版】

笔试题-2023-紫光展锐-数字芯片设计【纯净题目版】

w0shishabi的博客 2923

Vue + ECharts:从零构建智慧农业数据监控大屏(附完整源码)」 「超实用!一步步实现智慧农业大屏,完整代码+讲解」 「前端新手友好:Vue + ECharts 打造炫酷农业数据大屏」 「

Vue + ECharts:从零构建智慧农业数据监控大屏(附完整源码)」 「超实用!一步步实现智慧农业大屏,完整代码+讲解」 「前端新手友好:Vue + ECharts 打造炫酷农业数据大屏」 「前端可视化项目实战:智慧农业监控大屏开发详解」 「农作物可视化监控:用 Vue 和 ECharts 构建大屏应用」 「从零开始开发一个智慧农业数据大屏(代码+图表展示)」 「前端新手也能实现!智慧农业监控大屏开发教程」 「用 Vue 和 ECharts 搭建动态数据大屏:详细图文教程」 「学习前端大屏开发:

sky10100100的博客 1533

Linux 内核中断描述符 (irq_desc) 的初始化与动态分配机制详解

介绍了 irq_desc 的初始化流程及相关 API 的使用。在内核中,IRQ_BITMAP_BITS 决定了可用的中断号范围,根据配置不同可支持稀疏分配模式。静态和动态分配模式的 irq_desc 初始化略有不同,其中静态初始化在系统启动时完成,而动态分配则通过 irq_alloc_descs() 实现。此外,内核提供了诸如 irq_set_chip、irq_set_chip_data 等接口,用于配置中断描述符的硬件关联信息。本文也深入探讨了 early_irq_init 函数的执行过程。

caiji0169的博客 2301

用 MATLAB 实现鼻子和嘴的检测

为了方便起见,这里我们使用了 CascadeObjectDetector 中自带的 haarcascade_frontalface_alt2.xml 文件,该文件包含了多个包含鼻子和嘴的样本图像。其中 bbox 变量表示检测到的所有鼻子和嘴的边界框信息。在图像处理中,鼻子和嘴的检测是十分重要的一项任务。本文将介绍如何使用 MATLAB 实现鼻子和嘴的检测,并提供相应的源代码。然后,我们可以调用之前创建的 detector 对象来进行鼻子和嘴的检测。综上所述,我们可以使用以上代码实现鼻子和嘴的检测。

qq_39605374的博客 256

Linux中zonelist分配策略初始化

摘要:Linux内核通过build_all_zonelists()和build_zonelists()函数构建NUMA系统的内存区域分层结构。该系统采用空间分层设计(DMA/NORMAL/HIGHMEM)、拓扑感知分配(通过find_next_best_node考虑节点距离和负载)和动态负载均衡机制。代码首先为每个节点初始化zonelist,然后按NUMA距离排序节点,并为不同GFP标志类型构建对应的分配路径,实现高效的内存访问与利用平衡。这种分层智能回退机制确保了系统在NUMA架构下的最优性能表现。

weixin_51019352的博客 784

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Linux中的内存分配和释放之build_all_zonelists()函数分析

  void __init build_all_zonelists(void){     int i;     for(i = 0 ; i          build_zonelists(NODE_DATA(i));//NODE_DATA(i)宏定义可以找到i号内存node对应的discontig_node_data[i]     printk("Built %i zonelists/n",

satanwxd的专栏 5747

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Linux 2.6 调度系统分析

本文从 Linux 2.4 调度系统的缺陷入手,详细分析了 Linux 2.6 调度系统的原理和实现细节,并对与调度系统相关的负载平衡、NUMA 结构以及实时性能进行了分析和评价。 1. 前言 Linux 的市场非常广阔,从桌面工作站到低端服务器,它都是任何商用操作系统的有力竞争对手。目前,Linux 正全力进军嵌入式系统和高端服务器系统领域,但它的技术缺陷限制了它的竞争力

职场里拉开差距的不是知识,而是认知! 3167

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【内核】2.6 调度分析

转自:http://www.ibm.com/developerworks/cn/linux/kernel/l-kn26sch/index.html 1. 前言 Linux 的市场非常广阔,从桌面工作站到低端服务器,它都是任何商用操作系统的有力竞争对手。目前,Linux 正全力进军嵌入式系统和高端服务器系统领域,但它的技术缺陷限制了它的竞争力:缺乏对实时任务的支持,多处理机可扩展性差。在 2...

weixin_33964094的博客 124

Linux进程管理:(六)SMP负载均衡

在调度域标志位中,SD_SHARE_PKG_RESOURCE标志位用于描述高速缓存的共享属性。因此,

qq_58538265的博客 2152
上一篇: Linux启动时的页表映射
下一篇: 简单的Makefile编写
mtOS1573
博客等级 码龄15年 305粉丝 188原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值