2012-02-08 23 views
3

我正在編寫C代碼(在Linux上),它在運行時需要消耗一定數量的CPU。我正在進行一個實驗,在達到某個CPU閾值時觸發某些操作。所以,一旦使用率達到一定的門檻,我需要保持在該狀態30秒,直到我完成我的實驗。我正在使用top命令監視CPU利用率。增加CPU利用率並使用C代碼將其保持在一定水平

所以我的問題是 - 1.我如何增加CPU利用率到一個給定的值(如果可能,以確定性的方式)? 2.一旦達到閾值,是否有辦法在預定義的時間內保持該水平?頂部命令的

樣本輸出(第9列是由 '頂部' 進程所使用的CPU) - 19304 ABCDE 16 0 5448 1212 808 - [R 0.2 0.0 0:00.06頂部

與上述類似,我會看在頂部顯示我的二進制文件的利用率的行。

任何幫助,將不勝感激。另外,讓我知道你是否需要更多細節。

謝謝!

編輯: 以下幾行代碼讓我可以很好地控制CPU利用率 - 在以下情況下,我有2個選項 - 保持50%以上並將其保持在50%以下 - 經過一些試驗和錯誤之後,我以給定的睡眠價值定下來。

endwait = clock() + (seconds * CLOCKS_PER_SEC); 
while(clock() < endwait) {} 
if (cpu_utilization > 50) 
    usleep(250000); 
else 
    usleep(700000); 

希望這有助於!

+3

使用休眠和繁忙循環,睡眠,繁忙循環,睡眠,繁忙循環等等的組合來實現所需的任何cpu利用率。 – 2012-02-08 21:03:40

+0

雖然繁忙的循環顯然會將報告的CPU利用率保持在最低限度,但您可能希望在該處引發一些未對齊的內存訪問以保持CPU繁忙。 – 2012-02-09 00:04:06

回答

2

cpuburn已知使CPU利用率如此之高,以至於將溫度升高到最高水平。 似乎沒有更多關於它的官方網站,但您仍然可以使用Debian packagegooglecode訪問源代碼。 它在ASM實現的,所以你必須做出一些膠水,以便與它進行交互的C.

2

東西這種應該有一個恆定的CPU使用率,在我看來: 的md5sum <的/ dev/urandom的

+0

您好,並感謝您在您的問題旁邊提供答案。你確定urandom不會在某些地方阻塞,因爲它要求重新安裝?在我看來,簡單地對已知數據執行哈希效率很高,並且阻塞的可能性較小。 – 2012-02-12 00:56:26

+0

'/ dev/urandom'不會在'/ dev/random'的時候被阻塞。然而,從任何一方消耗數據都會減少熵池,並且可能會減慢將來的某些操作(例如,ssh/ssl中的密碼學)。散列'/ dev/zero'應該給你相同的CPU消耗,而沒有額外的風險。 – 2012-02-25 11:43:32