System-Calls

strace 報告一個耗時過長的系統呼叫

  • May 20, 2020

問題

以下程式碼片段顯示了我的系統打開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在 Google 上搜尋並發現這個問題,其中發布者解釋說 GTK3 應用程序啟動緩慢,並將這種不當行為與strace顯示系統呼叫花費太多時間的事實聯繫起來(這與在這篇文章)但我沒有發現答案有幫助。

那個特定的系統呼叫本身並沒有做任何事情。它正在等待其他東西做某事,特別是數據可以在 FD 11 上讀取。要弄清楚為什麼它沒有得到它正在等待的數據,您需要檢查該 FD 連接到什麼並找到應該是什麼寫到它的另一端。

順便說一句,你發現這個問題非常有幫助,你應該更仔細地重新閱讀它並再次嘗試聽取它的建議,而不是這麼快就忽略它。

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