下面的代码片段显示了打开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
显示的系统调用花费了太多时间(与本文中介绍的调用相同)这一事实联系起来,但我没有找到有帮助的答案。
发布于 2020-05-20 18:54:42
那个特定的syscall本身并没有做任何事情。它在等待其他的东西来做一些事情,特别是在FD 11上可以读取数据。要弄清楚为什么它没有得到它等待的数据,你需要检查FD与什么相关,并找到应该写到它的另一端的东西。
顺便说一句,你发现的这个问题是非常有帮助的,你应该更仔细地再读一遍,然后再试着听从它的建议,而不是这么快就否定它。
https://unix.stackexchange.com/questions/587959
复制相似问题