当前位置: 首页 > news >正文

linux 内存屏障(barrier)分析

谈起内存屏障,大家感觉这个"玩意儿"很虚,不太实际,但是内核代码中又广泛地可以看到起身影。内存屏障,英文barrier,这个"玩意儿"它还不太好去定义它。barrier,中文翻译为栅栏,栅栏大家都见过,现实生活中就是防止他人或者动物非法闯入而用来进行隔离用的工具。再进一步,既然是防止闯入,那就是要保护栅栏内的东西。所以在linux 内核中,内存屏障用于保护内存的访问。

1、什么需要保护

下面来谈谈内存屏障到底保护什么。

比如cpu0执行 a = 1 这条指令时,假设a所在cache line已经在cpu1的 L1 cache中,cpu0 先要获取a所在的cache line到cpu0的L1cache中,由于是写操作,需要改写a的值,需要再总线上发送invalid消息让其他cpu使无效其cache中a的值,等待其他cpu应答后,cpu0才能改写a的值,这样才能保证cache一致性。

 等待其他cpu上使无效消息的应答期间造成了cpu0的无效等待,浪费时间。于是cpu设计者开始修改CPU设计,出现了使无效队列以及write buffer这些内部部件用来加速cpu的执行。具体内容读者可以查阅其他文章。

提升CPU执行效率(硬件层面)和编译器的优化使得指令重排序(软件层面)给程序员带来了负担,需要程序去进行进行内存访问顺序的维护及保序。

2、ARM提供的指令

ARM提供了如下指令来进行内存屏障的处理:

DMB:Data Memory Barrier,数据存储屏障

DSB:Date Synchronization Barrier,数据同步屏障

ISB:Instruction Synchronization Barrier,指令同步屏障

DMB和DSB的一个本质区别,DMB针对的是memory的load/store之间;DSB强调的是同类或不同类事物的先后完成。

Data Memory Barrier (DMB) ensures that all explicit memory accesses that appear in program order before the DMB instruction are observed

before any explicit memory accesses that appear in program order after the DMB instruction.

数据内存屏障(DMB)确保DMB指令之前的所有显式内存访问在DMB指令开始之后的任何显式内存访问之前被观察到。且DMB指令不影响处理上执行的任何其他指令的顺序。

Data Synchronization Barrier (DSB),No instruction in program order after this instruction executes until this instruction completes.

数据同步屏障(DSB)完成后,其后面的指令才可执行。可见DSB影响了其他指令的执行。

Instruction Synchronization Barrier (ISB) flushes the pipeline in the processor, so that all instructions following the ISB are fetched from cache or memory,

after the instruction has been completed.

指令同步屏障(ISB)冲刷处理器中的流水线,以便在ISB完成后,从缓存或内存中提取ISB之后的所有指令。可见ISB严重影响后续指令的执行。

3、linux内核实现

arch/arm/include/asm/barrier.h/*isb,dsb,dmb汇编指令*/
#define isb(option) __asm__ __volatile__ ("isb " #option : : : "memory")
#define dsb(option) __asm__ __volatile__ ("dsb " #option : : : "memory")
#define dmb(option) __asm__ __volatile__ ("dmb " #option : : : "memory")/*barrier:编译优化屏障,阻止编译器为了性能优化而进行指令重排*/
#define barrier() __asm__ __volatile__("": : :"memory")/*内存屏障(包括读和写),用于SMP和UP*/
#define mb()		do { dsb(); outer_sync(); } while (0)
/*读内存屏障,用于SMP和UP*/
#define rmb()		dsb()
/*写内存屏障,用于SMP和UP*/
#define wmb()		do { dsb(st); outer_sync(); } while (0)/*osh:outer shareable domain*/
#define dma_rmb()	dmb(osh)
#define dma_wmb()	dmb(oshst)/*用于SMP场合的内存屏障。*/
/*ish:inner shareable domain,在ish范围内客观测到结果*/
#define smp_mb()	dmb(ish)
/*用于SMP场合的读内存屏障*/
#define smp_rmb()	smp_mb()
/*用于SMP场合的写内存屏障*/
/*waits only for stores to complete, and only to the inner shareable domain.*/
#define smp_wmb()	dmb(ishst)

