1. Exynos概述:从手机到汽车,三星的“芯”路历程

大家好,我是你们这堂课的老朋友。今天咱们聊聊Exynos。说实话,我入行那会儿,三星的芯片还没这么大动静。一晃十几年过去,Exynos已经成了移动端和汽车端都绕不开的名字。我个人习惯,讲一个芯片之前,先看看它从哪来,到哪去。这样你才能理解它为什么这么设计。

1.1 Exynos处理器发展史:一部移动计算的进化简史

Exynos这个名字,其实是希腊语“exypnos”(聪明)和“prasinos”(绿色)的组合。嗯,绿色是三星的品牌色。但它的故事,得从更早说起。

  • 2010年:初代Exynos 3110。代号“蜂鸟”。当时用在三星Galaxy S上。单核Cortex-A8,45nm工艺。我那时候还在做嵌入式Linux移植,第一次跑这个芯片,感觉比同期的高通QSD8250流畅不少。说白了,起步就挺高。
  • 2011年:Exynos 4210。双核Cortex-A9。Galaxy S2用的就是它。我记得当时有个坑——它的GPU是Mali-400 MP4,驱动在Linux内核里还不完善。我曾经为了调一个图形渲染的帧率问题,熬了三个通宵。嗯,那会儿的调度器还没现在这么智能。
  • 2012-2013年:Exynos 5410/5420。划时代的big.LITTLE架构来了。4个Cortex-A15大核+4个Cortex-A7小核。你想想看,一个手机里塞了两种不同性能的核,怎么调度?这直接催生了后来的HMP(异构多处理)调度器。我在项目中遇到过,如果调度策略没写好,大核空转,小核累死,功耗反而更高。
  • 2015年:Exynos 7420。三星第一次用上14nm FinFET工艺。4个Cortex-A57+4个Cortex-A53。性能功耗比大幅提升。我个人觉得,这是Exynos的巅峰之作之一。
  • 2017年至今:Exynos 9系列、Exynos 2100/2200。开始引入自研的Mongoose核心(后来放弃了),再到回归ARM公版架构。最新的Exynos 2200甚至集成了AMD RDNA2架构的GPU。为什么?因为汽车端需要更强的图形和计算能力。

核心观点:Exynos的发展史,其实就是一部移动处理器从“单核够用”到“多核异构”再到“全场景融合”的进化史。每一次架构变革,都直接影响了Linux内核调度器的设计方向。

1.2 Exynos芯片架构概览:不只是CPU的堆叠

很多人以为Exynos就是几个CPU核拼在一起。其实没那么简单。我拆解一个典型的Exynos SoC(比如Exynos 2100),你看看它内部有多复杂。

组件 说明 调度关注点
CPU集群 1个Cortex-X1超大核 + 3个Cortex-A78大核 + 4个Cortex-A55小核 大小核负载均衡、DVFS调频策略
GPU Mali-G78 MP14(或AMD RDNA2) GPU与CPU的同步、帧率调度
NPU 神经网络处理单元 异步任务调度、内存带宽争抢
DSP 数字信号处理器 低延迟实时任务
ISP 图像信号处理器 高吞吐、流水线调度
Modem 5G基带 硬实时、中断优先级
内存控制器 LPDDR5 带宽分配、延迟敏感

你看,一个Exynos芯片里,CPU只是冰山一角。真正的调度难题,在于怎么让这些不同特性的计算单元协同工作。我曾经在调一个NPU+CPU的协同任务时,发现NPU在等CPU喂数据,CPU却在等NPU释放总线。说白了,就是调度没对齐。

避坑指南:做Exynos调度优化,千万别只盯着CPU。要时刻问自己:当前这个任务,是CPU密集?GPU密集?还是NPU密集?不同的计算单元,调度策略完全不同。我曾经因为忽略了ISP的实时中断,导致相机预览掉帧,查了三天才发现是中断亲和性没设对。

1.3 Exynos在移动端与汽车端的应用:两个世界,一个内核

Exynos最早是给手机用的。但这些年,它开始往汽车里跑。你想想看,这两个场景对调度的要求,简直是天壤之别。

移动端:追求“快”与“省”的平衡

  • 场景特点:用户交互频繁、任务突发性强、功耗敏感(电池续航)。
  • 调度挑战:怎么在用户点开App的瞬间,把大核“唤醒”并迅速进入高性能状态?怎么在刷微博这种轻负载下,把任务都赶到小核上,让大核休眠?
  • 我的经验:在Exynos 9820上,我做过一个优化——把触摸中断的CPU亲和性绑定到Cortex-A55小核上。为什么?因为触摸响应要求极低延迟,但处理逻辑简单。如果扔给大核,大核要从深度睡眠醒来,反而更慢。嗯,这里要注意,不是所有任务都适合跑大核。

汽车端:追求“稳”与“安全”

  • 场景特点:实时性要求极高(刹车、转向)、任务确定性优先、7x24小时运行。
  • 调度挑战:怎么保证一个紧急制动任务,在任何情况下都不会被其他任务抢占?怎么隔离关键任务和非关键任务,防止“吵闹邻居”效应?
  • 我的经验:在Exynos Auto V9上,我参与过虚拟化方案的调度设计。汽车端必须用硬件隔离+软件分区。我曾经在测试中发现,一个娱乐系统的视频解码任务,因为内存带宽争抢,导致仪表盘的渲染延迟增加了20ms。这在手机上无所谓,在车上就是安全隐患。

警告:移动端的调度优化经验,不能直接照搬到汽车端。在手机上,你可以为了省电让大核“偷懒”;在汽车上,你必须保证关键任务在任何情况下都能按时完成。这是两种完全不同的设计哲学。

好了,这一章我们快速过了一遍Exynos的来龙去脉。从单核到多核,从手机到汽车,Exynos的架构越来越复杂,调度优化的空间也越来越大。下一章,我会带大家深入Linux内核的调度器源码,看看Exynos的big.LITTLE到底是怎么被调度起来的。到时候,咱们手把手调一个实际案例。

记住一句话:理解芯片架构,是做好调度优化的第一步。你连芯片里有什么核、核之间怎么通信都不知道,谈何优化?