标签 ARM 下的文章

Facebook 将在欧洲雇佣一万人打造 VR 元宇宙

Facebook 计划未来五年内在欧盟范围内 雇佣 1 万名员工。开发一个从一开始就以欧洲价值观制作的元宇宙。Facebook 希望元宇宙是“一组虚拟空间,你可以与其他不在同一物理空间的人一起创造和探索”。它说,“没有一家公司会拥有和运营元宇宙。像互联网一样,它的关键特征是其开放性和互操作性。”向欧盟寻找人才的另一个原因是,那里的政策制定者正试图确保技术进步仍然符合欧洲的价值观。它在 9 月宣布,将拨出 5000 万美元的专款来建设元宇宙。

老王点评:元宇宙概念很火,但是元宇宙可能离我们还很远,Facebook 这是个画了一个大饼。

REvil 团伙在其站点被黑后再次陷入了沉寂

曾致使数千家美国企业感染了勒索软件的 REvil 团伙,在各方打击下曾经在 7 月份销声匿迹。然而 9 月份时,它又再次复出,并攻击了几十家公司。该组织一直在使劲招募壮大自身、并向第三方攻击者兜售其攻击服务。不过,最近安全专家们发现,它的 Tor 支付门户和数据泄露博客被黑后再次转入了沉寂。目前尚不清楚到底是谁破坏了 REvil 的服务器。之前有报道,在 7 月的 Kaseya 攻击事件后,美国联邦调查局就获得了该组织的加密密钥。

老王点评:更具体的情况 就像小说一下,比我这里说的更精彩。

ARM 公司将其芯片设计的虚拟模型放在云端供开发者测试

ARM 的虚拟硬件产品 是名为“ARM 物联网整体解决方案”的新产品组合的一部分。ARM 希望让开发者在物联网应用(如汽车、机器人和冰箱)的编码方面 取得先机,开发者可以在物理硬件到达他们手中之前编写和测试应用程序。历史上,一切都是按顺序进行的,ARM 向芯片供应商发布芯片设计 IP,在开始开发应用程序之前,需要等待三年。而现在,芯片设计和软件开发几乎可以并行进行,开发者可以在没有硬件的情况下在云中进行。这是 ARM 公司第一次提供虚拟硬件。

老王点评:这可以大大加快硬件投入生产和应用的时间,希望更多的芯片也可这样做。

在 Box64 模拟器的帮助下,在 ARM 设备上运行 x64 Linux 程序。想试试吗?

Box86 是一个流行的 X86 模拟器,刚进行了一次巨大的升级。发布了 Box64,也就是对应的 ARM64 版本。

可能你还不了解这个模拟器,Box64\_86 允许你在 ARM 系统上运行 32 或 64 位的 X86/64 Linux 程序。换句话说,它能让你在树莓派或者 树莓派替代品 上运行 Linux 桌面程序。

幸运的是,现在我们有 Box86 和 Box64 的支持,无论你的 ARM 系统是什么类型。

Box64 是什么?

你可能听说过苹果的 Rosetta 2,它是一个翻译层,允许为老款 Mac(Intel X86 处理器)设计的应用程序在新的 M1(ARM 处理器)驱动的 Mac 上运行。Box64 与之类似,允许为 X86 设计的应用程序运行在 ARM Linux 设备上。

由于它的 Dynarec 模块,它能够做到这一点,同时又是 100% 开源的、免费的,而且速度惊人。它通过重新编译 ARM 程序来提升速度,这意味着和其他 ARM 原生应用一样快。

但是,即使 Box64 无法重新编译应用,它仍然可以使用即时模拟,也有令人印象深刻的结果。

许多树莓派用户很熟悉 Box86,这是一个大约一年前发布的类似程序。二者最大的区别是 Box86 只兼容 Arm32,而 Box64 只兼容 Arm64。

这就是 Box64,一个非常棒的兼容层,允许你在 ARM 电脑上运行 x86\_64 应用。

总结

如果你问我认为 Box64 怎么样,我会说这是一个绝对的游戏规则改变者。在难以置信的性能和巨大的潜力之间,这个兼容层肯定会在未来的 ARM 电脑中扮演一个重要角色。

如果你想知道它的工作原理,以及如何开始使用它,请查看其 GitHub 页面

就这样吧,现在你自己去潜入其中并测试吧。

你觉得 Box64 怎样?写下你的评论让我知道。


via: https://news.itsfoss.com/box64-emulator-released/

作者:Jacob Crume 选题:lujun9972 译者:zde200572 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

