2012-10-14 46 views
1

我正在經歷各種機制線程計算器用於計算處理的CPU時間。時鐘()的實現

如何clock()內部實現的?是否使用rdtsc()(如果是這樣的話那麼它是內核之間遷移大小寫)。

此外,getrusage()實施?它是否也取決於TSC?

在此先感謝

回答

0

您可以輕鬆地瀏覽一些libc代碼。這裏是time/目錄的musl-libc

在幾個圖書館,一些低級別的定時系統調用使用VDSO,以避免支付一個真正的系統調用的成本(從用戶空間到內核和背面),所以在某種程度上使用RTDSC。

但我很奇怪,你問。如果是好奇心,只要研究自由軟件實施的源代碼。否則,請相信規範&的實現。

血腥細節可能很複雜,因爲實現和系統特定。真正的實現可以在運行時動態調整(例如通VDSO建立在內核中)。

1

內核會跟蹤ticks大小的進程的CPU利用率。

clock()getrusage()都基於這些。

內核使用抽樣方法累積內存,內核接收時鐘的硬件中斷並執行時鐘處理程序,該時鐘處理程序將tick添加到當前正在運行的進程中。至少,這是我上次看的時候的工作方式。

因此,rtdsc根本不起作用 - 這是一件好事,因爲rdtsc不能準確測量所有CPU。