相关文章:

linux 内存屏障(barrier)分析

谈起内存屏障,大家感觉这个"玩意儿"很虚,不太实际,但是内核代码中又广泛地可以看到起身影。内存屏障,英文barrier,这个"玩意儿"它还不太好去定义它。barrier,中文翻译为栅栏,栅栏大家都见过,现实生活中就是防止他人或者动物非法闯入而用来进行隔…...

【人工智能】Transformers之Pipeline(十九):文生文(text2text-generation)

目录 一、引言 二、文生文(text2text-generation) 2.1 概述 2.2 Flan-T5: One Model for ALL Tasks 2.3 pipeline参数 2.3.1 pipeline对象实例化参数 2.3.2 pipeline对象使用参数 ​​​​​​​ 2.3.3 pipeline返回参数 ​​​​​​​​​​​…...

如何使用ssm实现基于VUE的儿童教育网站的设计与实现+vue

TOC ssm676基于VUE的儿童教育网站的设计与实现vue 第一章 课题背景及研究内容 1.1 课题背景 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全…...

MODBUS TCP 转 CANOpen

产品概述 SG-TCP-COE-210 网关可以实现将 CANOpen 接口设备连接到 MODBUS TCP 网络中。用户不需要了解具体的 CANOpen 和 Modbus TCP 协议即可实现将CANOpen 设备挂载到 MODBUS TCP 接口的 PLC 上,并和 CANOpen 设备进行数据交互。 产品特点 &#xf…...

vue2+elementUI实现handleSelectionChange批量删除-前后端

功能需求&#xff1a;实现选中一个或多个执行批量删除操作 在elementUI官网选择一个表格样式模板&#xff0c;Element - The worlds most popular Vue UI framework 这里采用的是 将代码复制到前端&#xff0c;这里是index.vue <template><el-button type"dang…...

LLMs之OCR:llm_aided_ocr(基于LLM辅助的OCR项目)的简介、安装和使用方法、案例应用之详细攻略

LLMs之OCR&#xff1a;llm_aided_ocr(基于LLM辅助的OCR项目)的简介、安装和使用方法、案例应用之详细攻略 目录 llm_aided_ocr的简介 1、特性 2、详细技术概览 PDF处理和OCR PDF到图像转换 OCR处理 文本处理流程 分块创建 错误校正与格式化 重复内容移除 标题和页码…...

低代码平台后端搭建-阶段完结

前言 最近又要开始为跳槽做准备了&#xff0c;发现还是写博客学的效率高点&#xff0c;在总结其他技术栈之前准备先把这个专题小完结一波。在这一篇中我又试着添加了一些实际项目中可能会用到的功能点&#xff0c;用来验证这个平台的扩展性&#xff0c;以及总结一些学过的知识。…...

暑假考研集训营游记

文章目录 摘要&#xff1a;1.对各大辅导机构考研封闭集训营的一些个人看法&#xff1a;2.对于考研原因一些感想&#xff1a;结语 摘要&#xff1a; Ashy在暑假的时候参加了所在辅导班的为期一个月的考研封闭集训营&#xff0c;有了一些全新的感悟&#xff0c;略作记录。 1.对…...

C#中的报文(Message)

在C#中&#xff0c;报文&#xff08;Message&#xff09;通常是指在网络通信中交换的数据单元。报文可以由多种不同的组成部分构成&#xff0c;具体取决于通信协议和应用场景。 以下是一些常见的报文组成部分&#xff1a; 头部&#xff08;Header&#xff09;&#xff1a;包含…...

Python知识点:如何使用Python与Java进行互操作(Jython)

开篇&#xff0c;先说一个好消息&#xff0c;截止到2025年1月1日前&#xff0c;翻到文末找到我&#xff0c;赠送定制版的开题报告和任务书&#xff0c;先到先得&#xff01;过期不候&#xff01; Jython 是一种完全兼容 Java 的 Python 实现&#xff0c;它将 Python 代码编译成…...