苹果高管表示,iMessage 是人们不给孩子用安卓手机的原因

在 Epic Games 和苹果之间的法律战相关的法庭文件中,披露了苹果认为 iMessage 只存在于 iOS、iPadOS 和 macOS 平台上对于苹果有多重要。苹果软件工程高级副总裁、负责 iOS 系统的高管表示,“iMessage 移植到安卓上就会消除 iPhone 家庭给孩子使用安卓手机的障碍。”而负责 App Store 的苹果高管称,“将 iMessage 转移到安卓系统对我们的伤害大于帮助。”

可能在国外他们会依赖于 iMessage 吧,在国内,有多少人用这个呢?

微软开源了一个红蓝队网络攻防软件,以培养 AI 来进行网络防御

微软开源了一款软件 CyberBattleSim,可以让机器学习驱动的网络入侵者与虚拟网络内的自动防御者展开对决。该软件设置了装满漏洞和其他弱点的伪装网络,AI 攻击者会学习如何找到并利用漏洞在网络中传播,而 AI 防御者则试图检测恶意活动并缓解攻击。在过去的一年里,微软一直在运行该系统来模拟攻击。

这是一个很有意思的尝试,以后的网络攻击会越来越由 AI 驱动而不是由经验丰富的人类驱动,相应的,防御也会由 AI 接手,我们离科幻小说里面的场景越来越近了。

arm64 成为 FreeBSD 的一级支持架构

FreeBSD 项目宣布,从 FreeBSD 13 起 arm64 升级为一级支持架构,这意味着在 FreeBSD 13 的整个生命期内项目都将为 arm64 架构提供发布镜像、二进制包、安全和勘误更新。FreeBSD 项目最早是在 2014 年启动对 FreeBSD/arm64 的开发,2016 年发布的 FreeBSD 11 中正式引入对 arm64 架构的支持。

ARM 芯片引来前所未有的高光时刻,BSD、Linux 纷纷对它抛出橄榄枝。

柯洁称 AI 让他越来越难以赢棋了

2017 年,围棋国手柯洁与人工智能“AlphaGo”进行了三番对决,最终柯洁 0:3 完败。如今,柯洁的空余时间几乎全部用在了研究 AI 上,他说道:“我现在看到 AI 也比较痛苦,因为我知道我没有办法走出比 AI 更优秀的好棋。”他认为,AI 可以很大程度上拉近棋手之间差距,人类棋手都在向人工智能进行学习,现在都有 AI 工具辅助,棋手就会完全按照 AI 的下法去下。柯洁称,“在以前的话,我觉得想赢一盘棋还是比较容易的。现在越来越难了。”

虽然老牌棋手会抱怨 AI 使得棋手的训练差距被拉平,但是人类从来不会被科技单方面打败。

ARM 发布 AMRv9 指令集,CPU 性能有望提升 40% 以上

ARM 星期二公布了近十年来它的最大规模的技术创新。目前使用的 ARMv8 指令集是十年前推出的。过去 10 年计算架构有了太多变化,ARM 处理器也不止用于移动/嵌入式,已经扩展到了 PC、HPC 高性能计算、深度学习等等新领域。ARMv9 在兼容 ARMv8 的基础上,提升了安全性、增强了矢量计算、机器学习及数字信号处理,同时继续提升处理器性能,CPU 性能有望提升 40% 以上。ARMv9 处理器预计会在 2022 年进入市场。

芯片领域三十年河东三十年河西,曾经如日中天的 X86 的风头如今似乎被 ARM 抢去了不少注意力。不过,我还是看好 RISC-V 的未来发展。

报告称双重勒索攻击造成“前所未有的”损害

双重勒索攻击,指在加密文件的同时窃取文件然后威胁泄露文件进行二次勒索。据英国 RUSI 和 BAE 公司发表报告称,双重勒索攻击在 2020 年造成“前所未有的”损害,去年 6 月至 10 月间,在勒索软件博客上报告的新受害者增加 200%。2020 年,采用双重勒索手段的 16 种勒索软件的攻击者共进行了 1200 次攻击,受害者分布于 63 个国家。英国遭受“双重勒索”攻击的数量位居世界第二,仅次于美国。

面对勒索软件攻击,企业愿意为防御勒索软件付出的精力和成本,取决于它可能遭受的损失程度和概率。这和对付病毒和垃圾邮件一样。

随着 64 位硬件的引入,增加了处理更大地址空间的需求。

 title=

