文章目录

  • 一、CPU 计数器瓶颈
  • 二、per-CPU 计数器及 percpu_counter 结构体源码

一、CPU 计数器瓶颈


如果 操作系统 中有 多个 CPU , 假设只有一个 CPU 计数器工作 , 如果 某个 CPU 正在访问计数器 , 其它 CPU 需要等待计数器释放 , 才能访问 CPU 计数器 , 这里 CPU 计数器会出现瓶颈 , 影响系统性能 ;

二、per-CPU 计数器及 percpu_counter 结构体源码


Linux 内核中 , 引入了 " per-CPU 计数器 “ , 用于加速 ” SMP 系统 " 的计数器操作 ;

" per-CPU 计数器 " 在 Linux 内核中被定义为 percpu_counter 结构体 , 该 结构体 定义在 Linux 内核源码 的 linux-5.6.18\include\linux\percpu_counter.h#20 中 ;

raw_spinlock_t lock 字段是一个 自旋锁 ;

s64 count 字段是 计数器的值 ;

struct percpu_counter {raw_spinlock_t lock;s64 count;
#ifdef CONFIG_HOTPLUG_CPUstruct list_head list; /* All percpu_counters are on a list */
#endifs32 __percpu *counters;
};

源码路径 : linux-5.6.18\include\linux\percpu_counter.h#20

【Linux 内核 内存管理】Linux 内核堆内存管理 ③ ( CPU 计数器瓶颈 | per-CPU 计数器 | Linux 内核 percpu_counter 结构体源码 )相关推荐

  1. 【Linux 内核 内存管理】分区伙伴分配器 ② ( free_area 空闲区域结构体源码 | 分配标志位 | GFP_ZONE_TABLE 标志位区域类型映射表 |分配标志位对应的内存区域类型 )

    文章目录 一.free_area 空闲区域结构体源码分析 二.分配标志位 三.GFP_ZONE_TABLE 标志位区域类型映射表 四.分配标志位对应的内存区域类型 一.free_area 空闲区域结构 ...

  2. 【Linux 内核 内存管理】物理内存组织结构 ④ ( 内存区域 zone 简介 | zone 结构体源码分析 | zone 结构体源码 )

    文章目录 一.内存区域 zone 简介 二.zone 结构体源码分析 1.watermark 成员 2.lowmem_reserve 成员 3.zone_pgdat 成员 4.pageset 成员 5 ...

  3. 【Linux 内核 内存管理】虚拟地址空间布局架构 ② ( 用户虚拟地址空间组成 | 内存描述符 mm_struct 结构体源码 )

    文章目录 一.用户虚拟地址空间组成 二.内存描述符 mm_struct 结构体源码 一.用户虚拟地址空间组成 " 用户虚拟地址空间 " 包括以下区域 : ① 代码段 ② 数据段 ③ ...

  4. 【Linux 内核 内存管理】Linux 内核堆内存管理 ① ( 堆内存管理 | 内存描述符 mm_struct 结构体 | mm_struct 结构体中的 start_brk、brk 成员 )

    文章目录 一.堆内存管理 二.内存描述符 mm_struct 结构体 三.mm_struct 结构体中的 start_brk.brk 成员 一.堆内存管理 Linux 操作系统中的 " 堆内 ...

  5. 【Linux 内核】调度器 ② ( sched_class 调度类结构体源码 | 源码路径 linux-5.6.18\kernel\sched\sched.h )

    文章目录 一.调度器 二.sched_class 调度类结构体 一.调度器 上一篇博客 [Linux 内核]调度器 ( 调度器概念 | 调度器目的 | 调度器主要工作 | 调度器位置 | 进程优先级 ...

  6. 【Linux 内核 内存管理】Linux 内核堆内存管理 ② ( 动态分配堆内存方式 | brk 系统调用 | mmap 系统调用 | brk 系统调用源码介绍 )

    文章目录 一.Linux 系统 动态分配堆内存 方式 二.brk 系统调用 动态分配堆内存 一.Linux 系统 动态分配堆内存 方式 Linux 系统中 , 提供了 222 种方式 进行 " ...

  7. 内存对齐的原理,作用,例子以及一些规划(中英文说明,适用sizeof结构体) ...

    目录   题记  一  内存读取粒度   Memory access granularity   从内存的角度解释内存对齐的原理   队列原理 Alignment fundamentals   Laz ...

  8. Linux 如何安装 SRPM 包(源代码 rpm 软件包,以 .src.rpm 为后缀名)/rpm 格式的源码软件包/源码包

    文章目录 一.SRPM 介绍 二.SRPM 命名格式 三.SRPM 的安装 (一)直接使用命令 rpmbuild (二)利用 *.spec 文件编译 (三)使用命令 make 编译和安装 四.写在最后 ...

  9. linux下c语言线程传参数,【linux】C语言多线程中运行线程池,在线程池中运行线程池,,传递的结构体参数值为空/NULL/0...

    C语言多线程中运行线程池,在线程池中运行线程池,,传递的结构体参数值为空/NULL/0 本贴问题,之前已经提问过一次,当时已经解决了,原贴在这里https://segmentfault.com/q/1 ...

最新文章

  1. 神奇的输入 while(cin....)如何在遇见换行之后进入下一层循环读入
  2. 你知道什么是数据科学?如何把数据变成产品么?
  3. 1.封装WinMain至动态链接库
  4. android栈式存储,线性表数据结构解读(三)栈结构Stack
  5. Qt Creator导出QML
  6. 打孔怎么定位_电视机挂架怎么安装
  7. linux与windows查看占用端口的进程ID并杀死进程
  8. url传递中文的解决方案总结
  9. swiper轮播在vue中动态绑定返回的数据图片显示不完整
  10. GD32F303xx 使用 jlink-segger功能
  11. python艺术分形数_Python分形框计数 – 分形维数
  12. NumPy库常见操作总结
  13. win10安装CUDA和cuDNN
  14. 2019 年终总结,168 篇,已归类!
  15. DL1 - Neural Networks and Deep Learning
  16. 这样的心态,值得拥有
  17. 关于FPS透视原理的研究(一)
  18. 九峰影业创始人_乾社成员雅集第二辑
  19. colab的简单使用
  20. Vivado IP核之复数浮点数累加 Floating-point

热门文章

  1. Tomcat 8熵池阻塞变慢详解
  2. Arduino 与 MPU6050 姿态解算+ PROCESSING
  3. LightOJ 1205 Palindromic Numbers
  4. JFreeChart的简单图表的制作------柱形图
  5. lsnrctl 与 tnsnames.ora 的联系
  6. Java中Date及Timestamp时间相关内容【转】
  7. omnicppcomplete - a Vim plugin [转载]
  8. 用ESX进行虚拟化的技巧连载五:代理/防火墙服务虚拟化
  9. windows2016重新配置sid
  10. Spring注解之 @SuppressWarnings注解