zoukankan      html  css  js  c++  java
  • 【原创】Linux cpu hotplug

    背景

    • Read the fucking source code! --By 鲁迅
    • A picture is worth a thousand words. --By 高尔基

    说明:

    1. Kernel版本:4.14
    2. ARM64处理器
    3. 使用工具:Source Insight 3.5, Visio

    1. 介绍

    Linux CPU热插拔,支持在系统启动后,关闭任意一个secondary cpu(在ARM架构中,CPU0为boot cpu,不能被关闭),并在需要时重新打开它。

    CPU-hotplug的一个用处是,支持SMP的SuspendResume,这个也是我看CPU-hotplug的原因。

    代码路径:
    include/linux/cpuhotplug.h
    kernel/cpu.c
    kernel/smpboot.c
    arch/arm64/kernel/smp.c

    2. 数据结构

    关键的数据结构有三种,如下图所示:

    • struct cpuhp_cpu_state:用来存储hotplug的状态;
    • enum cpuhp_state:枚举各种状态,这个会对应到全局数组中的某一项,而该项中会定义回调函数。当然,也可以通过函数接口来设置回调函数。
    • struct cpuhp_step:Hotplug state machine step,主要定义了函数指针,当跳转到某一个状态时会回调。

    3. 流程

    Linux内核会创建虚拟总线cpu_subsys,每个CPU注册的时候,都会挂载在该总线上,CPU的online和offline的操作,最终会回调到该总线上的函数。通过echo 0 > /sys/devices/system/cpu/cpu1/onlineecho 1 > /sys/devices/system/cpu/cpu1/online来控制CPU的热插拔。

    看图吧。

    3.1 cpu_up

    • Kernel会为每个CPU都创建一个hotplug线程,执行teardown/startup回调函数;
    • cpu_up的时候依赖底层的__cpu_up函数的实现;

    3.2 cpu_down

    • cpu_down的实际操作还是很复杂的,这种图只画了一部分,涉及到该CPU上的线程park,以及中断migrate,clockevents清除,以及通知上层等,不再深入研究了;
    • cpu_down的时候依赖底层的__cpu_die__cpu_disable函数的实现;

    CPU的Hogplug框架,针对是各类CPU,是一个通用的处理模式,涉及的面很宽,后续如果要用到的时候再继续研究。

  • 相关阅读:
    状压DP【p1879】[USACO06NOV]玉米田Corn Fields
    Tarjan缩点+Spfa最长路【p3627】[APIO2009] 抢掠计划
    Tarjan缩点【p1726】上白泽慧音
    分层图【p4822】[BJWC2012]冻结
    Tarjan缩点+LCA【p2783】有机化学之神偶尔会做作弊
    线段树【p1607】[USACO09FEB]庙会班车Fair Shuttle
    better-scroll踩坑合集
    在浏览器上安装 Vue Devtools工具
    无法执行vue初始化命令
    vue-cli创建第一个项目(用git bash解决上下键移动选择问题)
  • 原文地址:https://www.cnblogs.com/LoyenWang/p/11397084.html
Copyright © 2011-2022 走看看