前言

ResizebleBars(Resizable Base-Address-Register,可变大小基址寄存器),AMD 平台则称为“Smart Access Memory(SAM)”,该特性于 2008 年由 PCIe 3.0 规范引入,但是历史上的很长时间这个功能都被忽略了。直到 AMD 发布 5000 系锐龙 + RX 6000 系显卡搭配 PCIe 4.0 时,在发布会上作为一个亮点进行了讲解,才逐渐回到玩家关注视野。

ResizebleBars/SAM 是什么?

在以往运行大型 3D 游戏或其它大型 3D 应用时,处理器无法一次性访问显卡所有的显存,长期以来这个值的上限一直是 256MB,随着科技的发展,这个限制慢慢的开始变得效率低下,超出 256MB 大小的的数据需要从内存依次加载到显存,再由显卡进行处理,如此往复,再加上 PCIe 带宽和各硬件之间的通信延迟,造成了一定的性能损耗。

ResizebleBars/SAM 即是为了解决这个问题而生,突破 256MB 的限制,处理器要访问和交换的数据可以直接存储到显存中,显卡也会缩短等待数据的时间,提升效率。在开启此功能的情况下,理论上处理器可以一次访问到全部显存,但在实际应用中,由于显卡自身对显存始终拥有优先使用权的关系,处理器并不能访问到全部显存。

较新版本的 GPU-Z 中已经有 Resizeble Bars 信息提示

ResizeBars/SAM 对黑苹果的意义?

和 Windows/Linux 不同,macOS 并不完全支持此功能,其最大限制值是 1GB,macOS 平台在大型 3D 游戏方面也没有 Windows 那么丰富多彩,但由于之前 OpenCore 等引导工具无法处理 ResizebleBars/SAM 的兼容性问题,黑苹果在安装 macOS 时,一般都推荐在 BIOS 中关闭 ResizebleBars/SAM 功能,否则可能遭遇黑屏问题。就目前来看,OpenCore 0.7.5 的这个新特性至少能让你在 BIOS 中开启 ResizebleBars/SAM,从而在 Windows 中正常获得该功能的使用体验,同时不影响 macOS 启动和运行。

「注意」

  • 从现有评测上来看,ResizebleBars/SAM 的性能提升较为有限,在 AMD 平台比较明显,如果是英特尔平台,就不是很明显,而且还需要游戏/软件本身支持该功能,目前在部分游戏/软件中甚至是负优化,具体评测可参考哔哩哔哩 @极客湾 或其它媒体的评测;
  • 对于黑苹果来说,ResizebleBars/SAM 的应用范围目前仅限于 RX6000 系列显卡,并且需要主板 BIOS 支持,英特尔平台需要主板中拥有 Re-size Bar Support 选项,AMD 平台需要有 Smart Access Memory/SAM 选项;NVIDIA 的显卡目前仅 RTX30 系支持,2021 年 3-4 月以前生产的 RTX30 系显卡可能还需要更新 VBIOS;
  • 要开启 ResizebleBars/SAM 必须使用 UEFI 模式引导系统;

 

OpenCore 0.7.5 新增的 Quirks

OpenCore 0.7.5 正式版新增了两个 Quirks,分别是 ResizeAppleGpuBars 和 ResizeGpuBars,前者位于 Booter → Quirks,后者位于 UEFI → Quirks,下面讲讲这两个选项的作用和区别。

简单来说,ResizeAppleGpuBars 只针对 macOS 生效,而 ResizeGpuBars 则影响所有通过 OpenCore 引导的操作系统,而较新版本的 Windows 和 Linux 自己可以处理 ResizebleBars 特性,所以我们的思路就是调整前者,关闭后者。

这两个选项接受整数值,如下:

  • -1:关闭 Quirks
  • 0:对应 1 MB
  • 1:对应 2 MB
  • 2:对应 4 MB
  • 3:对应 8 MB
  • 4:对应 16 MB
  • 5:对应 32 MB
  • 6:对应 64 MB
  • 7:对应 128 MB
  • 8:对应 256 MB
  • 9:对应 512 MB
  • 10:对应 1 GB
  • 11:对应 2 GB
  • 12:对应 4 GB
  • 13:对应 8 GB
  • 14:对应 6 GB
  • 15:对应 32 GB
  • 16:对应 64 Gb
  • 17:对应 128 GB
  • 18:对应 256 GB
  • 19:对应 512 GB。

对应值计算其实很简单,就是 2 的 n 次方,例如:2^19/1024 = 512,2^10/1024 = 1。「注意」这个 Quirks 不会突破 macOS 最大只能支持 1GB 的限制。

OpenCore 更新到 0.7.6 时,明确限定了值只能是 0 或 -1

对于 RX6000 系显卡,ResizeAppleGpuBars 建议值如下:

  • -1:关闭
  • 0:1MB(保险值)
  • 8:256MB(传统值)
  • 10:1GB(macOS 支持最大值)

如何选择?如果你有 RX6000 系显卡,可优先尝试 10,这么设置的目的是尝试使用 macOS 最大值看看能不能一定程度提升性能;如果遇到休眠问题(表现类似睡了即醒),则修改为 8;如果问题依旧,可改成 0 ,这也是 OpenCore 团队的推荐值,即 1MB,设置为 1MB 的意义在于保留 BIOS 中对应选项开启,但不影响 macOS 启动和运行;如果运行还有问题,改为 -1 关闭该功能。

ResizeGpuBars 直接设置为 -1 即可。没有 RX6000 系显卡的同学,建议两个都设置为 -1。

 

OpenCore 设置

首先将 OpenCore 升级到 0.7.5 正式版,如何升级可参考「黑苹果升级 OpenCore/ 引导工具」一文,这里不赘述。

OpenCore 配置工具可以使用 OpenCore Configurator / OCAuxiliaryTools / ProperTree / PlistEdit Pro / Visual Studio Code 等等,选择你自己习惯用的就行,这里演示其中几种。

OpenCore Configurator

「注意」修改 config 前,务必进行备份,以免失败后无法进入系统。

截止本文发布,OCC 并未发布支持 0.7.5 正式版的配置工具版本,不过此时的最新版本支持 0.7.5 开发版,已经拥有对应的键值设置,只需在屏幕左上角菜单 OpenCore Configurator → 偏好设置 中进行切换:

 

然后分别修改 Boot → Quirks 和 UEFI → Quirks 中对应的设置:

「注意」ResizeAppleGpuBars 按照上一章节说明进行调整,ResizeGpuBars 设置为 -1 即可。

 

OCAuxiliaryTools

「注意」修改 config 前,务必进行备份,以免失败后无法进入系统。

OCAT 更新比较频繁,目前已经有针对 0.7.5 正式版的配置器版本。分别修改 Boot → Quirks 和 UEFI → Quirks 中对应的设置:

「注意」ResizeAppleGpuBars 按照上一章节说明进行调整,ResizeGpuBars 设置为 -1 即可。

 

PlistEdit Pro

「注意」修改 config 前,务必进行备份,以免失败后无法进入系统。

笔者发现在升级到 macOS 12.0.1 后,原本在 Big Sur 还可使用的 ProperTree 又挂了,不过同为 Plist 编辑工具,使用 PlistEdit Pro 体验和 ProperTree 是差不太多的。分别修改 Boot → Quirks 和 UEFI → Quirks 中对应的设置:

「注意」ResizeAppleGpuBars 按照上一章节说明进行调整,ResizeGpuBars 设置为 -1 即可。

 

BIOS 设置

设置完 OpenCore 之后就可以重启进入 BIOS 开启对应设置了。由于各厂家主板设置和名称并不相同,这里无法一一叙述,以微星为例,该选项位于 Settings → Advanced → PCIe/PCI Sub-system Settings

如果找不到,注意看 BIOS 界面信息,较新的主板一般都有搜索功能,可直接搜索选项名称。开启后保存退出 BIOS 即可。

 

效果实测

老实说,笔者前后折腾了整一天,更换了很多值,在 Windows 测试了 3DMARK 和新版鲁大师,在 macOS 测试了 Geekbench,都没有感觉到明显的区别。只有分别设置为 0 和 10 的时候看到了较为明显的区别,一算最大差异比例,大约 13.7%,而多次测试的平均值大概在 5%-8% 左右浮动,不过光是 Geekbench 的 Metal 测试并不能让显卡满载,而 Geekbench 的测试结果也一向比较薛定谔😂。

左边设置为0,右边设置为10

如果按照 AMD 发布会时的说法,提升应该在 2% ~ 13% 的范围。不过注意看小字,AMD 的结果是 3A 平台(处理器+显卡+主板全部 AMD)再加“Rage Mode”(狂暴模式)测得的