4、内存调优:内存带宽与延迟、内存压缩技术、Swap与ZRAM配置

内存调优这件事,说实话,在平板电脑上比在手机上更讲究。手机内存不够了,系统会直接杀后台,用户顶多骂一句。但平板不一样,用户可能正在分屏写文档、看视频、开浏览器查资料,后台一杀,体验直接崩。

所以,内存调优的核心就三个字:省着用、快着用、兜着用。下面我一个个拆开讲。

4.1 内存带宽与延迟:别让CPU饿着

先聊带宽和延迟。这两个参数,决定了CPU能不能吃饱饭。

带宽,说白了就是内存这条“水管”有多粗。水管越粗,单位时间内流过的数据就越多。平板常用的LPDDR4X或LPDDR5,带宽一般在20~40GB/s之间。如果你跑的是4K视频解码或者大型游戏,带宽不够,CPU就得等着数据从内存里慢慢挪过来——这叫“stall”,也就是CPU空转。

延迟呢,就是水管有多长。数据从CPU发请求到内存返回,中间有个时间差。LPDDR的延迟通常在80~120纳秒。别小看这几十纳秒,累积起来,性能差距就出来了。

关键点:带宽决定吞吐,延迟决定响应。游戏和实时任务更吃延迟,视频和文件处理更吃带宽。

我在项目中遇到过一件事。某款平板跑《原神》,帧率死活上不去。查了半天,发现是内存控制器配置有问题——带宽分配策略太保守,GPU抢不到足够的数据通道。后来调整了DDR的QoS优先级,帧率直接提升了15%。

调优建议:

  • 检查内存频率是否跑到了标称值。很多厂商为了省电,默认降频跑。
  • 确认内存通道数。双通道比单通道带宽翻倍,别浪费。
  • 调整内存控制器中的“读优先”或“写优先”策略,根据负载类型做取舍。

4.2 内存压缩技术:ZRAM与ZSWAP

内存不够用怎么办?加物理内存当然最好,但成本摆在那。所以就有了内存压缩技术。

ZRAM,是我个人最喜欢的一个方案。它把一部分内存划出来,做成一个压缩块。当系统内存紧张时,不常用的页面会被压缩后存到ZRAM里。压缩比通常在2:1到3:1之间,也就是说,原本占3MB的数据,压缩后只占1MB。

你想想看,这相当于白嫖了2倍的内存空间。代价是什么?压缩和解压缩需要CPU算力。不过现在的ARM芯片,像骁龙8系列、天玑9000系列,都有硬件压缩加速器,基本感觉不到性能损耗。

我的习惯:ZRAM大小一般设为物理内存的25%~50%。比如8GB内存,ZRAM给2GB~4GB。太小了效果不明显,太大了CPU压缩负担重。

ZSWAP呢,和ZRAM有点像,但它不是把压缩数据存在内存里,而是存在一个后端设备上——比如闪存。说白了,它是个带压缩功能的Swap。ZSWAP的好处是,压缩后的数据可以写到闪存里,进一步释放内存。但闪存的写入寿命和速度是个瓶颈,我不太建议在平板上用ZSWAP,除非你用的是UFS 3.1以上的高速闪存。

配置示例:

# 启用ZRAM,大小2GB
echo 2G > /sys/block/zram0/disksize
mkswap /dev/zram0
swapon /dev/zram0

# 设置压缩算法(推荐lz4或zstd)
echo lz4 > /sys/block/zram0/comp_algorithm

嗯,这里要注意:压缩算法选lz4还是zstd?lz4速度快,压缩率一般;zstd压缩率更高,但稍微吃一点CPU。我个人偏向zstd,因为现在芯片性能过剩,省内存比省CPU更划算。

4.3 Swap与ZRAM配置:别让系统卡死

Swap,就是拿闪存当内存用。听起来很美好,但闪存的读写速度比内存慢了几百倍。一旦系统开始频繁Swap,卡顿就来了。

我曾经调试过一台平板,用户反映“打开微信后切回桌面,桌面要重新加载”。一看日志,Swap使用率100%,系统在疯狂地把桌面进程换出到闪存里。这就是典型的“内存颠簸”。

避坑指南:我曾经把Swap分区设得太大,结果系统一跑多任务,闪存写入量暴增,不仅卡,还加速了闪存老化。后来我学乖了——Swap只作为最后的兜底方案,不要依赖它。

配置建议:

  • Swap大小:物理内存的0.5~1倍。8GB内存,Swap给4GB~8GB就够了。
  • Swappiness值:这个参数控制系统多倾向于使用Swap。默认是60,对于平板,我建议调到10~30。越低,系统越优先用物理内存,减少闪存写入。
  • ZRAM + Swap组合:先让ZRAM压缩,实在不够了再走Swap。这样大部分内存压力被ZRAM消化掉,Swap只处理极端情况。

配置示例:

# 设置swappiness为20
echo 20 > /proc/sys/vm/swappiness

# 查看当前Swap使用情况
cat /proc/swaps

# 关闭Swap(如果配置不合理,先关掉再重配)
swapoff /dev/zram0

为什么swappiness要调低?你想想看,平板用户的使用场景是“多任务并行”,而不是“单任务跑满”。系统如果太积极地把内存页面换出去,用户切回应用时就得重新加载,体验很差。调低swappiness,就是告诉系统:“尽量别动我的内存,除非真的撑不住了。”

4.4 实战调优流程

最后,我总结一套我常用的调优流程,你可以直接拿去用:

  1. 先测基线:用memtester或stressapptest跑一遍,确认内存带宽和延迟是否达标。
  2. 配置ZRAM:大小设为内存的30%,算法选zstd。
  3. 调整swappiness:设为20,观察一周,看是否有应用被异常杀掉。
  4. 监控Swap使用率:如果Swap使用率长期超过50%,说明物理内存确实不够,考虑增大ZRAM或升级硬件。
  5. 压力测试:同时开10个应用,来回切换,看是否有卡顿或重载。

一句话总结:内存调优不是堆参数,而是找到“压缩、换出、保留”三者之间的平衡点。ZRAM是主力,Swap是备胎,swappiness是油门。调好了,平板能多撑两年不卡。

好了,这一章就到这里。下一章我们聊聊存储调优——闪存的读写策略和文件系统选择,那又是另一门学问了。