Dolphin

在 Dolphin 中切換目錄的大延遲

  • October 15, 2021

我正在使用 KDE 進行 Debian 測試,現在有幾個星期(我假設它與 Dolphin 或其他 KDE 庫的更新一致),每次我在 Dolpin(21.08.2)中切換目錄時都會出現延遲。無論我切換到哪個目錄,它似乎總是大致相同(近 1 秒)。為了檢查這是否是由我的配置引起的,我創建了一個新使用者,但同樣的事情發生了。

htop 顯示 dolphin 正在等待 I/O(程序狀態“D”),所以我執行了strace -e openat dolphin. 每次等待時,我都會看到類似的輸出重複大約八次。

openat(AT_FDCWD, "/run/blkid/blkid.tab", O_RDONLY|O_CLOEXEC) = 23
openat(AT_FDCWD, "/proc/evms/volumes", O_RDONLY|O_CLOEXEC) = -1 ENOENT (Datei oder Verzeichnis nicht gefunden)
openat(AT_FDCWD, "/proc/lvm/VGs", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (Datei oder Verzeichnis nicht gefunden)
openat(AT_FDCWD, "/dev", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 23
openat(AT_FDCWD, "/devfs", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (Datei oder Verzeichnis nicht gefunden)
openat(AT_FDCWD, "/devices", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (Datei oder Verzeichnis nicht gefunden)
openat(AT_FDCWD, "/sys/block", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 23
openat(AT_FDCWD, "/sys/block/nvme0n1/dev", O_RDONLY|O_CLOEXEC) = 25
openat(AT_FDCWD, "/sys/dev/block/259:0", O_RDONLY|O_CLOEXEC) = 25
openat(25, "size", O_RDONLY|O_CLOEXEC)  = 33
openat(25, "removable", O_RDONLY|O_CLOEXEC) = 33
openat(25, "ext_range", O_RDONLY|O_CLOEXEC) = 33
openat(25, "nvme0n1p3/size", O_RDONLY|O_CLOEXEC) = 34
openat(AT_FDCWD, "/sys/block/nvme0n1/nvme0n1p3/dev", O_RDONLY|O_CLOEXEC) = 34
openat(25, "nvme0n1p1/size", O_RDONLY|O_CLOEXEC) = 34
openat(AT_FDCWD, "/sys/block/nvme0n1/nvme0n1p1/dev", O_RDONLY|O_CLOEXEC) = 34
openat(25, "nvme0n1p2/size", O_RDONLY|O_CLOEXEC) = 34
openat(AT_FDCWD, "/sys/block/nvme0n1/nvme0n1p2/dev", O_RDONLY|O_CLOEXEC) = 34
openat(AT_FDCWD, "/sys/block/sr0/dev", O_RDONLY|O_CLOEXEC) = 25
openat(AT_FDCWD, "/sys/dev/block/11:0", O_RDONLY|O_CLOEXEC) = 25
openat(25, "size", O_RDONLY|O_CLOEXEC)  = 33
openat(25, "removable", O_RDONLY|O_CLOEXEC) = 33
openat(25, "ext_range", O_RDONLY|O_CLOEXEC) = 33
openat(AT_FDCWD, "/sys/dev/block/11:0", O_RDONLY|O_CLOEXEC) = 34
openat(34, "dm/uuid", O_RDONLY|O_CLOEXEC) = -1 ENOENT (Datei oder Verzeichnis nicht gefunden)
openat(AT_FDCWD, "/dev/sr0", O_RDONLY|O_NONBLOCK|O_CLOEXEC) = 34
openat(AT_FDCWD, "/sys/dev/block/11:0", O_RDONLY|O_CLOEXEC) = 35
openat(35, "dm/uuid", O_RDONLY|O_CLOEXEC) = -1 ENOENT (Datei oder Verzeichnis nicht gefunden)
openat(AT_FDCWD, "/sys/dev/block/11:0", O_RDONLY|O_CLOEXEC) = 35
openat(35, "dm/uuid", O_RDONLY|O_CLOEXEC) = -1 ENOENT (Datei oder Verzeichnis nicht gefunden)
openat(AT_FDCWD, "/sys/block/nvme1n1/dev", O_RDONLY|O_CLOEXEC) = 25
openat(AT_FDCWD, "/sys/dev/block/259:1", O_RDONLY|O_CLOEXEC) = 25
openat(25, "size", O_RDONLY|O_CLOEXEC)  = 33
openat(25, "removable", O_RDONLY|O_CLOEXEC) = 33
openat(25, "ext_range", O_RDONLY|O_CLOEXEC) = 33
openat(25, "nvme1n1p1/size", O_RDONLY|O_CLOEXEC) = 34
openat(AT_FDCWD, "/sys/block/nvme1n1/nvme1n1p1/dev", O_RDONLY|O_CLOEXEC) = 34
openat(AT_FDCWD, "/sys/block/sda/dev", O_RDONLY|O_CLOEXEC) = 25
openat(AT_FDCWD, "/sys/dev/block/8:0", O_RDONLY|O_CLOEXEC) = 25
openat(25, "size", O_RDONLY|O_CLOEXEC)  = 33
openat(25, "removable", O_RDONLY|O_CLOEXEC) = 33
openat(25, "ext_range", O_RDONLY|O_CLOEXEC) = 33
openat(25, "sda2/size", O_RDONLY|O_CLOEXEC) = 34
openat(AT_FDCWD, "/sys/block/sda/sda2/dev", O_RDONLY|O_CLOEXEC) = 34
openat(25, "sda3/size", O_RDONLY|O_CLOEXEC) = 34
openat(AT_FDCWD, "/sys/block/sda/sda3/dev", O_RDONLY|O_CLOEXEC) = 34
openat(25, "sda1/size", O_RDONLY|O_CLOEXEC) = 34
openat(AT_FDCWD, "/sys/block/sda/sda1/dev", O_RDONLY|O_CLOEXEC) = 34

這可能與我安裝了多個磁碟和分區的事實有關,但我不明白為什麼每次更改目錄時它都會等待它們。我還想知道它是否可能每次都在刷新側邊欄中已使用的磁碟空間欄,但隱藏所有側邊欄並不會改變任何東西。

https://bugs.kde.org/show_bug.cgi?id=426672可能是相關的,但我沒有執行任何 docker 容器,也沒有那麼多掛載(mount | wc -l顯示 30 行)。

我剛剛注意到的另一件事:在新選項卡中打開目錄是即時的。所以真的只是改變目前目錄似乎是造成這種延遲的原因。

關於DNS:

  • sudo tcpdump udp port 53 --interface wlp26s0在 Dolphin 中做某​​事時不顯示任何請求。
  • strace -e trace=network dolphin顯示了幾行,但在每個目錄更改上並不可靠:
recvmsg(3, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\1\1T\24\0\0\0\0\277\6\0\0\5\213\367\0\314\3\16\2\314\3\16\2\20\0\0\0\0\0\0\0", iov_len=4096}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 32
recvmsg(3, {msg_namelen=0}, 0)          = -1 EAGAIN (Die Ressource ist zur Zeit nicht verfügbar)

(英文資訊為“Resource暫時不可用”)

這個 KDE 錯誤報告似乎非常準確地描述了這個問題: https ://bugs.kde.org/show_bug.cgi?id=442106

它似乎是由目前未插入的設備的/etc/fstab條目觸發的UUID=(我有外部驅動器)。

引用自:https://unix.stackexchange.com/questions/672885