Linux内核25-Per-CPU变量

简介: Linux内核25-Per-CPU变量

5.2.1 Per-CPU变量


其实,最好的同步手段在于设计阶段就要尽量避免同步的需求。因为,毕竟同步的实现都是需要牺牲系统性能的。

既然多核系统中,CPU之间访问共享数据需要同步,那么最简单和有效的同步技术就是为每个CPU声明自己的变量,这样就减少了它们的耦合性,降低了同步的可能性。

使用场景:

一个CPU访问自己专属的变量,而无需担心其它CPU访问而导致的竞态条件。这意味着,per-CPU变量只能在特定情况下使用,比如把数据进行逻辑划分,然后分派给各个CPU的时候。

因为这些per-CPU变量全部元素都存储在内存上,所有的数据结构都会落在Cache的不同行上。所以,访问这些per-CPU变量不会导致对Cache行进行窥视(snoop)和失效(invalidate)操作,它们都对系统性能有很大的牺牲。

缺点:

  1. 尽管,per-CPU变量保护了来自多个CPU的并发访问,但是无法阻止异步访问(比如,中断处理程序和可延时函数)。这时候,就需要其它同步技术了。
  2. 此外,不管是单核系统还是多核系统,per-CPU变量都易于受到内核抢占所导致的竞态条件的影响。一般来说,内核控制路径访问每个CPU变量的时候,应该禁用内核抢占。假设,内核控制路径获得一个per-CPU变量的拷贝的地址,然后被转移到其它CPU上运行,这个值就可能会被其它CPU修改。

表5-3 列出了操作per-CPU变量的函数和宏


函数 描述
DEFINE_PER_CPU(type, name) 静态分配一个per-CPU数组
per_cpu(name, cpu) 选择元素
__get_cpu_var(name) 选择元素
get_cpu_var(name) 禁止内核抢占,选择元素
put_cpu_var(name) 使能内核抢占
alloc_percpu(type) 动态分配一个per-CPU数组
free_percpu(pointer) 释放动态分配的数组
per_cpu_ptr(pointer, cpu) 返回某个元素的地址
相关文章
|
3月前
|
安全 网络协议 Linux
深入理解Linux内核模块:加载机制、参数传递与实战开发
本文深入解析了Linux内核模块的加载机制、参数传递方式及实战开发技巧。内容涵盖模块基础概念、加载与卸载流程、生命周期管理、参数配置方法,并通过“Hello World”模块和字符设备驱动实例,带领读者逐步掌握模块开发技能。同时,介绍了调试手段、常见问题排查、开发规范及高级特性,如内核线程、模块间通信与性能优化策略。适合希望深入理解Linux内核机制、提升系统编程能力的技术人员阅读与实践。
400 1
|
2月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
291 2
|
3月前
|
监控 Ubuntu Linux
什么Linux,Linux内核及Linux操作系统
上面只是简单的介绍了一下Linux操作系统的几个核心组件,其实Linux的整体架构要复杂的多。单纯从Linux内核的角度,它要管理CPU、内存、网卡、硬盘和输入输出等设备,因此内核本身分为进程调度,内存管理,虚拟文件系统,网络接口等4个核心子系统。
293 0
|
3月前
|
Web App开发 缓存 Rust
|
3月前
|
Ubuntu 安全 Linux
Ubuntu 发行版更新 Linux 内核,修复 17 个安全漏洞
本地攻击者可以利用上述漏洞,攻击 Ubuntu 22.10、Ubuntu 22.04、Ubuntu 20.04 LTS 发行版,导致拒绝服务(系统崩溃)或执行任意代码。
|
运维 Linux
Linux系统调优详解(二)——CPU负载查看相关命令
Linux系统调优详解(二)——CPU负载查看相关命令
307 10
|
存储 运维 监控
在Linux中,发现CPU负载过大,接下来怎么办?
在Linux中,发现CPU负载过大,接下来怎么办?
|
Linux
Linux操作系统调优相关工具(一)查看CPU负载相关工具 找出系统中使用CPU最多的进程?
Linux操作系统调优相关工具(一)查看CPU负载相关工具 找出系统中使用CPU最多的进程?
179 0
|
监控 Linux 测试技术
Linux系统篇—CPU平均负载介绍与案例假设
Linux系统篇—CPU平均负载介绍与案例假设
436 0
Linux系统篇—CPU平均负载介绍与案例假设

热门文章

最新文章