页次: 1
今天下午的时候意外发现独显明明没有在使用但是居然还有8w功耗,然后我就去找办法关闭独显。
查找一番后发现大家好像都用 bbswitch 来控制显卡的开关,由于我的内核是 linux-zen 所以就去安装 bbswitch-dkms 了,安装完后在 擎天柱管理 optimus-manager 中设置 switching method 为 bbswitch 后重新启动电脑发现 optimus-manager 出问题了,看了一下日志发现是bbswitch 不起作用,安装完他后压根没有产生配置文件 /proc/acpi/bbswitch 。
问一下还有其他办法可以可以关闭独显吗,我看了一下 Bumblebee 也需要 bbswitch 。
btw: 大家在用的是什么内核啊,我用的是 linux-zen 每次安装需要 dkms 的包和更新完内核的时候都担心会出问题。打算再装个 linux 内核来试试。
较新的显卡不需要 bbswitch 也可以控制显卡开关(20系,30系即图灵架构和安培架构)。
也就是说不需要 Optimus manager了。
详情可以看一下wiki 关于 PRIME offload 的文章 Prime
需要注意的是30系这个功能是默认开启的(wiki 是这么说的,但是我的3050就没有QAQ),可以通过以下命令查看是否开启:
$ cat /sys/bus/pci/devices/0000:01:00.0/power/runtime_status
suspended
$ cat /sys/class/drm/card*/device/power_state
D3cold
D0
如果为 suspended 和 D3 就说明已经开启了。
还有就是 使用 nvtop 和 nvidia-smi 后都会引起上面的结果改变,我猜是检测显卡功耗或者状态需要关闭 PCIE电源管理的原因。
如果一切正常使用以下命令可以单独调用独立显卡来运行程序:
DRI_PRIME=1 command
# 如
$ DRI_PRIME=1 glxgears
经过一下午的测试,发现我笔记本的续航已经正常了。
最近编辑记录 JmZeroQAQ (2023-09-21 17:20:37)
离线
modprobe bbswitch 之后再看看呢?
离线
modprobe bbswitch 之后再看看呢?
试过了,使用 modeprobe bbswitch 会说没有这设备(No such device)。
但是我用 modinfo bbswitch 是可以找到这个模块的。
使用 sudo dmseg | grep -C 10 bbswitch 有以下输出:
[ 14.349080] Bluetooth: RFCOMM socket layer initialized
[ 14.349084] Bluetooth: RFCOMM ver 1.11
[ 14.839403] wlp3s0: authenticate with 90:98:38:1c:4a:84
[ 14.973005] wlp3s0: send auth to 90:98:38:1c:4a:84 (try 1/3)
[ 14.975799] wlp3s0: authenticated
[ 14.976424] wlp3s0: associate with 90:98:38:1c:4a:84 (try 1/3)
[ 14.993534] wlp3s0: RX AssocResp from 90:98:38:1c:4a:84 (capab=0x1c31 status=0 aid=1)
[ 15.020435] wlp3s0: associated
[ 15.716338] tun: Universal TUN/TAP device driver, 1.6
[ 18.303732] acpi AMDI0010:03: Already enumerated
[ 171.167687] bbswitch: version 0.8
[ 171.167701] bbswitch: Found discrete VGA device 0000:01:00.0: \_SB_.PCI0.GPP0.PEGP
[ 171.167704] bbswitch: Found discrete VGA device 0000:04:00.0: \_SB_.PCI0.GP17.VGA_
[ 171.167721] bbswitch: failed to evaluate \_SB_.PCI0.GP17.VGA_._DSM {0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0} 0x100 0x0 {0x00,0x00,0x00,0x00}: AE_NOT_FOUND
[ 171.167728] bbswitch: failed to evaluate \_SB_.PCI0.GP17.VGA_._DSM {0xA0,0xA0,0x95,0x9D,0x60,0x00,0x48,0x4D,0xB3,0x4D,0x7E,0x5F,0xEA,0x12,0x9F,0xD4} 0x102 0x0 {0x00,0x00,0x00,0x00}: AE_NOT_FOUND
[ 171.167730] bbswitch: No suitable _DSM call found.
我去上游仓库看了一下 issuses 发现这个 No suitable _DSM call found 问题已经有人提了,但是好像还没有给出解决办法好像(也许是我看的不够详细,我等会再看看)。
这个仓库真的好老了啊,上次 commit 居然在10年前。
离线
会不会是tlp 和 bbswitch 冲突了呢?我看wiki 上面好像提了一下。
Bumblebee及NVIDIA驱动
如果您与NVIDIA驱动一同运行Bumblebee,您需要关闭TLP对GPU的电源管理以使Bumblebee控制GPU的电源。
离线
又看了很多文章, 发现了 prime offload 的方法,我看了一下wiki上说安培架构的显卡是自动开启电源管理的(PCI-Express Runtime D3),我的是3050按照道理来说应该是自动开启的,但是没有。然后我就按照wiki上面的办法,添加了udev规则(/etc/udev/rules.d/80-nvidia-pm.rules) 然后又添加了内核模块选项(/etc/modprobe.d/nvidia-pm.conf),也把 nvidia-persistenced.service 启动了,然后重启了电脑。
不过配置好像没有生效,而且我从两个地方看还不一样。
$ lspci -k | grep NVIDIA
01:00.0 3D controller: NVIDIA Corporation GA107M [GeForce RTX 3050 Mobile] (rev a1)
$ cat /sys/bus/pci/devices/0000:01:00.0/power/runtime_status
suspended
我打开 nvtop 看了一下,此时显卡还是有8w功耗。
我想问一下 /etc/udev/rules.d/80-nvidia-pm.rules 和 /etc/modprobe.d/nvidia-pm.conf 这两个文件是默认会生成的吗,我看的时候都是空的,这两个文件都是我手动加上的,或者有没有什么调试的办法可以传授以下,这几天被steam 和 这个问题搞麻了QAQ
离线
使用 nvtop 好像会影响电源管理,控制变量了一下,发现只要打开了nvtop, cat /sys/class/drm/card*/device/power_state 的结果就会从 D3hot -> D0 。
以及 cat /sys/bus/pci/devices/0000:01:00.0/power/runtime_status 的结果也会成 suspend -> active。
lspci -k | grep NVIDIA 的结果倒是一直没有变 都是(rev a1) 看来是变不成 ff 了。
感觉现在 PCIE电源管理 是已经生效了。
今天下午狠狠的看一下午番看看续航怎么样(((
离线
发现只要打开了nvtop, cat /sys/class/drm/card*/device/power_state 的结果就会从 D3hot -> D0 。
以及 cat /sys/bus/pci/devices/0000:01:00.0/power/runtime_status 的结果也会成 suspend -> active。
谢谢~我也遇到了类似情况,只要打开 nvtop / nvidia-smi 之类的看,我的显卡就会直接吃了20瓦,也从 suspend 变成了 active。正疑惑着
啦哆咪 - 用Linux制作音乐
https://lado.me
离线
页次: 1