ffmpeg解封装解码

文章目录 封装和解封装封装解封装 相关接口解封装的流程图关于AVPacket的解释如何区分不同的码流&#xff0c;视频流&#xff0c;音频流&#xff1f;第一种方式av_find_best_stream第二种方式 通过遍历流 代码 封装和解封装 封装 是把音频流 &#xff0c;视频流&#xff0c;字…...

golang学习笔记10-循环结构

注&#xff1a;本人已有C&#xff0c;C,Python基础&#xff0c;只写本人认为的重点。 go的循环只有for循环&#xff0c;但有多个语法&#xff0c;可以实现C/C中的while和do while。当然&#xff0c;for循环也有break和continue&#xff0c;这点和C/C相同。 语法1&#xff1a; f…...

Java高级编程——泛型(泛型类、泛型接口、泛型方法,完成详解,并附有案例+代码)

文章目录 泛型21.1 概述21.2 泛型类21.3 泛型方法21.4 泛型接口 泛型 21.1 概述 JDK5中引入的特性&#xff0c;在编译阶段约束操作的数据类型&#xff0c;并进行检查 泛型格式&#xff1a;<数据类型> 泛型只能支持引用数据类型&#xff0c;如果写基本数据类型需要写对…...

GPU硬件如何实现光栅化?

版权声明 本文为“优梦创客”原创文章&#xff0c;您可以自由转载&#xff0c;但必须加入完整的版权声明文章内容不得删减、修改、演绎本文视频版本&#xff1a;见文末 引言 大家好&#xff0c;我是老雷&#xff0c;今天我想从GPU硬件原理出发&#xff0c;给大家分享在图形渲…...

Python写入文件内容:从入门到精通

在日常编程工作中&#xff0c;我们常常会遇到需要将数据保存至磁盘的需求。无论是日志记录、配置文件管理还是数据持久化&#xff0c;掌握如何有效地使用Python来写入文件内容都是必不可少的一项技能。本文将从基础语法开始&#xff0c;逐步深入探讨Python中写入文件内容的各种…...

相亲交易系统源码详解与开发指南

随着互联网技术的发展&#xff0c;越来越多的传统行业开始寻求线上转型&#xff0c;其中就包括婚恋服务。传统的相亲方式已经不能满足现代人快节奏的生活需求&#xff0c;因此&#xff0c;开发一款基于Web的相亲交易系统显得尤为重要开发者h17711347205。本文将详细介绍如何使用…...

Golang | Leetcode Golang题解之第413题等差数列划分

题目&#xff1a; 题解&#xff1a; func numberOfArithmeticSlices(nums []int) (ans int) {n : len(nums)if n 1 {return}d, t : nums[0]-nums[1], 0// 因为等差数列的长度至少为 3&#xff0c;所以可以从 i2 开始枚举for i : 2; i < n; i {if nums[i-1]-nums[i] d {t}…...

汽车总线之----FlexRay总线

Introduction 随着汽车智能化发展&#xff0c;车辆开发的ECU数量不断增加&#xff0c;人们对汽车系统的各个性能方面提出了更高的需求&#xff0c;比如更多的数据交互&#xff0c;更高的传输带宽等。现如今人们广泛接受电子功能来提高驾驶安全性&#xff0c;像ABS防抱死系统&a…...

前端代替后端做分页操作

如果后端没有分页api&#xff0c;前端如何做分页一、使用computed 这个变量应该是计算之后的值&#xff0c;是一个状态管理变量&#xff0c;跟onMounted类似import {computed} from vue // 定义ref储存rolelist&#xff0c;这里是原始数据 const roleList ref([])// 定义页码…...

L3 逻辑回归

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 在周将使用 LogisticRegression 函数对经典的鸢尾花 (Iris) 数据集进行分类。将详细介绍逻辑回归的数学原理。 1. 逻辑回归的数学原理 逻辑回归是一种线性分…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...