首页 > 其他分享 >cpufreq的初始化讲解

cpufreq的初始化讲解

时间:2023-06-05 21:45:36浏览次数:48  
标签:初始化 -- driver init cpufreq 讲解 policy cpu

cpufreq初始化

cpufreq的初始化,通过调用cpufreq_register_driver接口,完成一系列的policy、governor和driver配置。

驱动module init入口

  1. driver编写module_init的函数,在初始化中使用cpufreq_register_driver注册驱动
  2. cpufreq_register_driver中会完成增加总线设备、节点创建等操作
  3. 注册cpuhotplug的相关回调
stateDiagram module_init --> xx_driver_init :在kernel初始化阶段调用driver的init函数 note left of xx_driver_init 为每个cpu定义了policy指针:static DEFINE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_data); kernel只能有一个drvier:static struct cpufreq_driver *cpufreq_driver; end note xx_driver_init --> cpufreq_register_driver :在driver中调用cpufreq_register_driver,注册成功后,其他drvier会返回失败 cpufreq_register_driver --> subsys_interface_register: 在/sys/devices/system/cpu/cpuX/创建cpufreq节点 subsys_interface_register --> cpufreq_add_dev cpufreq_add_dev --> cpufreq_online(cpu) :1 cpufreq_add_dev --> add_cpu_dev_symlink :2 note left of add_cpu_dev_symlink 软链接/sys/devices/system/cpu/cpuX/cpufreq -> sys/devices/system/cpu/cpufreq/policyX end note

第二部分

  1. 每个cpu走到cpufreq_online函数,会有两条路径
  2. 第一条是,如果它的policy已经被赋值,那么再检查下其governor是否已经start
  3. 第二条是,如果它的policy还是空,那么走driver的init回调,来初始化cpu对应的policy-cpus值和flag
  4. 根据返回的policy-cpus的值,去初始化其他cpu的policy
  5. 完成policy初始化,min、max
stateDiagram cpufreq_online --> cpufreq_add_policy_cpu :cpufreq_cpu_data != NULL cpufreq_online --> cpufreq_policy_alloc :cpufreq_cpu_data == NULL note left of cpufreq_policy_alloc 在/sys/devices/system/cpu/cpufreq/创建policyX节点 end note cpufreq_add_policy_cpu --> cpufreq_start_governor : policy->cpus为0,需要start governor,不是init cpufreq_add_policy_cpu --> return : policy->cpus不为0,返回 cpufreq_policy_alloc --> cpufreq_driver_init(policy) note right of cpufreq_driver_init(policy) driver init主要完成clk和regulator等资源的初始化, 以及policy的初始化, end note cpufreq_driver_init(policy) --> for_each_cpu(policy) :再使用上面的policy->cpus对其他的cpu做初始化 for_each_cpu(policy) --> cpufreq_init_policy

Ref

https://www.kernel.org/doc/Documentation/cpu-freq/cpu-drivers.rst

标签:初始化,--,driver,init,cpufreq,讲解,policy,cpu
From: https://www.cnblogs.com/lvzh/p/17458033.html

相关文章

  • 数据结构--Dijkstra算法最清楚的讲解
    迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止###基本思想通过Dijkstra计算图G中的最短路径时,需要指定起点s(即从顶点s开始计算)。此外,引进两个集合S和U。S的......
  • shell一键部署集群初始化环境
    @目录脚本实现脚本测试用于一键部署集群(多节点)的环境初始化,如修改主机名,禁用防火墙、selinux、iptables,主机映射,节点相互免密,时间同步等ps:脚本需要下载except,chrony等软件包,确保centos源正常脚本实现#!/bin/bash#定义节点信息NODES=("192.168.200.80cluster01""192.168.......
  • zookeeper 入门讲解实例 转
    zookeeper使用和原理探究(一)zookeeper介绍zookeeper是一个为分布式应用提供一致性服务的软件,它是开源的Hadoop项目中的一个子项目,并且根据google发表的<TheChubbylockserviceforloosely-coupleddistributedsystems>论文来实现的,接下来我们首先来安装使用下这个软件,然后再......
  • dubbo源码学习(四)初始化过程细节:解析服务
    今天将真正去看dubbo内部的实现过程,看dubbo的源码前我先把dubbo的用户指南和开发指指南大概的看了一遍,这样再看dubbo源码比较轻松。从用户指南和开发指指南可以找到相应的切入点,今天将介绍的是dubbo的初始化解析bean的过程:解析服务基于dubbo.jar内的META......
  • 强化学习基础篇[3]:DQN、Actor-Critic详细讲解
    强化学习基础篇[3]:DQN、Actor-Critic详细讲解1.DQN详解1.1DQN网络概述及其创新点在之前的内容中,我们讲解了Q-learning和Sarsa算法。在这两个算法中,需要用一个Q表格来记录不同状态动作对应的价值,即一个大小为$[状态个数,动作个数]$的二维数组。在一些简单的强化学习环境中,比如......
  • 3、利用初始化好的虚拟机当作模板,用于克隆
    利用初始化好的虚拟机当作模板,用于克隆第一步:先拷贝个虚拟机当作模板[root@ubuntimages]#virt-clone-orocky8-f/var/lib/libvirt/images/rocky8-template.qcow2-nrocky8-templateAllocating'rocky8-template.qcow2'......
  • 4、虚拟机单机、集群的克隆、删除脚本(以初始化好的虚拟机为模板)
    虚拟机克隆、删除脚本[root@ubunt~]#catclone.sh#!/bin/bash##./etc/init.d/functions(如果是ubuntu,注释此行)Red="\e[1;31m"Purple="\e[1;35m"Green="\e[1;32m"Blue="\e[1;36m"Yellow="\e[1;33m"End="\e[0m&......
  • 大白话讲解数据库的三级模式(所谓的内外模式在生活中到底是什么东西?)
    具象化理解数据库的三级模式形象一点来说,把数据看做货物,数据库是仓库,模式就是表格。你有一个仓库,仓库里成千上万的货物,随便你怎么堆,你堆个正方体,堆个圆柱体,甚至随便乱堆都行,你怎么堆的叫内模式。完事你写了一张表,表上对全部货物按某个标准分类,而且标清了啥货物在哪(这个是模式内......
  • react初始化项目
    初始化基础的项目npminstall-gcreate-react-appcreate-react-appmy-appcdmy-appnpmstart箴言:因为这些东西是非常简单的。不要抱怨自己学不会,那是因为你没有足够用心。......
  • 超详细の树状数组讲解!
    树状数组以下有错误的话欢迎指正由于篇幅问题每道题目的代码在每一板块最后折叠给出其实线段树能维护的东西比树状数组能维护的东西多得多,但是树状数组代码好写啊!一维树状数组最为常用的树状数组,我们一般都是用这个来解决问题,二维的后面会讲。引入我们在进行数列操作的时候......