CPU在絕大部分時(shí)間是什么都不干的。 大多數(shù)技術(shù)專家都知道這個(gè)事實(shí),但對(duì)于 CPU 是如何從空閑狀態(tài)切換到工作狀態(tài),忙完后又回到空閑狀態(tài)的相應(yīng)機(jī)制,我們還沒有詳細(xì)討論過。 對(duì)現(xiàn)代處理器來說這種機(jī)制變得越來越重要; 今天大部分芯片設(shè)計(jì)的一個(gè)目標(biāo)是將處理器盡快地切換到低功率狀態(tài)。
Gustavo Duarte 寫的 一篇詳細(xì)文章指出, CPU 空閑時(shí)(idle CPU)并不是什么都不干(doing nothing) —— 而是在運(yùn)行空閑任務(wù)(idle tasks)。 CPU整體設(shè)計(jì)就是完成當(dāng)前操作后盡可能快速地返回到空閑狀態(tài), 但系統(tǒng)必須要有某種方法/方式來喚醒芯片,讓它去關(guān)注其他某些東西。 其中的一種方式是使用系統(tǒng)計(jì)時(shí)器(system timer)。
[圖片來源:Gustavo Duarte]
如 Duarte 文中所述, 阻止CPU消耗太多電量的一種方法是內(nèi)置更長的時(shí)鐘周期(tick periods)。 通過這種方式,CPU在喚醒之前需要度過更長的空閑時(shí)間,然后執(zhí)行基本任務(wù),接著再次睡眠。
什么是空閑任務(wù)(idle task)?
空閑任務(wù)可能聽起來有點(diǎn)自相矛盾。 關(guān)鍵是你要理解CPU既然通電,那么就必須時(shí)刻不停地在運(yùn)轉(zhuǎn), 即使他什么正事也不干。 在哲學(xué)上對(duì)應(yīng)的詞匯就是所謂的“忙等待”(busy waiting),本質(zhì)是讓 CPU 不停地去計(jì)算某個(gè)條件,看看是否為 true.
對(duì)于運(yùn)行在x86芯片上的Windows來說, 這個(gè)功能表現(xiàn)為暫停(HLT)指令,對(duì)應(yīng) Windows 的 System Idle Process 進(jìn)程。 Windows只有在某個(gè)CPU核心沒有合適的線程可執(zhí)行時(shí),才會(huì)調(diào)用 idle 空閑進(jìn)程去運(yùn)行。 如果你查看 Windows 系統(tǒng)的任務(wù)管理器, 你會(huì)看到 System Idle Process(系統(tǒng)空閑進(jìn)程) 大多數(shù)時(shí)候都顯示一個(gè)較高的CPU使用百分比。 和進(jìn)程列表中的其他進(jìn)程不同,空閑進(jìn)程的值越高,代表CPU的工作量越小。 設(shè)計(jì) HLT 指令的目的是為了盡可能地減少電量消耗,并使 CPU 進(jìn)入節(jié)能模式/狀態(tài)。
HLT的歷史
HLT(暫停)指令其實(shí)有很長的歷史 —— 在 第一顆8086處理器 上就已經(jīng)實(shí)現(xiàn)了, 但早期操作系統(tǒng)并不支持它。 老程序員可能會(huì)記得,曾經(jīng)有一段時(shí)間, 甚至連基本的 HLT 功能都總是不能按預(yù)期方式執(zhí)行。 回首過去的超頻年代, 那時(shí)候CPU有一個(gè)基本的工具(utility)叫做 Rain(雨), 用來實(shí)際地增加CPU的idle空閑時(shí)間(以及提升處理過程中的散熱和能耗)。 隨著時(shí)間的流逝,我們可以看到硬件制造廠商和軟件開發(fā)者都變得越來越復(fù)雜。
這是 Windows 8 創(chuàng)新的一個(gè)方面 —— 好吧,本質(zhì)上只是嘗試創(chuàng)新 —— 但卻產(chǎn)生了一些奇怪的結(jié)果。 在默認(rèn)情況下它允許在處理過程中有更長的間隔周期,但這也導(dǎo)致一些程序產(chǎn)生問題,如Google Chrome等程序?yàn)榱烁斓貙?duì)用戶操作進(jìn)行響應(yīng),會(huì)自動(dòng)將時(shí)鐘頻率(tick rate)設(shè)置為操作系統(tǒng)所允許的最小值。 這個(gè)BUG在新版程序中已經(jīng)修復(fù)了, 但仍可能減少某些Windows 8電腦的電池續(xù)航時(shí)間。
一顆 Intel 8086 CPU, 1978年。確實(shí), 當(dāng)時(shí)CPU是很簡單的玩意兒 —— 大約只有2萬個(gè)晶體管.
這確實(shí)是一個(gè)可以調(diào)節(jié)時(shí)鐘周期的地方, 加上要支持沒有基于晶體定時(shí)器的系統(tǒng),使微軟措手不及。 在Windows8中,軟件通過混合操作系統(tǒng)時(shí)間記錄的方式來調(diào)整前端總線速度,就會(huì)導(dǎo)致錯(cuò)誤的基準(zhǔn)測試結(jié)果 。 這種行為在[Windows 10]中一直保持, 盡管它只是一個(gè)小眾的問題 —— 在操作系統(tǒng)產(chǎn)生錯(cuò)誤的結(jié)果你必須調(diào)整系統(tǒng)前端總線的時(shí)鐘.
原來的那篇博客主要討論的是桌面操作系統(tǒng),race-to-idle是現(xiàn)代CPU架構(gòu)的關(guān)鍵組件。 AMD和英特爾每年都會(huì)發(fā)布新一代產(chǎn)品,還會(huì)經(jīng)常推出更新,可能最高性能只提升那么一點(diǎn)點(diǎn), 但通過更好的時(shí)鐘門控(clock gating)卻能顯著提高能量使用率并更快地進(jìn)行節(jié)能模式切換.
哈爾濱品用軟件有限公司致力于為哈爾濱的中小企業(yè)制作大氣、美觀的優(yōu)秀網(wǎng)站,并且能夠搭建符合百度排名規(guī)范的網(wǎng)站基底,使您的網(wǎng)站無需額外費(fèi)用,即可穩(wěn)步提升排名至首頁。歡迎體驗(yàn)最佳的哈爾濱網(wǎng)站建設(shè)。
