【问题标题】:Preventing gtk FileChooserDialog calling stat on all files in the directory?防止 gtk FileChooserDialog 对目录中的所有文件调用 stat?
【发布时间】:2009-04-30 23:22:35
【问题描述】:

对于包含许多文件的 nfs 目录,打开 gtk FileChooserDialog 非常缓慢。 strace 显示很多时间调用“stat”。对目录中的每个文件进行大约 5 次调用。我们如何关闭对“stat”的调用,只显示文件名列表而不显示修改时间?

我们使用的是 Redhat Enterprise 4、x86_64、Linux 2.6.9-42.0.8.ELsmp 和 FileChooser 来自: /usr/lib64/libgtk-x11-2.0.so.0.400.13 。一个测试程序打开一个 FileChooserDialog 需要 10 秒,而 'ls' 大约需要 25 毫秒才能列出相同的目录。

我们的 Eclipse 应用程序因文件选择器问题而瘫痪......

【问题讨论】:

  • 我也注意到了这个延迟时间。当你去 /usr/bin 告诉 firefox 用什么应用程序打开文件时,它真的很烦人,它会滞后 10 秒。

标签: linux performance dialog gtk


【解决方案1】:

至少自 2005 年以来,gtk+ 和 gnome 团队有一个与此问题相关的bug 报告。gnome 核心库最近和未来的变化有望提高性能。 如果您在文件选择器菜单中有任何网络驱动器书签,则此问题可能会更加严重。

【讨论】:

    【解决方案2】:

    GTK 文件打开对话框很可能是 stat(2)ting 目录中的所有文件。它相当于目录上的ls -l,它应该运行缓慢。 ls | cat 的输出(明显更快)可能还不够,因为它无法区分文件和目录。

    我建议测量ls | catls -l 和 GTK 文件打开对话框。如果 GTK 文件打开对话框比ls -l 慢很多,那么 GTK(不是 NFS)有问题。我会通过strace 运行GTK 应用程序,看看什么是慢的。如果 GTK 文件打开对话框的速度与ls -l 大致相同,我不认为它可以变得更快——也许可以调整 NFS 挂载标志,升级 NFS 客户端和服务器,或者可以切换到更快的基础架构,例如 Samba。

    【讨论】:

    • ls -l 也很慢,所以根本问题是如何在不可靠的文件系统上导航。关键是,我不在乎在文件选择器中看不到的 14027 个文件是否是目录,我只需要知道前 20 个左右的文件是否适合屏幕。
    【解决方案3】:

    目录是否已挂载?这可能对统计数据有所帮助,因为每个文件的 atime 都将使用统计数据进行更新。

    您需要使用 -o noatime 重新挂载 nfs 以关闭 atime 更新。

    【讨论】:

    • cat /proc/mounts 显示:nfs rw,v3,rsize=32768,wsize=32768,hard,intr,tcp,lock,addr=gx.hidd.en 0 0 所以不是吗?我们尝试了 chattr 并得到“不适当的 ioctl ...”。我们可以在应用程序运行时从用户帐户更改此“noatime”吗?使用'ls' | head 需要 40 毫秒,而 GTK 文件选择器需要 10 秒。问题是 GTK 正在做一些不需要和不想要的事情,我们宁愿完全停止它而不是让它变慢。非常感谢您的建议 - 我会将其转发给系统管理员...
    • stat(2) 不影响时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 2021-12-21
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多