Linux
了解程序在使用者/核心空間中花費的 CPU 時間
我有一個通常報告(
time
命令報告)的應用程序:real 1.59 user 1.42 sys 4.73
但是當我載入一個共享庫並執行它時,時間會變得非常高(
time
命令報告):real 28.51 user 106.22 sys 5.23
由於我的共享庫的工作,預計執行中會出現一定程度的增長(在 CentOS 和 Ubuntu 上報告了 2 到 4 倍——正如預期的那樣),但在 Fedora 24 上報告的上述時間太高了。
我嘗試使用
perf
which 報告:255352.948615 task-clock:u (msec) # 3.895 CPUs utilized 0 context-switches:u # 0.000 K/sec 0 cpu-migrations:u # 0.000 K/sec 18,127 page-faults:u # 0.071 K/sec 664,852,184,198 cycles:u # 2.604 GHz (50.03%) 19,323,811,463 stalled-cycles-frontend:u # 2.91% frontend cycles idle (50.02%) 578,178,881,331 stalled-cycles-backend:u # 86.96% backend cycles idle (50.02%) 110,595,196,687 instructions:u # 0.17 insn per cycle # 5.23 stalled cycles per insn (50.00%) 28,361,633,658 branches:u # 111.068 M/sec (50.01%) 777,249,031 branch-misses:u # 2.74% of all branches (50.01%) 65.564158710 seconds time elapsed
這似乎表明 CPU 空閒了很長時間。但我試圖找出程式碼中發生這種情況的位置(我可以訪問我的應用程序和相關共享庫的整個原始碼)。我還看到
perf report
了哪些報告在函式/系統呼叫中花費的時間百分比。但我對更精細的級別感興趣,即這些函式中的哪一行,以便我能理解原因。鑑於我沒有提供有關我的應用程序/共享庫的太多資訊,我很感激提供任何具體建議並不容易。我只是在尋找建議/工具/想法,以找出 CPU 大部分時間花在程式碼中(或空閒)的位置。
它是帶有 glibc 2.23 的 Fedora 24 Linux/x86_64(我的應用程序和共享庫都是使用 gcc 6.1.1 和 glibc 2.23 編譯的)。
這似乎表明 CPU 空閒了很長時間。
是的。即所有時間的 87%。但這並不意味著處理器不能處理其他任務和程序。
664,852,184,198 cycles:u # 2.604 GHz (50.03%) 19,323,811,463 stalled-cycles-frontend:u # 2.91% frontend cycles idle (50.02%) 578,178,881,331 stalled-cycles-backend:u # 86.96% backend cycles idle (50.02%) 110,595,196,687 instructions:u # 0.17 insn per cycle
優化程序以更好地利用 CPU 和記憶體訪問它複雜的任務,沒有任何程式碼,不可能更詳細地回答你。