workquue

news2025/1/10 4:19:02

参考

讲解Linux内核工作队列workqueue源码分析 - 知乎

浅谈Linux内核中断下半部——工作队列(work queue) - 知乎

kernel/workqueue.c 

初始化

 /**
6004   * workqueue_init_early - early init for workqueue subsystem
6005   *
6006   * This is the first half of two-staged workqueue subsystem initialization
6007   * and invoked as soon as the bare basics - memory allocation, cpumasks and
6008   * idr are up.  It sets up all the data structures and system workqueues
6009   * and allows early boot code to create workqueues and queue/cancel work
6010   * items.  Actual work item execution starts only after kthreads can be
6011   * created and scheduled right before early initcalls.
6012   */
6013  void __init workqueue_init_early(void)
6014  {
6015  	int std_nice[NR_STD_WORKER_POOLS] = { 0, HIGHPRI_NICE_LEVEL };
6016  	int hk_flags = HK_FLAG_DOMAIN | HK_FLAG_WQ;
6017  	int i, cpu;
6018  
6019  	BUILD_BUG_ON(__alignof__(struct pool_workqueue) < __alignof__(long long));
6020  
6021  	BUG_ON(!alloc_cpumask_var(&wq_unbound_cpumask, GFP_KERNEL));
6022  	cpumask_copy(wq_unbound_cpumask, housekeeping_cpumask(hk_flags));
6023  
6024  	pwq_cache = KMEM_CACHE(pool_workqueue, SLAB_PANIC);
6025  
6026  	/* initialize CPU pools */
6027  	for_each_possible_cpu(cpu) {
6028  		struct worker_pool *pool;
6029  
6030  		i = 0;
6031  		for_each_cpu_worker_pool(pool, cpu) {
6032  			BUG_ON(init_worker_pool(pool));
6033  			pool->cpu = cpu;
6034  			cpumask_copy(pool->attrs->cpumask, cpumask_of(cpu));
6035  			pool->attrs->nice = std_nice[i++];
6036  			pool->node = cpu_to_node(cpu);
6037  
6038  			/* alloc pool ID */
6039  			mutex_lock(&wq_pool_mutex);
6040  			BUG_ON(worker_pool_assign_id(pool));
6041  			mutex_unlock(&wq_pool_mutex);
6042  		}
6043  	}
6044  
6045  	/* create default unbound and ordered wq attrs */
6046  	for (i = 0; i < NR_STD_WORKER_POOLS; i++) {
6047  		struct workqueue_attrs *attrs;
6048  
6049  		BUG_ON(!(attrs = alloc_workqueue_attrs()));
6050  		attrs->nice = std_nice[i];
6051  		unbound_std_wq_attrs[i] = attrs;
6052  
6053  		/*
6054  		 * An ordered wq should have only one pwq as ordering is
6055  		 * guaranteed by max_active which is enforced by pwqs.
6056  		 * Turn off NUMA so that dfl_pwq is used for all nodes.
6057  		 */
6058  		BUG_ON(!(attrs = alloc_workqueue_attrs()));
6059  		attrs->nice = std_nice[i];
6060  		attrs->no_numa = true;
6061  		ordered_wq_attrs[i] = attrs;
6062  	}
6063  
6064  	system_wq = alloc_workqueue("events", 0, 0);
6065  	system_highpri_wq = alloc_workqueue("events_highpri", WQ_HIGHPRI, 0);
6066  	system_long_wq = alloc_workqueue("events_long", 0, 0);
6067  	system_unbound_wq = alloc_workqueue("events_unbound", WQ_UNBOUND,
6068  					    WQ_UNBOUND_MAX_ACTIVE);
6069  	system_freezable_wq = alloc_workqueue("events_freezable",
6070  					      WQ_FREEZABLE, 0);
6071  	system_power_efficient_wq = alloc_workqueue("events_power_efficient",
6072  					      WQ_POWER_EFFICIENT, 0);
6073  	system_freezable_power_efficient_wq = alloc_workqueue("events_freezable_power_efficient",
6074  					      WQ_FREEZABLE | WQ_POWER_EFFICIENT,
6075  					      0);
6076  	BUG_ON(!system_wq || !system_highpri_wq || !system_long_wq ||
6077  	       !system_unbound_wq || !system_freezable_wq ||
6078  	       !system_power_efficient_wq ||
6079  	       !system_freezable_power_efficient_wq);
6080  }

