问题

问题

问题

以下代码片段显示了我的系统打开所花费的时间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 连接到什么并找到应该连接的内容写到它的另一端。

顺便说一下,这个问题你发现的是极其有帮助的,你应该更仔细地重新阅读它,并再次尝试听取它的建议,而不是这么快地驳回它。

相关内容