试用ARM MTE

前几天, 我了解到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年研究生入学后就开始关注内存标签技术, 现在看到它真的落地应用了, 还是非常开心的。

参考资料:

  1. https://googleprojectzero.blogspot.com/2023/11/first-handset-with-mte-on-market.html

发表评论

注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)

本文链接:https://twd2.me/archives/18383QrCode