创建内核work 线程

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/567767.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

字节测开5年经验之谈,1分钟了解自动化测试..

引子 写在最前面&#xff1a;目前自动化测试并不属于新鲜的事物&#xff0c;或者说自动化测试的各种方法论已经层出不穷&#xff0c;但是&#xff0c;能够明白自动化测试并很好落地实施的团队还不是非常多&#xff0c;我们接来下用通俗的方式来介绍自动化测试…… 本文共有2410…

WebSocket全双工通信SpringBoot实现

【IT老齐238】十分钟上手WebSocket全双工通信协议_哔哩哔哩_bilibili【IT老齐238】十分钟上手WebSocket全双工通信协议, 视频播放量 8348、弹幕量 23、点赞数 318、投硬币枚数 157、收藏人数 257、转发人数 30, 视频作者 IT老齐, 作者简介 老齐的个人V: itlaoqi001 ~~欢迎前来交…

kubernetes01

kubernetes基础 kubernetes介绍 Kubernetes是Google在2014年开源的一款容器集群系统&#xff0c;简称k8s Kubernetes用于容器化应用程序部署、扩展和管理&#xff0c;目标是让容器化应用简单高效 官方网站&#xff1a;https://kubernetes.io/ 官方文档&#xff1a;https://ku…

PFC(Priority Flow Control)及PFC Storm介绍

文章目录 PFCPFC Storm PFC PFC是一种流量控制机制&#xff0c;用于保证网络中的无损传输&#xff0c;常用于RDMA网络中&#xff0c;以下具体介绍其机制。 如图所示&#xff0c;发送方的出端口发送数据包给接收方的入端口。在发送方的出端口&#xff0c;数据包在至多八个队列中…

AI智能照片编辑:AI Photo for Mac

AI Photo是一款Mac平台上的智能照片编辑软件&#xff0c;它基于人工智能技术&#xff0c;可以帮助用户快速、轻松地对照片进行编辑和美化。AI Photo提供了多种智能修复和美化功能&#xff0c;包括自动调整色彩、对比度、亮度、清晰度等&#xff0c;使得照片的质量得到有效提升。…

二叉树:填充每个节点的下一个右侧节点指针(java)

leetcode116:填充每个节点的下一个右侧节点指针 leetcode原题链接&#xff1a;题目描述递归解法一递归方法二&#xff08;效率更高&#xff09;二叉树专题 leetcode原题链接&#xff1a; 116题&#xff1a;填充每个节点的下一个右侧节点指针 题目描述 给定一个 完美二叉树 &a…

【STL模版库】vector介绍及使用 {构造函数,迭代器,容量相关接口,增删查改;动态二维数组}

一、vector的介绍 vector是表示可变大小数组的序列容器。就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以动态改变的&#xff0c;而且它…

Shell iptales防火墙设置

文章目录 Linux 防火墙1.Linux包过滤防火墙概述2.四表五链四表五链 3.规则链之间的匹配顺序主机型防火墙网络型防火墙 4.规则链内的匹配顺序 Linux 防火墙 1.Linux包过滤防火墙概述 Linux 系统的防火墙: IP信息包过滤系统&#xff0c;它实际上由两个组件netfilter 和 iptable…

029:Mapbox GL绘制铁路黑白交替的线段

第029个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载数据显示铁路标识的那种黑白交替的线段。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共94行)相关API参考:专栏目标示例效果 配置方式 1)…

湍流的数值模拟方法概述

湍流&#xff0c;又称紊流&#xff0c;是一种极其复杂、极不规则、极不稳定的三维流动。湍流场内充满着尺度大小不同的旋涡&#xff0c;大旋涡尺度可以与整个流畅区域相当&#xff0c;而小漩涡尺度往往只有流场尺度千分之一的数量级&#xff0c;最小尺度旋涡的尺度通过其耗散掉…

蓝桥杯--挖地雷

