第19章 Linux电源管理的系统架构和驱动之CPU热插拔

19.8 CPU热插拔

    Linux CPU热插拔的功能已经存在相当长的时间了,Linux 3.8之后的内核里一个小小的改进就是CPU0可以热插拔。

    在用户空间可以通过/sys/devices/system/cpu/cpun/online节点来操作一个CPU的在线和离线:

# echo 0 > /sys/devices/system/cpu/cpu3/online
    CPU 3 is now offline

# echo 1 > /sys/devices/system/cpu/cpu3/online

通过echo 0 > /sys/devices/system/cpu/cpu3/online关闭CPU3时,CPU3上的进程都会被迁移到其他的CPU上,以保证拔除CPU3的过程中,系统仍然能正常运行。

通过echo 1 > /sys/devices/system/cpu/cpu3/online再次开启CPU3,CPU3又可参与系统的负载均衡,分担系统中的任务。

在嵌入式系统中,CPU热插拔可以作为一种省电的方式,在系统负载小的时候,动态关闭CPU,在系统负载增大的时候,再开启之前离线的CPU。目前各个芯片公司可能会根据自身SoC的特点,对内核进行调整,来实现运行时“热插拔”。以Nvidia(英伟达)的Tegra3为例进行说明。

      Tegra3采用VSMP(Variable Symmetric Multi Processing)架构,共有5个Cortex-A9处理器,其中4个为高性能设计的G核,1个为低功耗设计的LP核,如图19.7所示。


图19.7 Tegra3的架构

      在系统运行过程中,Tegra3的Linux内核会根据CPU负载切换低功耗处理器和高功耗处理器。除此之外,4个高性能ARM核心也会根据运行情况,动态借用Linux内核支持的CPU热插拔进行CPU的插入/拔出操作。

    用华硕EeePad运行高负载、低负载应用,通过dmesg查看内核消息也确实验证了多核的热插拔以及G核和LP核之间的动态切换:

<4>[104626.426957] CPU1: Booted secondary processor
<7>[104627.427412] tegra CPU: force EDP limit 720000 kHz
<4>[104627.427670] CPU2: Booted secondary processor
<4>[104628.537005] stop_machine_cpu_stop cpu=0
<4>[104628.537017] stop_machine_cpu_stop cpu=2
<4>[104628.537059] stop_machine_cpu_stop cpu=1
<4>[104628.537702] __stop_cpus: wait_for_completion_timeout+
<4>[104628.537810] __stop_cpus: smp=0 done.executed=1 done.ret =0-
<5>[104628.537960] CPU1: clean shutdown
<4>[104630.537092] stop_machine_cpu_stop cpu=0
<4>[104630.537172] stop_machine_cpu_stop cpu=2
<4>[104630.53773

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值