之前的内核调试,我觉得应该再加上下面的东西,只有好好把下面的几个问题研究透了,你可能才是一个真正的内核高手,或者说,你还不是一个高手,就是一个内核的普通工程师,这个是我和Z总聊天说的,我当时问他,你对Linux内核熟悉吗?Z总给我说了一句,还可以吧。然后,这些内容都是他给我总结的,这些内容,我觉得,没有经过多年的项目捶打,光靠看书看报,百度搜狗出来是没有用的,现在总结出来,希望给正在一线的同学们一些帮助和建议。

性能优化方式总结:

  • 多核多队列并行处理

  1. 将多个任务分发绑定在不同核上,减少任务调度切换上下文的开销,提升了cache命中率,并行处理提升性能

  2. 将不同任务间的资源分离,不要共享,比如每个核有单独的首发队列,避免竞争

  3. 负载均衡,设备端处理后的数据散列到不同的CPU收发队列中,均衡各core的负载

  • DMA

  1. 使用设备的DMA引擎,降低CPU占用率,提升性能

  2. 负载均衡,CPU给不同的DMA引擎收发队列散列差不多的数据,保证各个DMA引擎负载均衡

  • 中断聚合

  1. 保证时延的情况下将设备的多个中断汇聚成1个中断,在一次中断函数中处理,减少中断抢占带来的开销

  2. 中断中处理读写BD时,尽量按照cache lin对齐的方式,比如一个BD是16字节,cacheline是  64字节,那就一次处理4个BD,提升cache命中率

  3. 设置中断亲和性,是中断处理绑定在指定的core上,可以通过cat /proc/interrupts命令查看中断在各个CPU上的分布

  • 降低TLB miss

  1. 可以采用huge page,采用huge page的虚拟地址和物理地址的转换映射条目就比较少,而且TLB中有专门的条目保存huge page映射,保证在huge page的命中率,减少了进程页表的频繁读取,提升了性能

  • 减少内存拷贝

  1. 用户态驱动用mmap将物理地址映射到用户态虚拟地址,减少内核态与用户态数据的拷贝

  • 提升cache命中率

  1. 代码中少用静态变量和全局变量,因为他们保存在数据段和BSS段,不在栈内(栈使用频繁,一般都会cache命中),频繁的访问静态变量和全局变量就需要多次对cache换入换出,影响性能。

  • cache line

  1. 数据结构cache line对齐,因为CPU每次按照cache line大小从内存取数据,不对齐就需要取2次,对齐就只要取1次

  2. 多核共享的数据,尽量将只读数据和可写数据分开,因为某个core写数据后与其他core的cache中数据不一致了,就需要将数据刷入内存,其他core从内存读,才能保证数据一致性

  • 分支预测

  1. 代码中if else分支用likely/unlikely这样的宏,这样编译时就把likely分支和前面的代码靠近,提升指令cache的命中率同时减少跳转指令的开销。

第3章 Linux内核调试手段之三相关推荐

  1. 第3章 Linux内核调试手段之内核打印

    开始 前面说的话 在我写代码的生涯里,我看到过很多大神炫耀自己的调试手段,也看到很多大神写过非常厉害的代码,我认为,相比于写代码,调试更加重要,而那些能在写代码的时候就加入了自己的调试信息的,就更加厉 ...

  2. 第3章 Linux内核调试手段之二

    =================== gdb 和 addr2line 调试内核模块 内核模块插入内核链表的时候,会调用 init 里面的程序,我们上面给的那个例程的程序因为是经过多年风吹雨打的,但是 ...

  3. 常用Linux内核调试手段介绍 02——— 内核笔记

    ​ ​ 活动地址:CSDN21天学习挑战赛 调试 1.printk 调试 2.动态打印 (一)要使用动态打印,必须在内核配置时打开CONFIG_DYNAMIC_DEBUG宏. ​示例: 这里rv112 ...

  4. 开源项目-基于Intel VT技术的Linux内核调试器

    本开源项目将硬件虚拟化技术应用在内核调试器上,使内核调试器成为VMM,将操作系统置于虚拟机中运行,即操作系统成为GuestOS,以这样的一种形式进行调试,最主要的好处就是调试器对操作系统完全透明.如下 ...

  5. Linux 内核调试器 调试指南

    Linux 内核调试器内幕 KDB 入门指南 Hariprasad Nellitheertha (nharipra@in.ibm.com), 软件工程师, IBM 简介: 调试内核问题时,能够跟踪内核 ...

  6. Linux内核调试debugfs

    DebugFS,顾名思义,是一种用于内核调试的虚拟文件系统,内核开发者通过debugfs和用户空间交换数据.类似的虚拟文件系统还有procfs和sysfs等,这几种虚拟文件系统都并不实际存储在硬盘上, ...

  7. Linux内核调试技术指南

    前两天,完成了ucos在2440上的移植,以及boot的修改.今天突然想到,我在linux下,该如何来编写,调试比较复杂的驱动.我想这个问题应该从如何调试内核入手,先转载两个文字,待西西看来. 系统搭 ...

  8. 【正点原子Linux连载】第三十七章 Linux内核移植 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  9. linux内核调试指南

    Hunnad的专栏 * 条新通知 * 登录 * 注册 * 欢迎 * 退出 * 我的博客 * 配置 * 写文章 * 文章管理 * 博客首页 * * * * 空间 * 博客 * 好友 * 相册 * 留言 ...

最新文章

  1. 《研磨设计模式》chap22 装饰模式Decorator(4)AOP+总结
  2. EF--Code First配置问题
  3. linux下shell脚本论文,Linux下Shell脚本编程
  4. 思维导图iMindMap如何制定时间计划
  5. mysql+hive+建表语句,在Oracle、MySQL中执行sql脚本生成hive建表语句
  6. linux设置ipsan_linux 配置SAN存储-IPSAN
  7. 副词记忆(II):ly后缀的常用词
  8. 小程序根据国外经纬度显示地图
  9. 有的人呀,他真的是带不动。。。
  10. Win10系统任务栏图标显示白色方块的解决方法
  11. FPGA 视频处理中外部SDRAM的作用
  12. kubernetes 日志收集
  13. 微信扫码登陆在chrome浏览器被拦截
  14. About Variables
  15. 金仓数据库 KingbaseES 客户端编程接口指南 - ODBC 驱动使用
  16. Spring简化Java开发_java开发如何用spring简化?详细图解
  17. delphi多线程例子 采用createThread创建多线程
  18. Java IDE推荐
  19. 思维导图MindManager的文件格式与例图
  20. 理解长短期记忆(LSTM) 神经网络

热门文章

  1. 属性动画基础之ValueAnimator
  2. 我的Android进阶之旅------Android利用温度传感器实现带动画效果的电子温度计
  3. ViewBag 找不到编译动态表达式所需的一种或多种类型,是否缺少引用?
  4. mlecms v2.2版权
  5. 我喜欢这样的老大[10-24]
  6. 36--斐波那契数列
  7. cef js返回c++的代码_CEF3开发者系列之外篇——IE中JS与C++交互
  8. Flask werkzeug 源码解析
  9. bat 发送post请求_get post 请求
  10. 【机器学习】feature_importances_ 参数源码解析