【问题标题】:Do NaN-boxing and tagged pointers have a future on 64bit platforms?NaN 装箱和标记指针在 64 位平台上有前途吗?
【发布时间】:2019-11-09 11:09:06
【问题描述】:

在 x86-64 和 arm64 等常见的 64 位架构上,通常只有 48 位用于内存寻址,而其他位是第 47 位的副本(对于用户空间程序,通常为零)。因此,剩余的 16 位可用于存储附加数据,如类型标签等,只要这些位在取消引用之前被屏蔽即可。或者,48 位可以适合 64 位浮点数的 NaN 表示。动态/解释语言经常使用这两种技术。

我读过有关英特尔 5 级分页的信息,它将地址范围从 48 位扩展到 57 位,从而显着减少了剩余位,并使 NaN-boxing 成为不可能。 Linux 内核已经添加了对这种分页方案的支持。

鉴于 48 位对应于 262,144 GiB 的内存,我们可以假设我们不会很快在个人电脑、笔记本电脑和手机等消费设备上需要 57 位范围,因此人们可能会假设在这些设备上我们将保留48 位模式在很长一段时间内,上述技术仍然可行,而 57 位模式将仅用于服务器/超级计算机。

我做出这些假设是否正确?或者是否有迹象表明,在不久的将来,即使是消费级设备也会使用 57 位模式?

【问题讨论】:

    标签: pointers language-agnostic 64-bit x86-64 arm64


    【解决方案1】:

    即使内存映射的持久存储变得普遍 (NV-DIMM),消费 PC 也需要一段时间才能拥有超过 64TiB 或 128TiB 的存储 + DRAM。请记住,高半内核需要一半的虚拟地址空间供内核使用,并且通常希望将所有物理内存直接映射到一个连续的虚拟地址范围。 以及我认为在内核空间中进行其他映射。例如请参阅https://www.kernel.org/doc/Documentation/x86/x86_64/mm.txt 了解 Linux 的功能。

    正如您所怀疑的,操作系统实际上不会在物理地址空间远小于 256TiB 的计算机上启用 PML5。不需要那么多虚拟地址空间,并且它具有性能成本(从另一级页表进行更昂贵的页面遍历)。 page-walk 硬件并不总是能够缓存两个实际使用的顶级条目。 CR3 更改中所有内容的失效可能会强制刷新。 (Page-walk 硬件通常可以缓存基数树的上层,以加速附近页面的 TLB 未命中。)

    【讨论】:

      猜你喜欢
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-07
      • 2013-05-25
      • 2014-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多