您尚未登录。

#1 2019-02-16 05:11:54

yw662
大会员
所在地: localhost
注册时间: 2018-10-10
帖子: 424

关于kexec和nvidia的正确使用方式

*为什么要特地来水这一篇呢,因为我发现把kexec当重启用真的好爽。。。
*至于说为什么kexec会和nvidia同时出现。。。好吧,我闲的

首先,(对于我来说的)正常操作是这样的:

> sudo kexec -l /boot/vmlinuz-linux-custom --reuse-cmdline
> sudo kexec -e

当然,高贵的systemd-boot用户可以使用systemctl kexec大法
但是当nvidia出现的时候画风就不对了

> startx
...
(EE) No Screen Found

大概就是这样的情况

当然我们是知道为什么的,因为N卡在kexec的时候没有正确关闭,所以在重新初始化N卡的时候就出现了bug
那么我们要做的就是,在kexec之前关闭N卡

> sudo rmmod nvidia_drm
> sudo rmmod nvidia_modeset
> sudo rmmod nvidia_uvm
> sudo rmmod nvidia
> sudo tee /sys/bus/pci/devices/0000:01:00.0/remove <<<1

用bbswitch的话操作会有一些区别。
其中0000:01:00.0是我这台机子N卡的pci地址,可以用lspci | grep -i nvidia | awk '{print $1}'查到

但是显然,

rmmod: ERROR: Module nvidia_drm is in use

那么,我们的脚本最后就变成了这样的:

trap "" 1
pkill xinit
sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia_uvm
sudo rmmod nvidia
sudo tee /sys/bus/pci/devices/0000:01:00.0/remove <<<1
sudo kexec -l /boot/vmlinuz-linux-custom --reuse-cmdline
sudo kexec -e

不过高贵的nvidia-xrun用户们显然是不需要这样做的,因为nvidia-xrun在pkill xinit后会自动关掉N卡。
所以(如果你的xserver是用nvidia-xrun打开的并且你用systemd--boot),

trap "" 1
pkill xinit
sudo systemctl kexec

所以原来这个破事就这么简单。。。

不过像我这种还有其他事情需要担心的人,比如说这条看门狗,还有一些额外的工作需要处理,

[Service]
Type=idle

*真的超快的,比重启快多了。


ecmascript是世界上最好的语言

离线

#2 2019-02-16 21:05:01

xtricman
エクス·トリクマン
注册时间: 2012-12-26
帖子: 1,267

Re: 关于kexec和nvidia的正确使用方式

没用过,systemctl kexec似乎需要UEFI才会工作,这个是所谓内核热更新?用户态能保持吗?还是说就是个快速重启,当前内核作为bootloader启动当初kexec -l加载好的内核但是用户态还是要重启?


反社会,精神极其不稳定,随时可能炸碎身边所有人

离线

#3 2019-02-17 15:16:18

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,384
个人网站

Re: 关于kexec和nvidia的正确使用方式

不能。这个只是内核 exec 内核,用户空间需要重建。也就是只内核重启,不走硬件的重启流程。

离线

#4 2019-02-21 20:32:48

yw662
大会员
所在地: localhost
注册时间: 2018-10-10
帖子: 424

Re: 关于kexec和nvidia的正确使用方式

xtricman 说:

没用过,systemctl kexec似乎需要UEFI才会工作,这个是所谓内核热更新?用户态能保持吗?还是说就是个快速重启,当前内核作为bootloader启动当初kexec -l加载好的内核但是用户态还是要重启?

kexec相当于是个快速重启


ecmascript是世界上最好的语言

离线

页脚