当 64 位硬件变得可用之后,处理更大地址空间(大于 2^32 字节)的需求变得显而易见。现如今一些公司已经提供 64TiB 或更大内存的服务器,x86\_64 架构和 arm64 架构现在允许寻址的地址空间大于 2^48 字节(可以使用默认的 48 位地址支持)。

x86\_64 架构通过让硬件和软件启用五级页表以支持这些用例。它允许寻址的地址空间等于 2^57 字节(详情见 x86:在 4.12 内核中启用 5 级页表)。它突破了过去虚拟地址空间 128PiB 和物理地址空间 4PiB 的上限。

arm64 架构通过引入两个新的体系结构 —— ARMv8.2 LVA(更大的虚拟寻址) 和 ARMv8.2 LPA(更大的物理地址寻址) —— 拓展来实现相同的功能。这允许使用 4PiB 的虚拟地址空间和 4PiB 的物理地址空间(即分别为 2^52 位)。

随着新的 arm64 CPU 中支持了 ARMv8.2 体系结构拓展,同时现在开源软件也支持了这两种新的硬件拓展。

从 Linux 5.4 内核开始, arm64 架构中的 52 位(大)虚拟地址(VA)和物理地址(PA)得到支持。尽管内核文档描述了这些特性和新的内核运行时对旧的 CPU(硬件层面不支持 52 位虚拟地址拓展)和新的 CPU(硬件层面支持 52 位虚拟地址拓展)的影响,但对普通用户而言,理解这些并且如何 “选择使用” 52 位的地址空间可能会很复杂。

因此,我会在本文中介绍下面这些比较新的概念:

  1. 在增加了对这些功能的支持后,内核的内存布局如何“翻转”到 Arm64 架构
  2. 对用户态应用的影响,尤其是对提供调试支持的程序(例如:kexec-tools、 makedumpfile 和 crash-utility)
  3. 如何通过指定大于 48 位的 mmap 参数,使用户态应用“选择”从 52 位地址空间接受 VA?

ARMv8.2 架构的 LVA 和 LPA 拓展

ARMv8.2 架构提供两种重要的拓展:大虚拟寻址(LVA)和大物理寻址(LPA)。

当使用 64 KB 转换粒度时,ARMv8.2-LVA 为每个翻译表基地址寄存器提供了一个更大的 52 位虚拟地址空间。

在 ARMv8.2-LVA 中允许:

  • 当使用 64 KB 转换粒度时,中间物理地址(IPA)和物理地址空间拓展为 52 位。
  • 如果使用 64 KB 转换粒度来实现对 52 位物理地址的支持,那么一级块将会覆盖 4TB 的地址空间。

需要注意的是这些特性仅在 AArch64 架构中支持。

目前下列的 Arm64 Cortex-A 处理器支持 ARMv8.2 拓展:

  • Cortex-A55
  • Cortex-A75
  • Cortex-A76

更多细节请参考 Armv8 架构参考手册

Arm64 的内核内存布局

伴随着 ARMv8.2 拓展增加了对 LVA 地址的支持(仅当以页大小为 64 KB 运行时可用),在第一级转换中,描述符的数量会增加。

用户地址将 63-48 位位置为 0,然而内核地址将这些位设置为 1。TTBRx 的选择由虚拟地址的 63 位决定。swapper_pg_dir 仅包含内核(全局)映射,然而 pgd 仅包含用户(非全局)的映射。swapper_pg_dir 地址会写入 TTBR1,且永远不会写入 TTBR0。

页面大小为 64 KB 和三个级别的(具有 52 位硬件支持)的 AArch64 架构下 Linux 内存布局如下:

  开始                  结束                       大小          用途
  -----------------------------------------------------------------------
  0000000000000000      000fffffffffffff           4PB          用户
  fff0000000000000      fff7ffffffffffff           2PB          内核逻辑内存映射
  fff8000000000000      fffd9fffffffffff        1440TB          [间隙]
  fffda00000000000      ffff9fffffffffff         512TB          Kasan 阴影区
  ffffa00000000000      ffffa00007ffffff         128MB          bpf jit 区域
  ffffa00008000000      ffffa0000fffffff         128MB          模块
  ffffa00010000000      fffff81ffffeffff         ~88TB          vmalloc 区
  fffff81fffff0000      fffffc1ffe58ffff          ~3TB          [保护区域]
  fffffc1ffe590000      fffffc1ffe9fffff        4544KB          固定映射
  fffffc1ffea00000      fffffc1ffebfffff           2MB          [保护区域]
  fffffc1ffec00000      fffffc1fffbfffff          16MB          PCI I/O 空间
  fffffc1fffc00000      fffffc1fffdfffff           2MB          [保护区域]
  fffffc1fffe00000      ffffffffffdfffff        3968GB          vmemmap
  ffffffffffe00000      ffffffffffffffff           2MB          [保护区域]

