一次失败的双显卡折腾记

近日购入了一款4K显示器,被高PPI所震撼的同时却发现系统相当卡顿,连鼠标移动都有一种迟滞感,检查显示设置后,发现刷新率被锁定在了30Hz。

在购买显示器之前,我已经在Intel ARK上查询过HD530是支持[email protected]输出的。显然问题并不出在这里。网上搜索发现,HDMI 2.0 才支持[email protected],由于特意购买了标明支持[email protected]的线材,所以问题只可能出在主板上。

然而华擎的产品页面没一个地方写了主板的HDMI到底是1.4还是2.0,找了好久才发现有一行小字写着最大分辨率3840×[email protected],妥妥的没戏。

核显用不成,那就买独显吧。找了一圈,支持[email protected]输出的亮机卡性价比较高的就是GT640 OEM了,遂下单购买。

到货之后测试发现并不能点亮,在用Ubuntu Live测试之后排除显卡问题,开始漫长的排错之旅。

首先说下硬件情况,由于将第一块独显——RX480用PCI Passthrough 分配给了虚拟机,宿主机一直是用核显的。外加另一块独显之后,状态就是PCI-E插槽1是RX480,插槽2是GT640。主要图形适配器之前一直设为核显,此时改为使用PCI Express。

在开机之后,会在RX480的显示器上打印POST信息,进入GRUB,启动内核。这时RX480上的显示器会停止输出,因为在启动内核过程中RX480就会被vfio接管,这是预期之内的。但接在GT640上的显示器却一直是有信号但是黑屏的状态。

关闭IOMMU,用RX480作为主GPU进入系统,可以看到显卡已经被正确识别,nouveau模块也被正确加载。系统也已经检测到了GT640上的监视器,但无论如何设置都是没有图像。dmesgjournalctl也没有输出什么有用的信息。

这时只好采用终极排错法——一个一个试。把RX480拔下来只留GT640,虽然Xorg有一些问题,但至少能看见图形界面并且tty一切正常。只留RX480,同样一切正常。(补充:N卡的问题是因为最近版本的nouveau的bug)

还排查不出来那就再换个方法,交换两块显卡的位置,虽然Xorg仍然无法启动但tty已经可以进入。查看Xorg的日志之后发现Xorg无法找到正确的监视器,不过还好,至少Xorg是可以手动配置的。

但将GT640插在插槽1,RX480插在插槽2对我来说是不可接受的。原因有二:

  1. 只有插槽1是直连CPU的,插槽2则会绕道PCH,性能有损失。外加插槽2会和板载的一堆东西分在一个IOMMU组里面,想要使用PCI Passthrough还要自己编译内核。
  2. 插槽2只有4x的速度。

通过一番Google,搜索到了vfio邮件列表当中的一封邮件(Re: [vfio-users] Boot using second GPU?),遂添加了video=efifb:off内核参数,并将两块卡的位置恢复到之前的样子。

不过问题又来了,Xorg无论如何都无法启动。我在Xorg.conf.d下添加了显示卡配置文件,但Xorg仍然抱怨无法找到监视器。好吧,那我继续添加监视器配置。这时Xorg日志中显示KMS(Kernel Mode Setting)加载失败。

nouveau是依赖于KMS运行的,但是我没有关闭KMS啊?查看Arch Wiki

At first, note that for any method you use, you should always disable:

  • Any vga= options in your bootloader as these will conflict with the native resolution enabled by KMS.
  • Any video= lines that enable a framebuffer that conflicts with the driver.
  • Any other framebuffer drivers (such as uvesafb).

嗯,好吧。

找了找,闭源驱动是不依赖KMS的,那就装闭源驱动好了。

不过,即便开了DRM kernel mode setting,性能仍然弱鸡,Kwin处处可见卡顿,tty直接黑屏,进入GRUB就开始黑屏,直到Xorg启动。难怪NVIDIA的Troubleshooting和Tips and Tricks都要单独一页,嗯。

最后也不知道这些问题是切换主GPU产生的还是驱动问题,不过tty用不了,GRUB看不见,这还能用么?卡退了。换主板。

 

 

闲的蛋疼系列:将Brook代理转发为Shadowsocks代理

自己提出的蛋疼需求,再如何也要满足

声明:这篇博客可能并没有任何的卵用,有很多更直接的方法来实现目的,比如说直接换代理软件。
前段时间自建SSR一天挂一个IP,于是决定换了其他代理工具。在当时本决定使用V2Ray,但当时我还是个Linux Newbie,连WinSCP都用不利索,自然没法配置相对没那么「用户友好」的V2Ray,而使用了配置十分简单的Brook。
Brook在翻墙方面为什么问题,性能不错,但是它的客户端并不好用。在电脑上还好,一次设置好之后也没什么麻不麻烦的,开个socks5代理再配合SwitchyOmega之类的浏览器插件使用即可。
而在Android/iOS上面就只好使用官方客户端了,但官方客户端实在是不好用。无论是稳定性还是功能都比SS/SSR客户端相差甚远。
于是我就萌生了一个想法,能不能通过代理转发来使用Brook?
继续阅读“闲的蛋疼系列:将Brook代理转发为Shadowsocks代理”