前几天, 我了解到Google Pixel 8 (Pro)搭载了Google Tensor G3芯片, 实现了ARMv9指令集, 支持ARM MTE扩展(Memory Tagging Extension, 内存标签扩展)。然后, 我又看到一篇文章[1], 讲如何在系统中开启这个ARM MTE扩展来检测内存破坏、保护内存安全。于是, 为了测试这一功能, 我斥巨资下单了一台Google Pixel 8 Pro 512GB, 并于今日到货。
开启开发者模式之后, 我发现图形界面里有开启MTE的选项, 但是似乎只是开启全局的MTE功能, 每个App还是默认关闭的, 如下图所示。
然后, 我按照[1]中所述的命令配置了全局默认开启MTE, 并安装了Nick Cao推荐的Sanitizer Test App来测试。经测试, MTE功能有效果, 好用, 如下图所示。从log中可以看出, MTE检测到了标签不匹配的情况, 并发送SIGSEGV信号杀死了进程。
此外, 我还用Geekbench测试了一下关闭和开启MTE之间的性能差异, 如下所示。不知道为什么多核性能在开启MTE之后反而变好了, 可能是由于测量误差、温度、电源等原因(?)。
单核测试结果显示, 整体而言, 开启MTE会引入约7%的额外开销。其中, 额外开销较大的测例为PDF Renderer、Clang以及Text Processing, 相应的额外开销达到了20%以上。我猜测是这几个测例中会分配大量细碎的对象。
另外, 注意到测试报告中显示的可用内存, 开启MTE后, 可用内存减少了11.33GiB – 10.97GiB = 0.36GiB。这与MTE的12GiB × 4b/16B = 0.375GiB的理论内存额外开销是基本相符的。
最后, 我还看了一下CPU的基本信息, 发现PA、BTI和MTE等安全特性都有支持:
总结而言, 我从2019年研究生入学后就开始关注内存标签技术, 现在看到它真的落地应用了, 还是非常开心的。
参考资料:
发表评论