4 KB 页面的转换查询表如下:

  +--------+--------+--------+--------+--------+--------+--------+--------+
  |63    56|55    48|47    40|39    32|31    24|23    16|15     8|7      0|
  +--------+--------+--------+--------+--------+--------+--------+--------+
   |                 |         |         |         |         |
   |                 |         |         |         |         v
   |                 |         |         |         |   [11:0]  页内偏移量
   |                 |         |         |         +-> [20:12] L3 索引
   |                 |         |         +-----------> [29:21] L2 索引
   |                 |         +---------------------> [38:30] L1 索引
   |                 +-------------------------------> [47:39] L0 索引
   +-------------------------------------------------> [63] TTBR0/1

64 KB 页面的转换查询表如下:

  +--------+--------+--------+--------+--------+--------+--------+--------+
  |63    56|55    48|47    40|39    32|31    24|23    16|15     8|7      0|
  +--------+--------+--------+--------+--------+--------+--------+--------+
   |                 |    |               |              |
   |                 |    |               |              v
   |                 |    |               |            [15:0]  页内偏移量
   |                 |    |               +----------> [28:16] L3 索引
   |                 |    +--------------------------> [41:29] L2 索引
   |                 +-------------------------------> [47:42] L1 索引 (48 位)
   |                                                   [51:42] L1 索引 (52 位)
   +-------------------------------------------------> [63] TTBR0/1

 title=

内核对 52 位虚拟地址的支持

因为支持 LVA 的较新的内核应该可以在旧的 CPU(硬件不支持 LVA 拓展)和新的 CPU(硬件支持 LVA 拓展)上都正常运行,因此采用的设计方法是使用单个二进制文件来支持 52 位(如果硬件不支持该特性,则必须在刚开始启动时能回退到 48 位)。也就是说,为了满足 52 位的虚拟地址以及固定大小的 PAGE_OFFSETVMEMMAP 必须设置得足够大。

这样的设计方式要求内核为了新的虚拟地址空间而支持下面的变量:

VA_BITS         常量       *最大的* 虚拟地址空间大小

vabits_actual   变量       *实际的* 虚拟地址空间大小

因此,尽管 VA_BITS 设置了最大的虚拟地址空间大小,但实际上支持的虚拟地址空间大小由 vabits_actual 确定(具体取决于启动时的切换)。

翻转内核内存布局

保持一个单一内核二进制文件的设计方法要求内核的 .text 位于高位地址中,因此它们对于 48/52 位虚拟地址是不变的。因为内核地址检测器(KASAN)区域仅占整个内核虚拟地址空间的一小部分,因此对于 48 位或 52 位的虚拟地址空间,KASAN 区域的末尾也必须在内核虚拟地址空间的上半部分。(从 48 位切换到 52 位,KASAN 区域的末尾是不变的,且依赖于 ~0UL,而起始地址将“增长”到低位地址)

为了优化 phys_to_virt()virt_to_phys(),页偏移量将被保持在 0xFFF0000000000000 (对应于 52 位),这消除了读取额外变量的需求。在早期启动时将会计算 physvirtvmemmap 偏移量以启用这个逻辑。

考虑下面的物理和虚拟 RAM 地址空间的转换:

/*
 * 内核线性地址开始于虚拟地址空间的底部
 * 测试区域开始处的最高位已经是一个足够的检查,并且避免了担心标签的麻烦
 */

#define virt_to_phys(addr) ({                                   \
        if (!(((u64)addr) & BIT(vabits_actual - 1)))            \
                (((addr) & ~PAGE_OFFSET) + PHYS_OFFSET)
})

#define phys_to_virt(addr) ((unsigned long)((addr) - PHYS_OFFSET) | PAGE_OFFSET)

在上面的代码中:
 PAGE_OFFSET — 线性映射的虚拟地址的起始位置位于 TTBR1 地址空间
 PHYS_OFFSET — 物理地址的起始位置以及 vabits_actual — *实际的*虚拟地址空间大小

对用于调试内核的用户态程序的影响

有几个用户空间应用程序可以用于调试正在运行的/活动中的内核或者分析系统崩溃时的 vmcore 转储(例如确定内核奔溃的根本原因):kexec-tools、makedumpfile 和 crash-utility。

