离散图形总是 DynOff

Tic*_*aes 5 ati radeon vgaswitcheroo hybrid-graphics

我正在使用默认的开源驱动程序,当我运行

  # cat /sys/kernel/debug/vgaswitcheroo/switch
Run Code Online (Sandbox Code Playgroud)

我总是将我的独立 AMD 适配器用作 DynOff。我试过

  echo ON > /sys/kernel/debug/vgaswitcheroo/switch
Run Code Online (Sandbox Code Playgroud)

但什么也没有发生。我该怎么办?

小智 5

在我的 Ubuntu 18.04 上,我是这样解决的。无需编辑/etc/default/grub文件。

  1. 通过运行检查是否默认使用集成 GPU glxheads

    $ glxheads                                                              
       ...                                                                     
       GL_VERSION:  3.0 Mesa 18.0.5                                            
       GL_VENDOR:   Intel Open Source Technology Center                        
       GL_RENDERER: Mesa DRI Intel(R) Sandybridge Mobile
    
    Run Code Online (Sandbox Code Playgroud)
  2. 检查离散 GPU 是否可见,但 DynOff

    $ sudo cat /sys/kernel/debug/vgaswitcheroo/switch                       
      0:DIS: :DynOff:0000:01:00.0                                             
      1:IGD:+:Pwr:0000:00:02.0     
    
    Run Code Online (Sandbox Code Playgroud)
  3. 为 启用独立 GPUglxheads并再次运行它。可以看到渲染器发生了变化。

    $ DRI_PRIME=1 glxheads                                                  
      GL_VERSION:  3.0 Mesa 18.0.5                                            
      GL_VENDOR:   X.Org                                                      
      GL_RENDERER: AMD TURKS (DRM 2.50.0 / 4.15.0-32-generic, LLVM 6.0.0)
    
    Run Code Online (Sandbox Code Playgroud)
  4. 此外,在运行时DRI_PRIME=1 glxheads,在不同的窗口中检查现在离散 GPU 是DynPwr不是DynOff

    $ sudo cat /sys/kernel/debug/vgaswitcheroo/switch                         
      0:DIS: :DynPwr:0000:01:00.0                                             
      1:IGD:+:Pwr:0000:00:02.0
    
    Run Code Online (Sandbox Code Playgroud)
  5. 因此,您需要运行每个应用程序DRI_PRIME=1才能使用离散 GPU。此外,您可以永久设置此环境变量 https://unix.stackexchange.com/questions/117467/how-to-permanently-set-environmental-variables


shc*_*bak 2

  1. 设置内核参数:

    sudo nano /etc/default/grub
    
    Run Code Online (Sandbox Code Playgroud)
  2. 像这样查找GRUB_CMDLINE_LINUX_DEFAULT、附加radeon.runpm=0

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash radeon.runpm=0"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 更新配置

    sudo update-grub
    
    Run Code Online (Sandbox Code Playgroud)
  4. 加上/etc/rc.local

    echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
    
    Run Code Online (Sandbox Code Playgroud)
  5. 重启机器

    sudo shutdown -r now
    
    Run Code Online (Sandbox Code Playgroud)
  6. 利润!

    sudo cat /sys/kernel/debug/vgaswitcheroo/switch 
    
    0:IGD:+:Pwr:0000:00:02.0
    
    1:DIS: :Off:0000:01:00.0
    
    Run Code Online (Sandbox Code Playgroud)


小智 1

我的 ATI 离散混合系统工作正常。

# lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Thames [Radeon HD 7500M/7600M Series]

gedit /etc/default/grub 
#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash radeon.runpm=0"
GRUB_CMDLINE_LINUX_DEFAULT="radeon.runpm=0"
GRUB_CMDLINE_LINUX=""

cat /sys/kernel/debug/vgaswitcheroo/switch 
0:DIS: :Pwr:0000:01:00.0
1:IGD:+:Pwr:0000:00:02.0
Run Code Online (Sandbox Code Playgroud)

在文件 env 中添加DRI_PRIME=1字符串以在应用程序中使用 ATI 显卡。

gedit /etc/bash.bashrc 
DRI_PRIME=1
gedit /etc/environment 
DRI_PRIME=1
gedit /etc/profile
DRI_PRIME=1
Run Code Online (Sandbox Code Playgroud)

最后,它默认与所有应用程序一起使用。

# glxheads 
glxheads: exercise multiple GLX connections (any key = exit)
Usage:
  glxheads xdisplayname ...
Example:
  glxheads :0 mars:0 venus:1
Name: :0.0
  Display:     0x55a68ea5b670
  Window:      0x4200002
  Context:     0x55a68ea6cd80
  GL_VERSION:  3.0 Mesa 17.2.2
  GL_VENDOR:   X.Org
  GL_RENDERER: AMD TURKS (DRM 2.50.0 / 4.13.0-25-generic, LLVM 5.0.0)
Run Code Online (Sandbox Code Playgroud)