2012-03-17 58 views
0

我在linux上使用C,並且我的程序都是高CPU密度和I/O密度。使用時間命令顯示我的程序有很多開銷:如何減少我的C程序的開銷?

real 1m4.639s 
user 0m53.929s 
sys   0m9.747s 

是否有可能找出什麼成本'sys 0m9.747s'並減少它?

============================================== ===

對不起,如果這個問題不容易回答沒有代碼,但我的代碼太長,不能在這裏發佈。所以任何提示或線索也會做。謝謝

+0

發佈代碼。 > _ < – Oleksi 2012-03-17 06:14:02

+0

發佈時間太長。其實我正在做一個簡單的倒排索引 – 2012-03-17 06:14:56

+2

如果你消除所有*系統時間,你只能加快16%的程序。您可能會更專注於53秒的用戶時間;如果你在這段時間內減少了20%,那麼通過系統時間不可能100%的減少,你已經超越了你所能達到的目標。 – 2012-03-17 06:20:34

回答

7

系統CPU時間是系統調用進程中在內核中花費的時間。您可以使用strace來確定您的流程正在執行哪些系統調用。

也許你有許多很小的系統調用read(或write之一)。您可以通過增加緩衝區大小來降低它們的數量(因此每個readwrite都會傳輸更多字節)。請參閱thisthat有關問題的答案。

您還可以使用mmap將文件投影到(虛擬)內存中;這可能是某種磁盤I/O的更好方法。

但我不會專注於系統時間。它似乎只吃了15%的CPU時間,這是一個合理的比例。

我會建議您介紹您的程序(使用gprofoprofile)並找出瓶頸位置。

+0

+1:簡介!在你完成之前,所以你知道你的程序在哪裏花費時間,你很可能會嘗試優化錯誤的東西。 – 2012-03-17 09:33:46

+0

是的,有很多讀寫呼叫,我要做一個測試 – 2012-03-17 12:42:59

3

這是一個非常開放的問題,沒有具體的正確答案,因爲沒有更多的信息,問題有多廣泛。也就是說,我會建議你使用類似valgrind的配置文件來分析你的應用程序,找出代碼中哪些特定功能花費最多的時間,並對它們進行優化。

因爲這樣,你應該真的專注於在用戶用地上花費的時間。通過53秒和9秒的系統時間,你可能可以優化更多。你的優化時間會更好地用在那裏。

相關問題