1.likely && unlikely
分支声明
对于条件选择语句,gcc内建了一条指令用于优化,在一个条件经常出现,或者该条件很少出现的时候,编译器可以根据这条指令对条件分支选择进行优化。内核把这条指令封装成了宏,比如likely()和unlikely(),这样使用起来比较方便。例如,下面是一个条件选择语句:if (foo) { /* .. */}如果想要把这个选择标记成绝少发生的分支:/* 我们认为foo绝大多数时间都会为0.. */if (unlikely(foo)) { /* .. */}相反,如果我们想把一个分支标记为通常为真的选择:/* 我们认为foo通常都不会为0 */if(likely(foo)) { /* .. */}
需要注意的是:likely与unlikely并没有改变程序逻辑,仅仅是对分支预测提供一定的依据。
2.__read_mostly
__read_mostly是内核链接时使用的, 与体系结构的cache机制密切相关. 在linux kernel里定义在x86,
ia64, powerpc, parisc, s390, sh, sparc 体系结构的 asm/cache.h中:
#define __read_mostly __attribute__((__section__(".data.read_mostly")))
|
从定义的字面意思可以理解为将需要经常读取的数据链接进内核的 .data.read_mostly段. 在x86, ia64, powerpc, parisc, s390, sh, sparc 的链接脚本里(arch/xxx/kernel/vmlinux.lds.S)有关于 .data.read_mostly的定义, 就是指定 .data.read_mostly段的数据在内核加载时放到CPU的cache中.
在那些没有cache的体系结构上, __read_mostly被定义为空, 即:
分享到:
相关推荐
likely() 和 unlikely() 宏是 Linux 内核中定义的两个宏,用于提供编译器的分支预测信息,以优化代码。它们使用了 GCC 的内建函数 __builtin_expect,提供了一个简单的方式来告诉编译器如何优化代码。
在GNU C语言编程中,`likely()` 和 `unlikely()` 是两个宏定义,它们提供了编译器优化时的分支预测信息,用于指导编译器进行更有效的代码优化。在Linux内核代码中,这两个宏被广泛使用,特别是在条件语句中,比如在...
总的来说,`likely()`和`unlikely()`宏是GCC提供的一种手段,帮助开发者与编译器进行更紧密的合作,以优化代码的分支预测。然而,它们并非万能解决方案,正确使用需要对程序的行为有深入理解,并且应以实际性能测试...
粒子群优化(Particle Swarm Optimization, PSO),又称微粒群算法,是由J. Kennedy和R. C. Eberhart等于1995年开发的一种演化计算技术,来源于对一个简化社会模型的
- **分支预测统计**:通过监控 likely/unlikely 分支预测的命中率,可以优化代码以提高执行效率。 2. **使用 Ftrace** - **安装支持 Ftrace 的内核**:确保你的Linux内核版本高于2.6.28,并且在编译内核时启用 ...
可配置选项包括:C_arch RISC-V或MIPS ISAC_big_endian总线端C_mult_enable合成乘法单位C_branch_likely支持分支延迟时隙取消C_sign_extend支持符号扩展指令C_movn_movz支持条件移动指令C_ll_sc支持原子读 - 修改 - ...
这个文件可能是由用户“baijiahao”分享,并被其他用户如“likely8dt”和“peace6y8”标注,可能是为了讨论或者交流关于TCP/IP通信的基础知识。"添加simple"可能意味着这个压缩包包含了一个简化版的TCP实现,用于...
- **likely() 和 unlikely()**:这两个宏是编译器优化的工具,用于指导编译器进行分支预测,提高执行效率。 - **nmreq**:用于配置Netmap接口的请求结构体。 - **netmap_if**,**netmap_ring** 和 **netmap_slot*...
在本项目中,我们主要探讨的是使用Python编程语言构建一个网络爬虫,目的是抓取与农产品相关的数据,并对其进行处理和分析。"ncp爬虫4"这个标题暗示这是一个系列项目的第四部分,可能涵盖了一些进阶的爬虫技术或特定...
MIPS还提供了likely和non-likely分支,帮助优化器更好地预测分支行为。 在实际应用中,不同类型的程序对转移指令的使用频率有所不同。例如,SPEC CPU2000基准测试套件中的各种程序,如编译器、压缩工具和模拟器,...
在内核启动的第二个阶段`setup_arch`函数中,与体系结构相关的初始化工作被执行。对于UCLinux而言,这一步骤至关重要,因为它涉及到中断入口设置以及中断向量表的初始化。 1. **中断入口设置**: - 在`start_...
《Delphi 10.4 控件:深入理解与应用》 在软件开发领域,Delphi 作为一款高效且强大的集成开发环境(IDE),一直深受程序员喜爱。它以其高效的Object Pascal编程语言和丰富的VCL(Visual Component Library)控件库...
Data Structures & Algorithms Interview Questions You'll Most Likely Be Asked 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书
- **__KERNEL__**:定义了特定于内核编译的宏,用于控制编译行为。 - **GCC版本号**:文档中提到了使用的GCC版本,这对于编译环境的兼容性和稳定性至关重要。 #### 11. `cmdline_init` - **功能**:初始化命令行...
heres of code for optimization. the method that i use is partical swarm of optimization
优化分支的策略还包括使用编译器指令如`likely()`和`unlikely()`来指导编译器优化分支预期。此外,减少分支、使用无分支编程技术(Branch-less programming)以及多线程和锁的管理,都是提升性能的有效手段。例如,...
8. **可能有(be likely to have)**:在句子"If you often compliment yourself, or in other words, overlook your strengths, you are likely ________ (have) high self-esteem."中,"be likely to"后面接动词原形...
f writing the text is most likely to ______ . A. encourage people to improve their lifestyle choices B. inform readers about the impact of air pollution on heart health C. promote awareness of the ...
9. A new situation is likely to ______ when the school leaving age is raised to 16. arise 表示“出现,产生”,与situation搭配。答案是B. arise。 10. Be quiet! It's rude to ______ people when they are...