1. 项目概述:为什么我们需要集成通信处理器?
在路由器、交换机或者无线基站这类网络设备的开发板上,你很少会看到一颗孤零零的通用CPU。取而代之的,往往是像飞思卡尔PowerQUICC III这样集成了“大脑”和“手脚”的专用芯片。这颗芯片,我们称之为集成通信处理器。它的出现,直接源于网络设备一个核心的矛盾:控制平面和数据平面的处理需求截然不同。控制平面负责运行路由协议、管理接口、处理信令,需要强大的通用计算能力和复杂的操作系统支持;而数据平面则专注于线速转发数据包,要求极低的延迟和极高的吞吐量,这恰恰是通用CPU的短板,因为频繁的中断和上下文切换会严重拖慢速度。
早期的解决方案是用一颗通用CPU搭配多颗专用的网络协处理器或FPGA,板子设计复杂,成本高昂。集成通信处理器的设计哲学,就是把这两者“揉”进一颗芯片里。它内部通常包含一个高性能的通用处理器核心(比如PowerPC e500)作为“大脑”,以及一个或多个高度优化的通信协处理器模块(如CPM)作为“手脚”。这种异构架构让“大脑”专心处理复杂的控制逻辑和上层协议栈,而“手脚”则通过硬件加速,专门负责数据包的接收、分类、修改和转发。我经手过不少从纯软件转发迁移到这类硬件加速平台的项目,最直观的感受就是CPU负载从90%以上骤降到20%以下,同时转发性能还能提升一个数量级,板卡功耗和发热也明显改善。对于设备厂商来说,这意味着更简单的硬件设计、更低的BOM成本和更可靠的产品。
飞思卡尔的PowerQUICC系列就是这个领域的常青树,而PowerQUICC III更是其中的一代经典。它不仅仅是在前代基础上提了主频,而是在架构集成度和接口丰富度上做了一个大跃进。它瞄准的是当时高端的企业级路由、电信级接入和汇聚设备市场。当你拿到一颗MPC8560这样的芯片,你几乎拥有了构建一台完整网络设备所需的所有核心部件:CPU、内存控制器、多种网络接口控制器以及高速芯片互连总线。这大大降低了硬件工程师的布线难度和软件工程师的驱动适配工作量。接下来,我们就深入这颗芯片的内部,看看它是如何通过精妙的设计,成为当年众多网络设备“心脏”的。
2. PowerQUICC III架构深度解析:双核异构的智慧
PowerQUICC III的框图看起来有点复杂,但理解其核心思想后,你会发现它的架构非常清晰且高效。整个芯片可以看作由两个主要的功能块通过高速内部总线互联而成:处理器核心复合体和通信处理器模块。这种“主控+协处理”的异构设计,是它能高效处理网络任务的关键。
2.1 大脑:高性能e500核心
e500核心是基于Power Architecture技术的高性能嵌入式处理器。与当时常见的ARM9或MIPS内核相比,e500在相同频率下能提供更强的标量计算性能,这对于运行Linux或VxWorks这类复杂的网络操作系统至关重要。它的几个设计特点值得细说:
双发射超标量流水线:这意味着在每个时钟周期,核心可以同时从指令流中取出两条指令,并尝试将它们分发到不同的执行单元(如整数运算单元、加载/存储单元)去并行执行。对于控制平面大量存在的分支判断和逻辑运算,这种设计能有效提升指令吞吐率。在实际编程中,为了充分发挥这个特性,需要注意代码的指令排布,避免过多的数据依赖和分支跳转。
强大的缓存体系:e500核心配备了32KB的L1指令缓存和32KB的L1数据缓存,以及一个高达256KB的共享L2缓存。L2缓存是直接映射的,访问延迟极低。在网络处理中,无论是路由表查找(经常访问的数据结构)还是协议栈代码,都能被高效地缓存,减少访问外部DDR内存的延迟。这里有个实操要点:在系统初始化时,合理配置缓存的行锁定功能,可以将最关键的、访问最频繁的数据结构(比如中断向量表、某个核心的转发流表)锁定在缓存中,确保其访问速度,这对于实现确定性的低延迟处理非常有帮助。
增强的调试支持:对于嵌入式开发,调试往往比写代码更耗时。e500核心提供了硬件观察点、指令地址断点、数据值断点等高级调试功能,并且通过JTAG接口与外部调试器深度集成。在调试一个复杂的网络协议栈问题时,能够实时监控某个特定内存地址(比如一个队列指针)的读写变化,或者在某条指令执行时捕获所有寄存器状态,能极大缩短问题定位时间。
2.2 手脚:通信处理器模块
如果说e500是运筹帷幄的“大脑”,那么通信处理器模块就是冲锋陷阵的“手脚”。CPM本身又是一个高度集成的子系统,其核心是一个独立的32位RISC引擎,运行频率最高可达333MHz。这个RISC引擎不运行Linux,它运行的是由飞思卡尔提供的微码或者用户自定义的微码,专门用于管理CPM内部各种通信控制器和加速器。
CPM的精华在于它集成了种类繁多的通信控制器,几乎囊括了当时所有主流的广域网和局域网接口:
快速通信控制器:这是性能最高的接口。以MPC8560为例,它集成了三个FCC。每个FCC在微码驱动下,可以灵活配置为支持多种高速协议:
- ATM模式:支持高达155Mbps的速率,带有UTOPIA Level 2接口,可以直接连接物理层芯片。它硬件支持AAL5(最常用的ATM适配层),甚至支持AAL2和AAL1,这对于语音等实时业务传输很重要。一个常见的坑是:配置ATM SAR(分段与重组)参数时,如果MTU大小、VPI/VCI表深度设置不当,会导致重组失败或缓冲区溢出,需要仔细对照芯片手册和物理层芯片的规格。
- 快速以太网模式:支持10/100Mbps,通过MII/RMII接口外接PHY。虽然现在看起来慢,但在当时用于设备管理口或低速上行链路非常普遍。
- HDLC高速模式:支持透明传输或HDLC帧格式,速率可达45Mbps。常用于传统的T1/E1、SDH/SONET链路封装。
多通道控制器:这是用于高密度、低速率信道汇聚的利器。MCC支持将多达256个独立的64Kbps HDLC信道复用到一条或多条TDM总线上。想象一下一个接入服务器需要处理上百个并发的拨号用户连接,每个连接都是一个独立的HDLC链路。如果没有MCC,你可能需要几十个独立的SCC控制器,硬件设计会非常复杂。MCC通过硬件实现了时隙分配和信道管理,大大减轻了CPU负担。
串行通信控制器:SCC是更通用、但速率相对较低的串行接口控制器。一个SCC可以通过软件配置,支持UART、HDLC、同步UART、BISYNC等多种协议。它常用于连接串行控制台、低速调制解调器或作为其他专用协议的传输载体。
时分复用支持:CPM内部集成了时隙分配器(TSA)。这是一个非常关键但容易被忽略的组件。它允许你将来自任意FCC、SCC甚至内存的数据流,动态地映射到8条TDM总线(比如E1/T1的PCM线路)的任意时隙上。这在构建语音网关或多业务接入平台时是必备功能。配置TSA需要理解TDM帧结构,并正确设置每个时隙与CPM内部缓冲区的映射关系。
CPM内部还有一块32KB的双端口RAM。这块内存是e500核心和CPM的RISC引擎都能直接访问的共享内存,是两者通信的“主战场”。通常,e500核心会把需要发送的数据包描述符和缓冲区指针放在这里���CPM的RISC引擎读取后,驱动相应的控制器去DMA数据。接收时过程相反。这里有一个至关重要的性能调优点:这块DPRAM的访问仲裁和布局需要精心设计。如果e500和CPM频繁地访问同一块区域,会产生竞争等待。好的做法是将发送和接收的描述符环、缓冲区指针表、状态标志分别放在不同的、对齐的内存区域,并利用缓存行大小进行填充,避免伪共享。
2.3 高速互连与内存子系统
强大的核心和协处理器需要同样强大的内部互连和外部内存接口来喂饱数据。PowerQUICC III在这方面也毫不含糊。
DDR SDRAM控制器:它支持166MHz的DDR内存,数据位宽64位,并带有完整的ECC校验支持。对于网络处理器,内存带宽和稳定性是生命线。在配置内存控制器时,除了常规的时序参数,需要特别注意驱动强度和ODT的设置,这与具体的PCB布线长度、拓扑结构和使用的内存颗粒型号密切相关。设置不当会导致系统不稳定,时好时坏。我的经验是,先用保守的、较宽松的时序参数让系统跑起来,再结合内存测试工具逐步收紧时序,并做长时间的压力测试。
RapidIO互连:这是PowerQUICC III的一大亮点。RapidIO是一种高性能、低延迟、基于包交换的芯片互连技术,特别适合嵌入式多处理器系统。在MPC8560上,它提供了一个500MHz、8位宽的LVDS接口。你可以用它直接连接另一颗PowerQUICC III处理器,或者连接DSP、交换芯片等,构建一个强大的多核处理板卡。与传统的PCI相比,RapidIO是端到端的互连,不需要复杂的桥接,延迟更低,而且支持消息传递和直接内存访问两种模型。在硬件设计上需要注意:RapidIO的LVDS信号对PCB布线要求很高,需要做严格的阻抗控制和等长匹配,最好参考官方的参考设计。
PCI-X/PCI控制器:它提供了向后兼容的扩展能力。支持64位/133MHz的PCI-X,也能降速运行在标准的PCI 2.2模式。这个接口常用于连接额外的网络处理器、加密卡或存储控制器。在Linux驱动开发中,需要正确配置BAR空间和中断映射。
本地总线:这是一个32位、166MHz的并行总线,类似于早期的PowerPC 60x总线。它通常用于连接Boot Flash、FPGA或一些低速的本地外设。它的配置相对简单,但时序参数也需要与所连接设备的时序相匹配。
3. 典型应用场景与硬件设计要点
理解了架构,我们来看看PowerQUICC III具体能在哪些设备里大显身手,以及在设计这些设备时需要注意什么。
3.1 应用场景映射
多业务接入路由器/区域办公室路由器:这是它的主战场。利用其集成的两个千兆以太网控制器(TSEC)作为上行和下行链路,多个FCC可以配置为串行广域网接口(如Channelized T1/E1),通过HDLC或PPP连接分支机构。CPM的硬件加速完全卸载了PPP帧的封装/解封装、HDLC的CRC校验等任务。e500核心则运行Linux,处理OSPF、BGP路由协议,以及防火墙、NAT等业务。设计要点:重点优化DDR内存带宽,因为路由表查找和包缓冲会消耗大量内存访问。可以考虑使用带TCAM的交换芯片与PowerQUICC III配合,将快速转发路径卸载到交换芯片,PowerQUICC III只处理慢速控制路径和异常流量。
无线网络控制器/基站路由器:在3G时代,基站设备需要处理大量的ATM信元(用于Abis接口)和IP数据(用于Iu接口)。PowerQUICC III的FCC支持ATM和IMA,可以直连传输设备。MCC可以用于处理多个E1链路,承载多个语音信道。设计要点:ATM和TDM相关的时钟同步至关重要。需要精心设计时钟树,确保CPM的TSA、外部PHY芯片以及网络侧时钟源之间的同步,否则会出现滑码、误码。通常需要配备高精度的时钟发生器或同步以太网功能。
TDM over IP网关或媒体网关:这类设备将传统的TDM语音(E1中继)打包成IP包(如VoIP)在网络上传输。PowerQUICC III的CPM几乎是为此量身定做:SCC或MCC接入E1线路,提取时隙中的语音数据;e500核心运行语音编码算法(如G.711, G.729);处理后的数据再通过千兆以太网发送出去。设计要点:语音业务对延迟和抖动极其敏感。需要确保CPM到内存的数据路径(DMA)以及内存到网络接口的数据路径中断延迟足够低。在软件上,可能需要采用实时内核补丁,并精心设置网络驱动和DMA缓冲区的参数。
3.2 硬件设计实战经验
基于PowerQUICC III设计硬件,有几个“坑”是前人踩过,我们必须绕开的:
电源序列与监控:MPC8560需要1.2V(核心)、2.5V(DDR)、3.3V(IO)等多路电源,并且对上电、下电的序列有严格要求。通常要求核心电压先于IO电压建立,下电时则相反。必须使用支持时序控制的电源管理芯片,并在设计阶段就用仿真工具验证序列。同时,芯片内部有热敏二极管,需要设计外部电路进行温度监控,防止过热降频或损坏。
时钟网络设计:芯片需要多个时钟源:e500核心时钟、CPM时钟、DDR内存时钟、PCI时钟、RapidIO时钟等。它们可能来自同一个晶振通过PLL倍频,也可能来自不同的源。必须仔细阅读数据手册的“时钟配置”章节,确保每个时钟域的频率和相位关系符合要求。特别是当使用RapidIO或高速PCI-X时,参考时钟的抖动必须非常小。
PCB布局与信号完整性:
- BGA扇出:783脚的FC-BGA封装,引脚间距小,需要采用多层板(通常8层以上)和激光微孔技术进行扇出。电源和地引脚要分配足够的过孔,确保低阻抗回路。
- DDR布线:这是挑战最大的部分。需要做到数据线、地址/控制线各自的等长匹配,组内误差通常控制在几十mil以内。需要严格的阻抗控制(通常是50欧姆单端,100欧姆差分)。建议使用EDA工具的约束管理器,并在布线后进行SI仿真。
- 高速差分对:RapidIO的LVDS信号对、千兆以太网的RGMII信号,都需要按差分线规则布线,保持线对紧耦合,并与其他信号保持足够间距以避免串扰。
- 去耦电容:在芯片每个电源引脚附近放置适当容值(如0.1uF和10uF组合)的陶瓷电容,这是保证电源干净、抑制高频噪声的基础。布局上要尽可能靠近引脚。
Boot启动配置:PowerQUICC III上电后,会通过一组特定的配置引脚(如
PORCFG,LCS0等)的电平状态,来决定从哪个设备(NOR Flash, NAND Flash, PCI等)启动,以及初始的时钟频率、内存控制器模式等。这些配置引脚通常通过电阻上拉或下拉。务必在PCB上预留这些电阻的位置,哪怕你目前只用一种启动方式。这在调试和未来升级时会非常有用。
4. 软件开发与调试实战指南
硬件设计只是第一步,让芯片跑起来并发挥效能,软件是关键。围绕PowerQUICC III的软件开发,是一个从底层引导程序到上层应用的完整生态。
4.1 引导程序与内核移植
U-Boot:这是最常用的引导加载程序。飞思卡尔通常会提供针对其评估板的U-Boot移植版本。我们需要做的是将其适配到自己的硬件上。主要修改点包括:
- 板级初始化文件:在
board/freescale/目录下创建你自己的板级目录。最关键的是实现board_early_init_f(早期初始化,如配置锁相环、时钟)和board_init函数(配置内存控制器、本地总线等)。这里需要对照你的硬件原理图,正确设置内存控制��的时序参数寄存器,这是系统能否启动的第一道坎。 - 设备树:这是现代Linux内核用于描述硬件拓扑的标准。你需要创建一个
.dts设备树源文件,详细描述你的CPU型号、内存大小和地址、CPM下各个控制器(如以太网、串口)的基地址、中断号、PHY连接方式等。设备树编译后生成的.dtb文件会被U-Boot传递给内核。一个常见错误是中断号设置不对,导致内核无法正确识别并驱动设备。 - 环境变量:配置U-Boot的启动命令,比如从NOR Flash加载内核镜像和设备树到内存的特定地址,然后启动内核。
- 板级初始化文件:在
Linux内核:飞思卡尔维护着PowerPC架构的内核分支。你需要选择合适版本的内核(例如2.6.x或较新的版本),并配置开启对e500核心、MPC85xx系列处理器以及你所用外设(如
fsl_elbc、gianfar以太网驱动、fsl-cpm系列CPM驱动)的支持。- CPM驱动:这是重点。内核中的
fsl-cpm驱动是一个框架,它管理CPM的共享DPRAM、RISC引擎的微码加载以及为具体的协议驱动(如fsl_scc用于SCC,ucc_geth用于某些以太网)提供基础服务。你需要确保在设备树中正确启用了CPM节点,并且相关协议驱动能成功关联到对应的硬件资源。 - 网络驱动:对于集成的TSEC(千兆以太网),驱动是
gianfar。你需要确保设备树中描述了MAC地址、PHY模式(RGMII/MII等)、PHY ID和中断。对于CPM管理的FCC以太网,则有对应的ucc_geth驱动,配置更为复杂,涉及CPM内部参数表和微码。
- CPM驱动:这是重点。内核中的
4.2 CPM微码与通信协议栈
CPM的RISC引擎需要运行微码才能工作。飞思卡尔会提供编译好的二进制微码文件(通常是.bin或.hex格式)。在系统启动时,U-Boot或Linux驱动需要将这些微码加载到CPM的指令内存中。
- 微码加载:通常通过U-Boot命令完成,例如
cpdm load 0xaddr,或者由Linux内核驱动在初始化时自动加载。必须确保加载的地址与驱动中期望的地址一致。 - 协议配置:以配置一个FCC为百兆以太网为例,你需要进行一系列操作:
- 在设备树中启用该FCC,并指定其为“以太网”模式。
- 在Linux用户空间或驱动初始化代码中,通过CPM的通用接口(通常是IOCTL调用)设置该FCC的具体参数:波特率、MII/RMII模式、连接的PHY地址、双工模式等。
- 驱动会配置CPM内部的参数RAM,建立发送和接收的缓冲区描述符环。这个描述符环就存放在共享的DPRAM中,描述了每个数据包在内存中的位置和状态。
- 数据流:当网络数据包到达时,PHY芯片通过MII接口传给FCC,FCC的硬件根据微码指令自动将数据DMA到主内存的缓冲区中,并更新接收描述符。然后触发一个中断给e500核心。Linux网络驱动在中断服务例程中,读取描述符,找到数据包,将其组装成
sk_buff结构,并提交给内核的网络协议栈。发送过程相反。
4.3 性能调优与调试技巧
中断亲和性与负载均衡:如果系统负载很重,可以将不同的网络接口(如两个TSEC)的中断绑定到不同的CPU核心上(如果e500支持多核,或者未来考虑多核处理器),避免单个核心被中断淹没。在Linux中可以使用
irqbalance工具或直接写/proc/irq/XX/smp_affinity文件来设置。NAPI机制:确保内核网络驱动使用了NAPI。在高流量下,NAPI会从纯粹的中断模式切换到轮询与中断结合的模式,减少中断次数,提升吞吐量。检查驱动代码或模块参数,确认NAPI已启用。
缓冲区与队列调整:通过
ethtool工具可以调整网络驱动的环形缓冲区大小。增加接收和发送环的深度,可以应对突发流量,减少丢包,但会略微增加延迟。需要根据实际流量模式进行权衡。CPM性能监控:CPM内部有一些性能计数器,可以统计特定FCC或SCC的收发帧数、错误数等。飞思卡尔通常会提供工具或驱动接口来读取这些计数器。在调试性能瓶颈或丢包问题时,这是定位问题在硬件(CPM)还是软件(驱动或协议栈)的关键依据。
使用JTAG调试器:当系统无法启动(“变砖”)时,JTAG是最后的救命稻草。通过JTAG调试器,你可以:
- 停止CPU,检查并修改任何寄存器的值。
- 单步执行Bootloader代码,查看在哪里跑飞。
- 直接读写内存,用于恢复被意外擦除的Flash内容。
- 下载并运行简单的测试程序,验证内存、总线等基本功能。强烈建议在硬件设计阶段就留好标准的JTAG接口。
5. 常见问题排查与避坑指南
在实际开发和部署中,你一定会遇到各种各样的问题。下面是一些典型问题的排查思路和解决方案,很多都是我和同事们用时间和汗水换来的经验。
5.1 系统启动失败类问题
| 现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| 上电后无任何输出,JTAG也无法连接 | 1. 电源问题(电压不对、序列错误) 2. 复位电路问题 3. 核心时钟未起振 | 1. 用万用表和示波器测量所有电源引脚电压,确保在上电时序内达到额定值且纹波在范围内。 2. 检查复位引脚的电平,确保上电后能正确释放复位信号。 3. 用示波器测量核心时钟输入引脚,确认晶振或时钟发生器有输出且频率正确。 |
| U-Boot能启动一部分,但卡在内存初始化 | 1. DDR内存控制器配置参数错误 2. PCB布线问题导致信号完整性差 3. 内存颗粒型号不兼容或损坏 | 1. 对照内存颗粒数据手册,逐项检查U-Boot中内存控制器的时序寄存器值(如tRCD,tRP,tRAS,tWR等)。可以先尝试使用最保守(数值最大)的时序。2. 使用JTAG在内存初始化前后,读取内存控制器的状态寄存器,查看是否有错误标志。 3. 如果条件允许,用示波器或逻辑分析仪抓取DDR的时钟和数据线信号,看眼图是否张开,有无严重过冲或振铃。 |
| U-Boot启动正常,但加载内核时失败或跑飞 | 1. 内核镜像或设备树文件损坏 2. 内核加载地址与编译时指定的地址不匹配 3. 设备树描述与硬件严重不符 | 1. 使用U-Boot的md命令检查Flash中内核镜像的CRC,与编译生成的CRC对比。2. 确认U-Boot的 bootm命令加载的地址与内核链接脚本中的入口地址一致。3. 简化设备树,先只保留CPU和内存节点,确保内核能走到串口输出。再逐步添加其他设备节点。 |
5.2 网络功能异常类问题
| 现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
以太网接口无法link up | 1. PHY芯片未正确初始化或损坏 2. MDIO/MDC管理总线通信失败 3. RGMII/MII接口时序或布线问题 | 1. 在U-Boot或Linux下,尝试通过MDIO命令读取PHY的寄存器(如状态寄存器),看是否能读到正确的厂商ID和状态。 2. 用示波器检查MDIO和MDC线上是否有波形,确认通信正常。 3. 检查设备树中PHY的地址是否正确,以及 phy-mode属性是否与硬件连接一致(如rgmii-id)。 |
接口能link up,但无法收发数据包 | 1. DMA描述符环未正确建立 2. 中断未正确注册或触发 3. CPM微码未加载或加载错误 | 1. 使用ifconfig ethX查看是否有RX/TX错误计数。使用ethtool -S ethX查看更详细的驱动统计信息。2. 检查 /proc/interrupts,确认该网络接口的中断号是否有触发计数。3. 确认CPM微码已加载。可以尝试在U-Boot下重新加载微码,并重启接口。 |
| 吞吐量不达标,或高速时大量丢包 | 1. 中断处理瓶颈 2. 内存带宽不足 3. 缓冲区设置过小 4. 协议栈或驱动有��能瓶颈 | 1. 使用top或mpstat命令查看CPU使用率,特别是软中断si的比例是否过高。考虑启用NAPI或调整中断亲和性。2. 进行内存带宽测试,确保DDR性能正常。 3. 使用 ethtool -G ethX增大环形缓冲区大小。4. 尝试使用 ping大包进行测试,如果大包性能正常而小包性能差,很可能是中断开销太大。可以考虑使用内核的CONFIG_PREEMPT或CONFIG_PREEMPT_RT补丁来降低延迟。 |
5.3 CPM相关疑难杂症
| 现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| 配置了SCC为UART,但无法收发数据 | 1. SCC的时钟源未启用或分频比错误 2. 引脚复用配置错误,SCC功能未映射到正确引脚 3. 波特率生成器参数计算错误 | 1. 检查设备树和初始化代码,确认CPM的BRG时钟源已使能,并为该SCC分配了正确的BRG。2. 查阅芯片手册的“I/O Multiplexing”章节,确认用于UART TX/RX的引脚已被配置为SCC功能,而非普通GPIO或其他功能。 3. 根据输入时钟频率和期望的波特率,重新计算并设置波特率生成器的除数。 |
| FCC配置为HDLC模式,链路协议始终无法建立 | 1. HDLC帧的Flags、CRC模式配置不一致 2. 时钟同步问题(对于同步HDLC) 3. 缓冲区描述符链断裂或配置错误 | 1. 使用示波器或逻辑分析仪抓取线路上的实际波形,与期望的HDLC帧格式对比。确认双方使用的CRC是16位还是32位,是否启用位填充。 2. 对于同步链路,确认收发两端的时钟源(主从模式)设置正确,且时钟信号质量良好。 3. 在驱动中增加调试信息,打印每个收发描述符的状态,确认DMA操作是否成功完成。 |
最后分享一个关于功耗和散热的小技巧:PowerQUICC III在满负荷运行时发热量不小。除了必要的散热片,在软件上可以通过动态调整CPU频率和电压来降低功耗。e500核心支持动态频率切换。在Linux中,可以配置CPUfreq驱动,根据系统负载在几个预设的频率点之间切换。在流量较低的时段自动降频,既能节能,也能降低核心温度,提升系统长期运行的可靠性。不过,改变CPU频率时,需要注意一些总线(如CPM、TSEC)的时钟可能与CPU时钟同源或成比例关系,频率变化不能影响这些外设的正常工作,需要在设备树和驱动中做好关联配置。