当用它们来调试 Arm64 内核时,因为 Arm64 内核内存映射被“翻转”,因此也会对它们产生影响。这些应用程序还需要遍历转换表以确定与虚拟地址相应的物理地址(类似于内核中的完成方式)。

相应地,在将“翻转”引入内核内存映射之后,由于上游破坏了用户态应用程序,因此必须对其进行修改。

我已经提议了对三个受影响的用户态应用程序的修复;有一些已经被上游接受,但其他仍在等待中:

除非在用户空间应用程序进行了这些修改,否则它们将仍然无法调试运行/活动中的内核或分析系统崩溃时的 vmcore 转储。

52 位用户态虚拟地址

为了保持与依赖 ARMv8.0 虚拟地址空间的最大为 48 位的用户空间应用程序的兼容性,在默认情况下内核会将虚拟地址从 48 位范围返回给用户空间。

通过指定大于 48 位的 mmap 提示参数,用户态程序可以“选择”从 52 位空间接收虚拟地址。

例如:

.mmap_high_addr.c
----

   maybe_high_address = mmap(~0UL, size, prot, flags,...);

通过启用以下的内核配置选项,还可以构建一个从 52 位空间返回地址的调试内核:

   CONFIG_EXPERT=y && CONFIG_ARM64_FORCE_52BIT=y

请注意此选项仅用于调试应用程序,不应在实际生产中使用。

结论

总结一下:

  1. 内核版本从 5.14 开始,新的 Armv8.2 硬件拓展 LVA 和 LPA 在内核中得到良好支持。
  2. 像 kexec-tools 和 makedumpfile 被用来调试内核的用户态应用程序现在无法支持新拓展,仍在等待上游接受修补。
  3. 过去的用户态应用程序依赖于 Arm64 内核提供的 48 位虚拟地址将继续原样工作,而较新的用户态应用程序通构指定超过 48 位更大的 mmap 提示参数来 “选择加入”已接受来自 52 位的虚拟地址。

这篇文章参考了 AArch64 架构下的 Linux 内存布局Linux 5.9.12 内核文档。它们均为 GPLv2.0 许可。


via: https://opensource.com/article/20/12/52-bit-arm64-kernel

作者:Bhupesh Sharma 选题:lujun9972 译者:萌新阿岩 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Oracle 调研如何避免让 Java 开发者投奔 Rust 和 Kotlin

Oracle 委托分析公司 Omdia 评估其 Java 的 6 个月发布策略,以及它是否足以让数百万 Java 开发者远离内存安全的替代方案,如谷歌的 Kotlin 和 Mozilla 的 Rust。报告中说,“6 个月的更新周期,并引入新的模块化水平,使其在约 1200 万开发人员中处于有利地位。Oracle 和 Java编程语言需要一系列持续不断的创新,使现有的 Java 开发者感到满意,同时引导潜在的 Java 开发者远离 Rust 和 Kotlin 等新语言。”

来源:zdnet

拍一拍:25 年的 Java 虽然依旧占据统治地位,但是这些新来的小家伙也不可小觑。

英特尔对迟迟不被 Linux 主线接受的 SGX Enclave 进行了第 38 次修订

多年来,英特尔 Linux 开发人员一直在努力让他们的软件卫士扩展(SGX)支持和新的 SGX Enclave 驱动整合到 Linux 内核中。自酷睿 Skylake 核心出现以来,SGX 的支持工作就一直在进行,但安全问题和其他技术原因阻碍了 SGX 支持主线接受。此外,非英特尔上游内核开发者对 SGX 的热情也明显不足。

来源:cnbeta

拍一拍:心疼英特尔 38 次。不过,确实有很多新特性想挤入 Linux 主线内核,但是能得到上游社区的认可需要更广泛的共识。

ARM 支持开源的 Panfrost Gallium3D 驱动

Mesa 的 Panfrost Gallium3D 开源驱动提供了对 ARM 的 Mali Midgard 和 Bifrost GPU 的支持。它最初始于对私有 Mali 图形驱动的逆向工程,进展缓慢,但随着主要开发者 Alyssa Rosenzweig 受雇于咨询公司 Collabora,项目取得了稳定进展。在 XDC2020 大会上,Alyssa 透露,ARM 正与 Collabora 合作开发 Panfrost,支持 Panfrost Gallium3D 作为开源的 Mali 驱动。

来源:solidot

拍一拍:从之前的逆向工程到厂家的主动支持,企业越来越正视和重视开源支持。