问题
以下代码片段显示了我的系统打开所花费的时间inkscape
以及我立即关闭窗口所花费的时间inkscape
。
$ /usr/bin/time -p inkscape
real 26.95
user 0.59
sys 0.05
我读过帖子(这里和这里)其中人们报告 inkscape 需要太多时间才能启动,但答案将此问题与用户系统中安装的字体数量相关。
据我所知,我可以使用以下命令获取系统中安装的字体数量(见下文)。所以,我的系统中安装的字体数量不是这里的问题。
$ fc-list | wc -l
105
我尝试查看strace
命令输出,发现正在减慢打开过程的任务inkscape
。 (我没有共享完整的日志,strace
因为它报告了所有输出中一些个人文件的名称。)
$ strace --absolute-timestamps=ns inkscape
...
13:27:03.700577007 read(11, "\1\0\0\0\0\0\0\0", 16) = 8
13:27:03.700603187 poll([{fd=11, events=POLLIN}], 1, 25000) = 0 (Timeout)
13:27:28.725932887 write(11, "\1\0\0\0\0\0\0\0", 8) = 8
13:27:28.726024537 futex(0x55ca60dcb240, FUTEX_WAKE_PRIVATE, 2147483647) = 0
...
正如您在上面看到的,两个任务之间有 25 秒,所以这肯定与问题有关。
问题
系统调用正在做什么poll
以及如何减少系统执行该系统调用所需的时间?
PD1: 我尝试poll([{fd=11, events=POLLIN}], 1, 25000
用谷歌搜索并发现这个问题其中海报解释说 GTK3 应用程序启动缓慢,并将这种不当行为与显示strace
系统调用花费太多时间的事实联系起来(与本文中介绍的相同),但我没有找到答案有帮助。
答案1
那个特定的系统调用不是正在做任何东西本身。它是等待为了其他事情做某事,特别是为了让数据可以在 FD 11 上读取。要弄清楚为什么它没有得到它正在等待的数据,您需要检查 FD 连接到什么并找到应该连接的内容写到它的另一端。
顺便说一下,这个问题你发现的是极其有帮助的,你应该更仔细地重新阅读它,并再次尝试听取它的建议,而不是这么快地驳回它。