JJJ:static_branch_unlikely和 static_branch_likely

内核static_branch_likely、likely及inline相关优化实验 static_branch_likely,static_branch_unlikely,likely,unlikely,分支预测,inline,icache 阅读详情

`static_branch_unlikely 是 Linux 内核中用于优化分支预测的一个宏,它与静态键(static key)机制结合使用,以提高代码性能。

这个宏主要用于条件编译和运行时条件检查的优化,特别是在内核特性或选项很少被启用或禁用的情况下。

static_branch_unlikely 宏用于告诉编译器某个条件分支在大多数情况下不会发生(即不太可能为真)。这有助于编译器优化代码生成,使得更常见的代码路径保持直线执行,减少分支预测失败的概率,从而提高性能。

#include <linux/static_key.h>

static struct static_key my_static_key = STATIC_KEY_INIT;

void some_function(void) {
    if (static_branch_unlikely(&my_static_key)) {
        // 很少执行的代码路径
        do_something_rare();
    } else {
        // 常见的代码路径
        do_something_common();
    }
}

STATIC_KEY_INIT 初始化一个静态键,默认是禁用状态。
static_branch_unlikely(&my_static_key) 表示编译器应该假设这个条件分支不太可能为真。
如果静态键被启用(通过 static_branch_enable(&my_static_key)),则会执行 do_something_rare();否则执行 do_something_common()。

内核执行时动态的vmlinux的反汇编解析方法及static_branch_likely机制 执行期间的vmlinux的反汇编方法,static_branch_likely机制,local_clock_noinstr,jump_label 阅读详情

相关推荐

Dataset - DeepFashion 服装数据集

Dataset - DeepFashion 服装数据集 [Dataset - DeepFashion] [Project - DeepFashion] 1. 服装类别和属性预测集 [Category - Attribute 下载] [百度网盘] 289,222 张服装图片 clothes images; 50 个服装类别 clothing categories 1,000 ...

长风破浪会有时,直挂云帆济沧海 2万+

linux内核静态static,Linux内核中的static-key机制

# Linux内核中的static-key机制背景在移植某个TP时,发现频繁操作屏幕会导致i2c总线死掉。在跟踪代码的时候,我发现了这个static-key。因此,学习一下这块的知识。reference:介绍内核的static-key用来优化if-else频繁判断的问题.使用#define DEFINE_STATIC_KEY_FALSE(name) \struct static_key_fa...

weixin_31211821的博客 912

jump label

这段代码的反汇编如下所示 static inline bool test_idle_cores(int cpu, bool def) { struct sched_domain_shared *sds; if (static_branch_unlikely(&sched_smt_present)) { sds = rcu_dereference(per_cpu(sd_llc_shared, cpu)); .

jason的笔记 965

Python在Windows环境下驱动乐视三合一摄像头的深度图像处理实践

本文详细介绍了在Windows系统下,使用Python驱动乐视三合一摄像头进行深度图像处理的完整实践流程。从环境配置、驱动安装、OpenNI与OpenCV库的部署,到深度与彩色数据流的读取、可视化、三维点云转换以及背景移除等应用开发,为开发者提供了从零开始掌握深度摄像头编程的实战指南。

gitlab7runner的博客 231

企业级AI项目落地实战指南

企业级 AI 项目落地需构建“分阶段实施 + 多维度风控”的双轮驱动体系:实施端通过 POC 验证技术可行性、试点建立评估标准、规模化实现价值复制,各阶段需结合行业案例(如东阳光药、旺盈集团)提炼可复用经验;风险端则需覆盖技术(数据安全、模型稳定性)、合规(全球监管动态)、组织(人才与文化)维度,通过工具化框架(AI TRISM)与案例策略(邮储银行可解释性设计、拓斯达培训体系)实现风险可控。最终通过“场景聚焦 - 合规嵌入 - 持续优化”的循环机制,实现 AI 技术从“试点成功”到“全面价值创造”的跨越。

2509_93209761的博客 1436

linux DO_ONCE、Static Keys、jump label和IPI

本文基于linux4.4 问题的来源: 研究的起始来源与发现linux4.4内核在x86机器上text_poke_bp函数会向每个在线cpu发送IPI,执行do_sync_core动作。 虽然do_sync_core只是在每个cpu上执行一下简单的CPUID指令,但毕竟会触发中断,打断当前进程,对系统确定性造成影响。 下面主要分析下这个IPI的来龙去脉。 一种分支判断优化方法: 要说明...

wdjjwb的专栏 1589

069、自动曝光(AE)测光策略:全局/中心/点测光与曝光时间增益分配

本文深入探讨了自动曝光(AE)测光策略的技术细节与实际应用。作者通过多个真实案例(手机前置摄像头、车载ADAS、安防监控等)分析了全局测光、中心测光和点测光的优缺点,指出不同场景应采用不同策略。重点剖析了曝光时间与增益分配的"跷跷板效应",提出要根据传感器特性选择最优分配方案。文章强调测光策略应动态调整,并给出5条实用建议:结合场景切换测光模式、关注传感器增益拐点、点测光需防抖处理、全局测光不宜迷信、调试要观察亮度直方图。最后指出AE调试需要结合具体硬件特性进行实测优化,没有通用解决方案。

zzfmlxs的博客 100

Linux 内核中的 static_key 机制

目录   问题来源:恶意程序检测 DO_ONCE函数解析 STATIC KEYS GOTO JUMP TABLE __do_once_done CONFIG  问题解决: 问题来源:恶意程序检测 最近,主要由于在研讨一些关于LINUX被恶意程序ROOT后,可能会被修改代码段中的数据。为了防止代码段被修改,采用几种特殊的机制来保护代码段的数据不被篡改,当有恶意程序试图修改代码段...

2434

SSE 传输过程中,丢失空格和回车符,怎么解决?

Server - Sent Events(SSE)即服务器发送事件,是 HTML5 中的一项 Web API,用于实现服务器向客户端浏览器推送实时数据的功能。

933

25、格式化字符串攻击全解析

本文深入解析了格式化字符串攻击的原理与利用方式,涵盖缓冲区溢出与格式化字符串漏洞的区别,详细介绍了printf函数的工作机制、常见格式化说明符及其安全隐患。文章分析了三类典型编程错误导致的漏洞,并展示了如何通过恶意格式化字符串实现拒绝服务、内存读取和写入攻击。同时,提供了有效的防御措施,包括输入验证、使用安全函数、避免直接使用用户输入作为格式化字符串以及启用编译器安全选项,帮助开发者防范此类高危漏洞。

beer8的博客 83

linux内核源码分析之伙伴系统(一)

目录 一、重要结构体 二、数据结构之间的关系 1、分配数量 2、区域类型 3,备用区域列表 4、区域水位 5、min_free_kbytes 三、分配页面 1、ac参数获取值 2,快速分配 3,慢速分配 一、重要结构体 页 (page) 一个 page 结构表示一个物理内存页面。 区(zone) 因为硬件限制,Linux内核不能把所有的物理内存页统一对待,把属性相同的物理内存页面。归结到了一个区中。 节点 (pglist_data)...

2480

《Unity DOTS之ECS从入门到不香》(1)基本概念

文章目录一、什么是DOTS?二、什么是ECS?三、Hello World 一、什么是DOTS? Data Oriented Tech Stack(DOTS)是unity推出的多线程面向数据的技术堆栈 。它是一套高性能解决方案,包含三个部分: 1.ECS:ECS是一种有别于面向对象的编程模式,是面向CPU Cache友好的编程模式。要求代码都要按照 实体+组件+系统 的框架构建。官方链接 2.JobSystem:JobSystem是unity推出的一套先进的多线程任务管理系统,结合ECS可以获得最佳性能。当然

Cxihu田树东的游戏开发博客 2731

Linux Static Keys和jump label机制

Linux Static Keys和jump label机制简介

小立仔 2117

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

static-key机制

内核的static-key用来优化if-else频繁判断的问题. 如何使用: #define DEFINE_STATIC_KEY_FALSE(name)    \     struct static_key_false name = STATIC_KEY_FALSE_INIT 一般使用DEFINE_STATIC_KEY_FALSE 定义条件不成立的case,用DECLARE_STATIC_

jason的笔记 4553

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

linux 内核 static-key机制分析

地址4字节对齐,意味着地址的低2位总是为0,正是利用这一点,struct static_key::type用低位的2位来存储相关struct jump_entry(即static_key::entries指向的struct jump_entry)的类型。当arch_static_branch/arch_static_branch_jump()函数被编译时,内嵌汇编中1:标签处的内容为nop指令或者b指令在内核的代码段中,内核加载时,其被加载到内存中的某个地址上。

Amelio Ming 1328

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Linux网络详解:链路层

内核协议栈中链路层的处理主要位于linux内核中的./net/bridge/中。数据包在链路层的流转如下图所示:在进行时间戳处理之后,紧接着就是RPS(Receive Packet Steering)的处理,它主要用于从网卡收上协议栈的包交由指定的CPU处理,可以充分利用多核性能。

weixin_58966834的博客 1904

linux内核协议栈接收数据流程(一)

linux网络接收数据流程的第一站——网卡驱动

krokodil98的博客 2220

static_branch_likely 原理及用法(完全剖析)

看irq-gic-v3.c时,发现中断回调中有static_branch_likely 这么一个函数。看起来是为了减少cpu 分支预测失败带来的巨大代价而做的优化。具体原理还没细看。 内核源码中这里有个文档介绍 kernel/Documentation/static-keys.txt。 ...

weixin_43512663的博客 2464

内核的static-key机制

内核的static-key

phenix_lord的专栏 4592

深入Linux内核(进程篇)—CFS调度

CFS

liyuewuwunaile的博客 2425

Linux schedule 2、调度算法

2、调度算法linux进程一般分成了实时进程(RT)和普通进程,linux使用sched_class结构来管理不同类型进程的调度算法:rt_sched_class负责实时类进程(SCHED_FIFO/SCHED_RR)的调度,fair_sched_class负责普通进程(SCHED_NORMAL)的调度,还有idle_sched_class(SCHED_IDLE)、dl_sched_class(SC

pwl999的博客 1万+

内核的likely和unlikely

1. 概念 指令周期是指执行一条指令所需要的时间,一般由若干个机器周期组成,是从取指令、分析指令到指令执行完所需的全部。 预取指令具体方法就是在不命中时,当数据从主存储器中取出送往CPU的同时,把主存储器相邻几个单元中的数据(称为一个数据块)都取出来送入Cache中。预取指令可以更好的利用 cpu资源。简单说就是从内存取指令很慢, cpu要等待这个过程。如果能提前预测可能执行的指令,就提前从内...

To_run_away的博客 1674

详解likely和unlikely函数

内核源码:linux-2.6.38.8.tar.bz2     参考文档:http://gcc.gnu.org/onlinedocs/gcc-4.6.2/gcc/Other-Builtins.html#Other-Builtins        在Linux内核中likely和unlikely函数有两种(只能两者选一)实现方式,它们的实现原理稍有不同,但作用是相同的,下面将结合linux-2

tanglinux 3万+
上一篇: JJJ:linux等待队列用法 init_waitqueue_entry
下一篇: JJJ:per-cpu变量
你板子冒烟了
博客等级 码龄8年 1278粉丝 582原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值