Android15 试图推的 16K 内存页究竟能有多少收益

3 天前
 jim9606

虽说目的是提升性能,但感觉为了这个提升(Google 自己的数据都没 10%)修改的代价有点大啊:

  1. 原生库需要重新编译,可能需要修改代码以支持动态页大小,代码段需要 16K 对齐
  2. 16K 页表只能全局启用,不允许 4K 页应用与 16K 页应用混合运行,因为 Linux 不支持
  3. 只有高版本 NDK 和 AGP 支持,老版 NDK 不一定能通过改链接选项实现兼容

考虑下收益,感觉完全看不到能推下去的可能性,哪怕有是 Play 市场来推,要求升级 NDK 可比升级 Target 难多了。

3151 次点击
所在节点    Android
15 条回复
seers
3 天前
应该是为了匹配越来越大的 ram ,不然怎么看都像是小马拉大车,只能说战未来了
kenvix
3 天前
难评,x86 高性能计算这么多年来了还是 4K 页,不知道为什么嵌入式反而这么积极
billccn
3 天前
@seers 应该和内存大小无关,服务器是手机几十倍内存还不都是 4k page 。因为 page table 是多层的,所以可容纳的页面数量一般超过 CPU 的硬件寻址限制。


Android 推这个应该是处于功耗的考虑,因为页面变成 4 倍大,那 page fault 可能就会变成原来的 1/4 概率。另外大多数 Android 设备的 swap 不是硬盘,而是 zRAM ,压缩解压也挺费电的,操作次数越少越好咯。我想 16K 的压缩比可能也比 4K 好一点
ziseyinzi
3 天前
就是实验性支持一下吧,为 Android 25 做铺垫。
ysc3839
3 天前
感觉是跟苹果的风
imluvian
3 天前
这是给汽车用的。汽车上要开 inline ecc ,能差很多。
Venjer
3 天前
面向未来,15 也不是强制打开的。开发者模式才能打开,估计至少得 5 年-8 年才能慢慢强制。可以参考 32 位- 64 位 app 的过度时间
Flyfish233
3 天前
我有个应用虽然东西多,但是用的都是开源库,自己扒拉扒拉已经可以正常使用 16k page ,有个开发者问我怎么搞不了,我让他发 Libchecker ,一看用了一个华为闭源库。我认为国内会很难推广,而且这个不一定像 64 位这么好推了
jim9606
3 天前
@seers
大页的好处是提高 TLB 命中率和减小页表,坏处是可能加剧伪共享和碎片内存浪费(这会导致某些假定 4K 页的多线程优化变成负优化),是个有 tradeoff 的选择

@Venjer
这跟迁移 64 位不太一样,现在迁移 64 位态度强硬是因为上游 ARM 的新公版 IP 核去掉了 AArch32 支持,在这之前迁移态度并不强硬,所以不算是 google 自己决定的,虽然肯定是跟 ARM 在 roadmap 上通过气。而这个 16K 页并不需要硬件支持,纯是 google 自己决定了。
国内迁个 arm64 都那么费劲,别说这种不影响可用性的调整了。
V28a19cc
2 天前
目前是零收益,因为目前切换 4K/16K 需要格式化 data 。
Metre
2 天前
这几年 arm 的 linux 的 64K page_size 已经把我适配吐了
GeekGao
2 天前
一方面为了匹配更大的内存需求,另一方面提升内存管理效率:16KB 页面大小比 4KB 大 4 倍, 意味着内存管理单元(MMU)需要处理的页面表项减少了 4 倍,Android 性能和效率方面将会获得显著提升。
Rorysky
1 天前
@billccn 那为什么不直接搞 64k
billccn
1 天前
@Rorysky 我也想知道,因为 16K 确实有点鸡肋。

我唯一能想到的是苹果 M 系列芯片用的是 16K ,算是 Arm 生态里面的可借鉴的经验?
jim9606
11 小时 3 分钟前
@Metre 这玩意难处在哪?我看的文章说有源码的话改掉硬编码 4k 的部分然后重新编译就行。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1073271

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX