想简单聊一下笔记本的显卡切换

2022-04-27 23:09:03 +08:00
 icestraw
M1 系列笔记本的续航有目共睹,那是相当的长。在使用的过程中,我最大的感触是,在这一代的机型上,苹果解决了之前困扰我很久的问题:显卡切换。我对笔记本的需求并没有那么复杂,主要就是办公和打游戏,希望尽可能长的续航和较好的显卡。但是在 M1 以前相当长一段时间,笔记本的续航 /显卡性能 /兼容性对我似乎是一个无解的问题。在此把我使用中观察到的现象分享一二...

2013 年以前 Macbook:
苹果在此之前的 Macbook Pro 采用了 nvidia 独立显卡,并且提供了 intel/nvidia 切换选项,尝试兼顾笔记本的功耗与性能。但是此时切换独显 /核显的 mux 需要重启,在日常使用场景中极为不便。类似开会时暂时带电脑离开办公桌的场景需要用户手动重启电脑,这无疑会打断我的工作进度,因此我感觉这种功能聊胜于无。

2013-2019 年 Macbook:
苹果引入了新的 mux 技术,可以实现不让用户手动切换了,而是通过检测高性能图形 API 的调用随时调用独显。用户甚至有锁定电脑在独显(而不需要重启)的权限了。这种方式可以说满足了七成需求,但是仍然有问题:有些 App 并不需要高性能,但是调用了对应的 API ,因此显卡被强制切换到了独显模式,此时待机时间几乎就完蛋了。但是谁是高性能 App 并不能由用户选择(因为是根据程序的行为判定的),因此会出现“打开 QQ 后的某个时间突然显卡切换到了高性能,而且直到关闭后都无法换回来”的诡异情况。解决这种情况主要靠开发者的慢慢适配,但不适配的程序依然很多,“强制锁定在集显”这种操作虽然有三方 App(如 gfxCardStatus)尝试实现,但效果不太好,而且随着系统更新,三方 App 的实现失效了。而且由于外置显示器和独显是硬连接,意味着如果连了外接显示器,那么系统必须调用独显显示画面,不管程序是高性能还是低性能。

外接显卡的 mac:
苹果 2018 年左右允许用户使用雷电外接显卡(虽然只有 AMD 的几款)。理论上通过这种方式,可以直接把显卡拆开,直接买一个不带显卡的 13 寸就可以了,兼顾功耗与性能。除了外接显卡移动不便(还有贵),听起来似乎没有太大缺点,但是实际使用体验却不是这样的。笔记本自带的显卡切换,在实际发生切换时是不需要有“重启程序”这种诡异的步骤的。但是外接显卡需要!外接的显卡并没有类似内置显卡的待遇,在性能受到雷电口带宽限制的状况下,切换的体验也非常差。你需要手动点击推出显卡,然后让它关掉所有的程序并重新打开。当然,如果直接拔线的话,所有依赖外接显卡的程序会直接崩溃,系统本身也有一定概率崩溃掉。虽然在意料之中,但是手动点推出的情况下居然也无法做到不重启 App ,体验还是很差的。另外,有些 edge cases ,如使用核显解码的视频在外接屏幕上全屏播放,体验几乎也是灾难性的,外接屏分辨率高一些基本上就开始闪成 PPT 了。
哦对了,还有一个很难受的点,这块外接显卡想在 Bootcamp 状态下运行起来可太难了。

2012-2020 年的主流 windows:
与此同时,windows 系列的笔记本从始至终只有一种切换方案:Optimus 。采用这一方案的笔记本,无论是内屏还是外接屏幕,大多都是被核显接管,少部分电脑外接时会使用独显,因此大多数笔记本自始自终都有良好的功耗表现。与之对应的就是很大程度牺牲了独显性能,因为这种方案的独显并不和任何屏幕有硬件 mux 连接,只负责渲染,因此转换过程中损失很大。诡异的是,转换的损失并不会在跑分中体现出来,但是对用户体验的影响是很严重的。具体由几个原因:
1. 转发画面的成本。相比图像直接显示,optimus 会先把画面编码转发到核显,然后再显示。延迟很大不说,画面越大,转发数据越多,显示越费力。在 1080p 以下的显示器的时代其实影响不大,但是随着显示器分辨率越来越高,这个过程越来越费力。甚至,有些笔记本由于设计比较奇怪,甚至出现了不能全屏幕玩游戏的诡异现象。( Eg. Surface Book, pcie3 x2 的显卡带宽导致传输画面的速率甚至不够游戏全屏,以至于饥荒这样的小游戏全屏都会很卡,但是地平线这样的大游戏低分辨率又没问题)
2. 对核显的影响。笔记本的功耗恒定,游戏中本来只需要供给 CPU 和独显,现在却要多拖一个满载解码的核显,这对 CPU 的性能表现极为不利。如果散热 /电源不好的话,很容易机器就会出现降频。
3. 因为核显的满载,而且系统 UI 又是由核显渲染的,如果玩窗口化的游戏,而且外接了显示器,此时系统的响应速度可谓是灾难,说卡成 PPT 毫不为过。
因此,这段时间我特别不愿意用 windows 的笔记本,少数几款用起来体验也是特别糟心。

2021 至今的部分 windows
Nvdia 新发布了 Advance Optimus 技术,做到了显卡切换方式和 2013 年的 Macbook 系列类似,体验没有那么糟心了。然而这个技术仍然很诡异:
1. 内屏切换独显时,电脑会看到两台显示器,其中一台被禁用,而且会有明显的“切换显示器”的感觉。这属于体验问题,毕竟苹果是软硬一体的公司,比不过比不过。
2. 一旦连接外屏,此时内屏哪怕是独显模式都会被强制切回集成显卡???这种操作属实没看懂,但是直觉上看似乎是硬件限制。
3. intel 在 11 代 u 上上了内置雷电 4 ,因此很多笔记本都带了雷电口。但是,通过雷电协议输出的外接显示器,一些笔记本居然是接在核显上的。很难说不是成本原因,毕竟外星人这样的本子是可以独显走雷电协议的。
能看出 windows 笔记本在显卡切换上整体都慢 Macbook 不止一拍,直到现在也只是勉强能用。

M1
回到 M1 ,M1 系列的出现,几乎终结了上述困扰我许久的,不怎么理想的显卡切换技术:只有一张显卡,还切换什么?更何况这张显卡的待机功耗还这么低。因此我对 M1 系列的笔记本印象是非常的好。不能说 100%满意:比如居然有外接显示屏数量限制,不能外接显卡等小毛病,但是瑕不掩瑜。一张卡让笔记本吃遍所有场景的体验,真的让我这么多年对使用各种诡异显卡切换方案的不满消散殆尽。现在只剩下了一个问题:M1 这个 arm 架构的笔记本,它没有 Bootcamp ,没法打游戏啊!即使使用虚拟机跑 arm 版本 windows ,对游戏的兼容性仍然很差。这么高性能的,堪比独显性能的核显,对于不剪视频的我,几乎成了个伪命题:我怎么会在一台不能打游戏的笔记本上用独显呢?

于是至今我还是没能找到完全好用的笔记本,即使我对它的需求只有办公和游戏。
2855 次点击
所在节点    macOS
24 条回复
israinbow
2022-05-01 04:53:30 +08:00
我有和 op 一样的使用历程,同时也有图形学相关工作的需求,所以我对笔记本的要求十分苛刻,目前也在寻找能够胜任的笔记本,多次调研后,候选了今年的雷蛇以及华硕使用外接显卡的笔记本。

实际上,迫于当前市场形态主导技术发展,能够胜任打游戏兼容好 /干活方便 /轻度使用时高续航的笔记本是不存在的,只有一些靠着外接显卡的设计才勉强能用。应用程序由于先调用显卡后输出信号,能够不关应用随时切换显卡的技术根本不存在,哪怕是近两年鼓吹的 mux 三显切换,系统依然在给不使用的显卡供电以便随时切换(比如 rog x13 ),最后能够妥协的只有工作续航需求时通过各类限制将独显限制在零功耗,或者使用外接显卡来弥补笔记本自身不足以支持显卡重工作。

苹果发布新架构芯片的时候我甚是激动,各类评测宣传吹嘘 gpu 处理能力比肩 RTX3080 ,可最后苹果连自己的弃子 vulkan 技术都不愿意支持,搓出来一个新的图形 api 让各位开发者去配合使用,最后游戏佬只能玩玩一些 OpenGL 的游戏,实际可惜。
icestraw
2022-05-01 10:00:54 +08:00
@israinbow “系统依然在给不使用的显卡供电以便随时切换”这个是真的吗?我用过的所有笔记本都没遇到过这个现象,听起来有点奇怪啊。按理来说 Optimus 的显卡只要没有运行程序应该是睡眠状态才对。感觉像是部分程序仍在使用独显,导致独显还在高功耗模式。难道是这款机型有三显所以特有的限制?

m1 max 说是 3080 ,游戏跑分只有 3060 的样子。原生 Metal API 的大作估计也就原神了😂
israinbow
2022-05-01 21:48:01 +08:00
@icestraw #22 这句话有些武断了, 这是我在调研的时候发现的, 我不清楚是否所有机型设计上都是这样, 这是我在华硕幻 13, 雷蛇灵刃 14 以及外星人 m15 电脑上安装 linux 不挂载独立显卡时发现的事情, 参照 https://github.com/CO-1/asus-flow-x13-linux "Even if nouveau or nvidia is not loaded nvidia gpu will still consume ~10W of power. We need to set power/control to auto to reduce power.", 不过我也不清楚这是不是 linux 独有的特征, 暂时还没有机会在 windows 平台上测试验证包括硬件 mux 的设备, 是个比较不靠谱的推论.
icestraw
2022-05-01 22:54:18 +08:00
@israinbow Optimus 的驱动只有 Windows 版本啊,显卡正常休眠是依赖驱动的。Linux 下没有官方驱动,没有官方方案可以实现休眠,笔记本厂家官方一般会建议使用 Linux 环境关掉 Optimus 直接使用独显直连。单纯的禁用是不可以的,必须明确发出休眠的指令。我装过黑苹果的笔记本,Optimus 架构,默认如果没有任何操作的话显卡是不休眠的,待机时间只有 2 小时。需要额外打三方补丁才可以让显卡进入睡眠状态,而且系统从睡眠唤醒有一定几率重新唤醒显卡。显卡能正常进入休眠后,我的正常使用时间能达到 5 个小时。(我现在用的 m15 电池小一点,也可以达到 4 个小时)

你发的链接最底下有一句话,描述的大概就是类似的现象,但是我不确定是否一定管用。

Even if nouveau or nvidia is not loaded nvidia gpu will still consume ~10W of power. We need to set power/control to auto to reduce power.

echo '#nvidia dGPU' > /etc/udev/rules.d/99-asus-flow-power.rules
echo 'ACTION=="add", SUBSYSTEM=="pci", TEST=="power/control", ATTR{vendor}=="0x10de", ATTR{power/control}="auto"' >> /etc/udev/rules.d/99-asus-flow-power.rules
udevadm control --reload


这个应该是我了解 Linux 下的配置方案
https://github.com/Askannz/optimus-manager/wiki/A-guide--to-power-management-options

这个是用 OC 引导时的 GPU 关闭脚本,供参考,配置方式因机型而异
https://dortania.github.io/Getting-Started-With-ACPI/Laptops/laptop-disable.html#optimus-method

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/849674

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX