一、前言

一种新的机制出现的原因往往是为了解决实际的问题,虽然linux kernel中已经提供了workqueue的机制,那么为何还要引入CMWQ(Concurrency Managed Workqueue)呢?也就是说:旧的workqueue机制存在什么样的问题?在新的cmwq又是如何解决这些问题的呢?它接口是如何呈现的呢(驱动工程师最关心这个了)?如何兼容旧的驱动呢?本文希望可以解开这些谜题。

本文的代码来自linux kernel 4.18.4。

二、为何需要CMWQ?

内核中很多场景需要异步执行环境(在驱动中尤其常见),这时候,我们需要定义一个work(执行哪一个函数)并挂入workqueue。处理该work的线程叫做worker,不断的处理队列中的work,当处理完毕后则休眠,队列中有work的时候就醒来处理,如此周而复始。一切看起来比较完美,问题出在哪里呢?

(1)内核线程数量太多。如果没有足够的内核知识,程序员有可能会错误的使用workqueue机制,从而导致这个机制被玩坏。例如明明可以使用default workqueue,偏偏自己创建属于自己的workqueue,这样一来,对于那些比较大型的系统(CPU个数比较多),很可能内核启动结束后就耗尽了PID space(default最大值是65535),这种情况下,你让user space的程序情何以堪?虽然default最大值是可以修改的,从而扩大PID space来解决这个问题,不过系统太多的task会对整体

设备树学习(二十六、番外篇-中断子系统之CMWQ概述[2])相关推荐

  1. 设备树学习(十七、番外篇-中断子系统之内核对中断控制器的解析)

    一.介绍 关于中断的初始化我们从start_kernel函数开始 head_common.Sb start_kernel(void);....local_irq_disable(); /* 关中断 * ...

  2. 设备树学习(二十三、番外篇-中断子系统之softirq)

    既然开始学了,那么还是一次把中断的所有知识都系统的学一下.刚好有蜗窝大神的博客做指引. http://www.wowotech.net/irq_subsystem/soft-irq.html 一.前言 ...

  3. 设备树学习(十八、番外篇-中断子系统之初始化一个中断控制器)

    一.前言 上一篇写到,使用设备树的情况下,对所有的中断控制器进行了检索,提取到一个链表中.并对这些中断控制器中所谓的父中断控制器进行检索,并按照等级一次初始化.本文就以一种常见的中断控制器VIC的初始 ...

  4. 设备树学习(二十二、番外篇-中断子系统之驱动申请API)

    本文继续参照蜗窝大神的文档,采用4.19内核的代码学习,同时会有自己的一些举例和部分代码分析 http://www.wowotech.net/sort/irq_subsystem 一.前言 本文主要的 ...

  5. 设备树学习(十五、番外篇-中断子系统之IRQ Domain介绍)

    之前的文章分析过没使用设备树时,中断是如何初始化的 https://blog.csdn.net/qq_16777851/article/details/82556519 用一句话总结就是,启动过程,通 ...

  6. 设备树学习(二十五、番外篇-中断子系统之workqueue[1])

    本文参考蜗窝大神的中断系列教程 http://www.wowotech.net/irq_subsystem/workqueue.html 一.前言 在许多情况下,需要异步流程执行上下文,而workqu ...

  7. C1认证学习二十六(基础选择器)

    C1认证学习二十六(基础选择器) 任务背景 CSS选择器是CSS规则的一部分,用来指定需要设置的样式的HTML元素,通过选择器可以实现CSS对HTML元素一对一或者一对多或者多对一的控制了啦. 任务目 ...

  8. 知识图谱论文阅读(八)【转】推荐系统遇上深度学习(二十六)--知识图谱与推荐系统结合之DKN模型原理及实现

    学习的博客: 推荐系统遇上深度学习(二十六)–知识图谱与推荐系统结合之DKN模型原理及实现 知识图谱特征学习的模型分类汇总 知识图谱嵌入(KGE):方法和应用的综述 论文: Knowledge Gra ...

  9. PostCSS自学笔记(二)【番外篇二】

    图解PostCSS的插件执行顺序 文章其实是一系列的早就写完了. 才发现忘了发在SegmentFault上面, 最早发布于https://gitee.com/janking/Inf... 这次我继续研 ...

最新文章

  1. MVP Summit 2008 照片纪实(二)- 旧金山,Google总部和Stanford大学
  2. 什么叫大地高_续航8折不存在,北汽新能源EX5实力演绎什么叫高续航SUV!
  3. asp.net 图片 上传 打水印 高质量缩略图
  4. windows下利用_popen,_wopen创建管道进行系统命令输出数据
  5. mysqlbinlog工具_mysqlbinlog命令详解 Part 1-实验环境准备
  6. gmat阅读.html,GMAT阅读长难句50句+参考译文.pdf
  7. python机器学习预测_使用Python和机器学习预测未来的股市趋势
  8. MATLAB图片的保存与导出
  9. 三星Galaxy S11+电池谍照曝光:5000mAh超大容量 5G 不虚
  10. 10-Python入门学习-函数的对象与嵌套、名称空间与作用域、闭包函数
  11. flex 3 学习小结2
  12. Java 2实用教程(第五版)
  13. UE4 C++ Base64编解码
  14. CISCO 2811 路由器配置命令全集
  15. 双线性插值bilinear interpolation
  16. 和计算机相关的英文名字女孩,简单好听寓意好的英文名字女孩
  17. 《赋能》的读后感作文2800字
  18. 【ABC算法】人工蜂群算法原理及代码
  19. HXN-xh电池升压芯片,适用于干电池,锂电池电路
  20. 详解eNSP中Trunk端口和Access端口收发数据的区别

热门文章

  1. 【GPLT】L2-014 列车调度
  2. LDA在资讯推荐的应用
  3. python积木编程软件_最新海龟编辑器(Python编辑器)v0.6.1 官方版下载地址电脑版-锐品软件...
  4. taro框架props解构jsx标签,不渲染的问题
  5. 缠中说禅问题:关于缠论多义性应用及线段类上涨级别认定的问题
  6. 3DREP6C-2X/16EG24N9K4/M三通比例减压阀配置放大器
  7. AOEO×小红书,新国货品牌的爆红逻辑
  8. OSGi-Equinox
  9. 圣诞节主题网页如何设计?
  10. ubuntu 使用chown修改文件所有者