问题:在 Ubuntu 上的终端中输入需要几秒钟的时间,直到输入的字符出现。
我第一次注意到这一点是在我将大块数据移动到另一个/etc/fstab
自动安装的 LUKS 加密硬盘上之后。在终端中输入(我使用的是默认的 bash)反应异常缓慢。一开始我以为问题出在额外的硬盘上,但是当我在新的SSD上重新安装Ubuntu后,问题又出现了,但我根本没有安装硬盘。我不认为这是硬件的问题,因为其他操作系统没有任何问题(三星 990 Pro 上的双启动)。
细节:
- 全新安装 Ubuntu 22.04.4 LTS,在 Samsung 870 QVO 4TB Sata 6Gb/s 上使用 LUKS 进行全磁盘加密
- 也可在 Samsung 990 Pro 4TB M.2 vMVE(未加密的 2 TB 分区)上重现
- 4x8GB RAM @2133 MT/s,至少 15GB 可用空间。
- CPU:i7-6700K,所有 8 核 < 10% 使用率
我已经尝试过:
- 设置
fs.inotify.max_user_watches
为默认值 65536 和高值 1048576 之间的值 - 多次重启
- 清除 bash 历史记录
- 卸载所有设备
- 关闭所有可能降低 FS 速度的程序(例如 PhpStorm、GitKraken)
我已经检查过了:
/var/log/dmesg
/var/log/syslog
/var/log/kern.log
我遇到了调试缓慢处理的方法并使用了strace -T -f -s9999 -p6673
,这是我按向上箭头两次的输出:
pselect6(1, [0], NULL, NULL, NULL, {sigmask=[], sigsetsize=8}) = 1 (in [0]) <1.867761>
read(0, "\33", 1) = 1 <0.000091>
pselect6(1, [0], NULL, NULL, NULL, {sigmask=[], sigsetsize=8}) = 1 (in [0]) <0.000008>
read(0, "[", 1) = 1 <0.000007>
pselect6(1, [0], NULL, NULL, NULL, {sigmask=[], sigsetsize=8}) = 1 (in [0]) <0.000007>
read(0, "A", 1) = 1 <0.000007>
write(2, "echo $$", 7) = 7 <0.000009>
pselect6(1, [0], NULL, NULL, NULL, {sigmask=[], sigsetsize=8}) = 1 (in [0]) <0.660089>
read(0, "\33", 1) = 1 <0.000024>
pselect6(1, [0], NULL, NULL, NULL, {sigmask=[], sigsetsize=8}) = 1 (in [0]) <0.000062>
read(0, "[", 1) = 1 <0.000040>
pselect6(1, [0], NULL, NULL, NULL, {sigmask=[], sigsetsize=8}) = 1 (in [0]) <0.000007>
read(0, "A", 1) = 1 <0.000007>
write(2, "\10\10\10\10\10\10\10cat /proc/sys/fs/inotify/max_user_watches", 48) = 48 <0.000008>
让我困惑的是第一次pselect6
调用,运行时间超过一秒。这绝对是罪魁祸首,但我不知道如何从这里调试问题。
这是我只输入空格的另一个 strace:
strace: Process 6673 attached
pselect6(1, [0], NULL, NULL, NULL, {sigmask=[], sigsetsize=8}) = 1 (in [0]) <2.216155>
read(0, " ", 1) = 1 <0.000015>
pselect6(1, [0], NULL, [0], {tv_sec=0, tv_nsec=0}, NULL) = 0 (Timeout) <0.000075>
write(2, " ", 1) = 1 <0.000042>
pselect6(1, [0], NULL, NULL, NULL, {sigmask=[], sigsetsize=8}) = 1 (in [0]) <0.923598>
read(0, " ", 1) = 1 <0.000017>
pselect6(1, [0], NULL, [0], {tv_sec=0, tv_nsec=0}, NULL) = 0 (Timeout) <0.000011>
write(2, " ", 1) = 1 <0.000012>
pselect6(1, [0], NULL, NULL, NULL, {sigmask=[], sigsetsize=8}) = 1 (in [0]) <1.504578>
read(0, " ", 1) = 1 <0.000016>
pselect6(1, [0], NULL, [0], {tv_sec=0, tv_nsec=0}, NULL) = 0 (Timeout) <0.000012>
write(2, " ", 1) = 1 <0.000008>
pselect6(1, [0], NULL, NULL, NULL, {sigmask=[], sigsetsize=8}) = 1 (in [0]) <1.783754>
read(0, " ", 1) = 1 <0.000016>
pselect6(1, [0], NULL, [0], {tv_sec=0, tv_nsec=0}, NULL) = 0 (Timeout) <0.000013>
write(2, " ", 1) = 1 <0.000009>
pselect6(1, [0], NULL, NULL, NULL, {sigmask=[], sigsetsize=8}) = 1 (in [0]) <1.664852>
read(0, " ", 1) = 1 <0.000015>
pselect6(1, [0], NULL, [0], {tv_sec=0, tv_nsec=0}, NULL) = 0 (Timeout) <0.000078>
write(2, " ", 1) = 1 <0.000009>
pselect6(1, [0], NULL, NULL, NULL, {sigmask=[], sigsetsize=8}strace: Process 6673 detached
<detached ...>
有时pselect6
很慢,只有 2.2 秒,有时又很快。
答案1
正如 @muru 指出的,askubuntu 上有一个重复的内容:https://askubuntu.com/questions/1509058/input-delay-on-terminal-ubuntu-22-04-4
xserver-common xserver-xephyr xserver-xorg-legacy xserver-xorg-core xwayland
我的问题没有得到解决,但通过升级 4 月 10 日发布的软件包,情况有所好转。apt update && apt upgrade
我认为与该错误相关的一些内容已在这些软件包中得到修复。但并没有彻底解决问题
我测试了建议将 mutter 升级到开发版本的答案:https://askubuntu.com/a/1509474/1341824 这个解决了问题,我还摆脱了视觉错误,比如 PhpStorm 中的闪烁