每次我尝试通过单击另一个应用程序(例如 Thunderbird)中的链接来打开新选项卡时,整个桌面都会冻结(鼠标移动,但仅此而已)并且 10-15 秒内什么都不会发生。
只有在该时间过去之后,才会出现一个现有的 Firefox 窗口,其中的新选项卡会正常打开请求的 URL。
这个延迟困扰了我好几个月,我终于开始追踪它了。简单地运行一下ktrace -i firefox some://new/url
,我发现它在 NVidia 中花了 5 秒钟ioctl
——两次。
(注意,第三列列出的是从一开始经过的秒数):
> kdump -E
...
62726 MainThread 0.114878 CALL exit(0)
62727 firefox 5.419059 RET ioctl 0
62727 firefox 5.419083 CALL openat(AT_FDCWD,0x186bf4be2420,0x2<O_RDWR>)
62727 firefox 5.419087 NAMI "/dev/nvidia0"
62727 firefox 5.419114 RET openat 15/0xf
62727 firefox 5.419116 CALL fcntl(0xf,F_SETFD,FD_CLOEXEC)
62727 firefox 5.419117 RET fcntl 0
62727 firefox 5.419119 CALL ioctl(0xf,0xc01446ce,0x186bf4be2500)
62727 firefox 10.649216 RET ioctl 0
62727 firefox 10.649233 CALL openat(AT_FDCWD,0x186bf4be2420,0x2<O_RDWR>)
62727 firefox 10.649236 NAMI "/dev/nvidia0"
62727 firefox 10.649305 RET openat 16/0x10
62727 firefox 10.649307 CALL fcntl(0x10,F_SETFD,FD_CLOEXEC)
62727 firefox 10.649309 RET fcntl 0
62727 firefox 10.649310 CALL ioctl(0x10,0xc01446ce,0x186bf4be2500)
62727 firefox 15.849375 RET ioctl 0
62727 firefox 15.849418 CALL ioctl(0x8,0xc020462a,0x186bf4be24d0)
ioctl 0xc01446ce 是什么?我猜是 NVidia 特有的——这也可以解释整个桌面短暂冻结的原因...
能以某种方式避免这种情况吗?有些人在 Windows 上遇到了这个问题——对他们的建议是关闭“使用硬件加速(如果可用)”设置,但这在 FreeBSD 上不起作用。
还有什么我可以尝试的吗?
答案1
好的,我将 nvidia-driver 从 390.151 升级到了 390.154,不幸的是,这需要重新启动。因此,在重新启动之前,我还将 world/kernel 重建为最新的 13/stable...
重启后,新标签会立即打开——我不知道是什么原因。我之前尝试过只重启 Firefox——但这没有用——但一段时间(265 天)以来都没有完全重启过。
我想知道 NVidia 出了什么问题,导致 ioctl 花费了 5 秒钟——但重启后就不需要了……