Performance

桁架 -D 和桁架 -E 有什麼區別?

  • November 21, 2014

我目前正在分析 Solaris 上從文件讀取並且性能非常低的命令。這些truss -D命令顯示read系統呼叫最多需要 0.03 秒,但是當我使用 時truss -E,它們始終為 0.0000 或 0.0001(比使用-D選項低兩個數量級)。在man頁面中,它說:

-D
    Includes a time delta on each line of trace output.  The
    value appears as a field containing seconds.fraction and
    represents the elapsed time for the  LWP  that  incurred
    the event since the last reported event incurred by that
    LWP. Specifically, for system calls,  this  is  not  the
    time spent within the system call.

-E
    Includes a time delta on each line of trace output.  The
    value appears as a field containing seconds.fraction and
    represents the difference in time  elapsed  between  the
    beginning and end of a system call.

    In contrast to  the -D option, this  is  the  amount  of
    time spent within the system call.

因此,該-E選項測量系統呼叫中花費的實際時間,而-D沒有……誰能解釋究竟是什麼造成了這種差異?在系統呼叫“之外”的剩餘時間內正在做什麼?

根據您引用的文件,我發現很清楚一個涵蓋從一個系統呼叫到下一個系統呼叫的整個持續時間,而另一個僅涵蓋系統呼叫中的時間。

花費在系統呼叫內部的時間百分比與花費在系統呼叫外部的時間百分比將大致告訴您程序是否受 CPU 限制。

受 CPU 限制的程序大部分時間都在系統呼叫之外。這是程序在執行計算時將處於的狀態。對於受 CPU 限制的程序,這兩個數字之間的差異會很大,並且可能至少相差一個數量級。

不受 CPU 限制的程序大部分時間將被阻塞等待事件。因為阻塞只能發生在系統呼叫內部。對於不受 CPU 限制的程序,這些數字將大致相同(可能僅相差一位數百分比)。

這是簡單的解釋,實際上還有更多方面需要考慮。由於記憶體映射和交換,一個程序實際上可以在沒有系統呼叫的情況下阻塞。此外,核心可以提供涉及核心程式碼內部計算的功能。這可能導致程序在系統呼叫中花費大部分時間,並且仍然受 CPU 限制。例如,後者可能在使用加密文件系統時發生。

引用自:https://serverfault.com/questions/645850