没有白走的路&#xff0c;每一步都算数&#x1f388;&#x1f388;&#x1f388; 题目&#xff1a; 已知有很多的地窖&#xff0c;每一个地窖中又藏着很多的地雷&#xff0c;每个地窖之间都存在着相连性&#xff0c;但是不是任意的地窖都是相连的&#xff0c;要求我们找出一次能…

技术干货 | 在 PostgreSQL 中设置查询超时

在 Navicat Monitor 3 监控工具中的查询分析器画面顶部&#xff0c;我们设置了一个图表&#xff0c;用以显示等待时间最长的查询&#xff1a; 能够标识出滞后的查询非常重要&#xff0c;因为它们可以让一切陷入瘫痪。 除了在标识出慢速查询并对其进行修复外&#xff0c;另一种…

【2023 · CANN训练营第一季】昇腾AI入门课(TensorFlow)第二章——TensorFlow模型迁移训练

1.AI模型开发基础知识入门 1.1具备Python编程经验 a.使用位置和关键字参数定义和调用函数 b.字典、列表、集合 (创建、访问和迭代) c.for循环&#xff0c; for具有多个迭代器变量的循环 (例如&#xff0c;for a,b in [(1,2),(3,4)]) d.if/else条件块和条件表达式 e.字符串格式…

Echarts绘制折线图,超简单,源码点击即可运行!【文末源码地址】

文章目录 前言Apache Echarts绘制基础折线图绘制带标记的折线图绘制多条折线图绘制带标签的折线图完整源码地址 前言 本文包含的代码仅为部分片段&#xff0c;完整源码有详细注释&#xff0c;可在文末领取&#xff01; 在当今数字化时代&#xff0c;数据可视化已成为一种必不…

day12 - 图像修复

在图像处理的过程中&#xff0c;经常会遇到图像存在多余的线条或者噪声的情况&#xff0c;对于这种情况我们会先对图像进行预处理&#xff0c;去除掉对图形内容有影响的噪声&#xff0c;在进行后续的处理。 本节实验我们介绍使用图像膨胀来处理图形的多余线条&#xff0c;进行…

web前端 --- CSS(03) -- 元素定位

元素定位&#xff1a;标签在页面中的位置问题 &#xff08;1&#xff09;分类 绝对定位&#xff1a;将需要的元素直接定位固定的位置 PS&#xff1a;绝对定位&#xff0c;必须指定一个相对点&#xff08;一般是父标签&#xff09;。相对的标签必须是相对定位或者绝对定位【重…

chatgpt赋能python:PythonSearchGroup-Python搜索小组

Python Search Group - Python搜索小组 如果你是一个Python程序员&#xff0c;或者对Python编程语言感兴趣&#xff0c;那么你一定听说过Python Search Group。Python Search Group是一个专注于Python搜索和搜索引擎的小组&#xff0c;他们致力于提供高效的Python搜索工具和搜…

【Netty】字节缓冲区 ByteBuf(七)(下)

文章目录 前言一、实现原理二、ByteBuf 的使用案例三、ByteBuf 的3种使用模式3.1 堆缓冲模式3.2 直接缓冲区模式3.3 复合缓冲区模式 总结 前言 回顾Netty系列文章&#xff1a; Netty 概述&#xff08;一&#xff09;Netty 架构设计&#xff08;二&#xff09;Netty Channel 概…

鸿蒙Hi3861问题解决-DevEco VSCode无法跳转

一、问题描述 使用Windows和Ubuntu混合编译下载&#xff0c;在windows下搭建VSCodeDevEco Device Tool环境。通过SSH远程Ubuntu系统进行代码修改与编译。 在VSCode中&#xff0c;Ctrl左键&#xff0c;无法跳转。按住Ctrl键&#xff0c;鼠标移到函数上&#xff0c;也不会有任何反…

Flink+hadoop部署及Demo

Hadoop集群高可用部署 下载hadoop包地址 https://dlcdn.apache.org/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz 上传并解压到3台服务器 配置3台主机的hosts和免密登录 1.修改.bash_profile vi .bash_profile # HADOOP_HOME export HADOOP_HOME/apps/svr/hadoop-3.2.…