CPU 硬盤性能到底相差多少

本文以一個現代的、實際的個人電腦爲對象,分析其中CPU(Intel Core 2 Duo 3.0GHz)以及各類子系統的運行速度——延遲和數據吞吐量。通過粗略的估算PC各個組件的相對運行速度,希望能給大家留下一個比較直觀的印象。本文中的數據來自實際應用,而非理論最大值。時間的單位是納秒(ns,十億分之一秒),毫秒(ms,千分之一秒),和秒(s)。吞吐量的單位是兆字節(MB)和千兆字節(GB)。讓我們先從CPU和內存開始,下圖是北橋部分:

wps_clip_image-14370

第一個令人驚歎的事實是:CPU快得離譜。在Core 2 3.0GHz上,大部分簡單指令的執行只需要一個時鐘週期,也就是1/3納秒。即使是真空中傳播的光,在這段時間內也只能走10釐米(約4英寸)。把上述事實記在心中是有好處的。當你要對程序做優化的時候就會想到,執行指令的開銷對於當今的CPU而言是多麼的微不足道。

當CPU運轉起來以後,它便會通過L1 cache和L2 cache對系統中的主存進行讀寫訪問。cache使用的是靜態存儲器(SRAM)。相對於系統主存中使用的動態存儲器(DRAM),cache讀寫速度快得多、造價也高昂得多。cache一般被放置在CPU芯片的內部,加之使用昂貴高速的存儲器,使其給CPU帶來的延遲非常低。在指令層次上的優化(instruction-level optimization),其效果是與優化後代碼的大小息息相關。由於使用了高速緩存技術(caching),那些能夠整體放入L1/L2 cache中的代碼,和那些在運行時需要不斷調入/調出(marshall into/out of)cache的代碼,在性能上會產生非常明顯的差異。

正常情況下,當CPU操作一塊內存區域時,其中的信息要麼已經保存在L1/L2 cache,要麼就需要將之從系統主存中調入cache,然後再處理。如果是後一種情況,我們就碰到了第一個瓶頸,一個大約250個時鐘週期的延遲。在此期間如果CPU沒有其他事情要做,則往往是處在停機狀態的(stall)。爲了給大家一個直觀的印象,我們把CPU的一個時鐘週期看作一秒。那麼,從L1 cache讀取信息就好像是拿起桌上的一張草稿紙(3秒);從L2 cache讀取信息則是從身邊的書架上取出一本書(14秒);而從主存中讀取信息則相當於走到辦公樓下去買個零食(4分鐘)。

主存操作的準確延遲是不固定的,與具體的應用以及其他許多因素有關。比如,它依賴於列選通延遲(CAS)以及內存條的型號,它還依賴於CPU指令預取的成功率。指令預取可以根據當前執行的代碼來猜測主存中哪些部分即將被使用,從而提前將這些信息載入cache。

看看L1/L2 cache的性能,再對比主存,就會發現:配置更大的cache或者編寫能更好的利用cache的應用程序,會使系統的性能得到多麼顯著的提高。如果想進一步瞭解有關內存的諸多信息,讀者可以參閱Ulrich Drepper所寫的一篇經典文章《What Every Programmer Should Know About Memory》。

人們通常把CPU與內存之間的瓶頸叫做馮·諾依曼瓶頸(von Neumann bottleneck)。當今系統的前端總線帶寬約爲10GB/s,看起來很令人滿意。在這個速度下,你可以在1秒內從內存中讀取8GB的信息,或者10納秒內讀取100字節。遺憾的是,這個吞吐量只是理論最大值(圖中其他數據爲實際值),而且是根本不可能達到的,因爲主存控制電路會引入延遲。在做內存訪問時,會遇到很多零散的等待週期。比如電平協議要求,在選通一行、選通一列、取到可靠的數據之前,需要有一定的信號穩定時間。由於主存中使用電容來存儲信息,爲了防止因自然放電而導致的信息丟失,就需要週期性的刷新它所存儲的內容,這也帶來額外的等待時間。某些連續的內存訪問方式可能會比較高效,但仍然具有延時。而那些隨機的內存訪問則消耗更多時間。所以延遲是不可避免的。

圖中下方的南橋連接了很多其他總線(如:PCI-E, USB)和外圍設備:

wps_clip_image-10158

令人沮喪的是,南橋管理了一些反應相當遲鈍的設備,比如硬盤。就算是緩慢的系統主存,和硬盤相比也可謂速度如飛了。繼續拿辦公室做比喻,等待硬盤尋道的時間相當於離開辦公大樓並開始長達一年零三個月的環球旅行。這就解釋了爲何電腦的大部分工作都受制於磁盤I/O,以及爲何數據庫的性能在內存緩衝區被耗盡後會陡然下降。同時也解釋了爲何充足的RAM(用於緩衝)和高速的磁盤驅動器對系統的整體性能如此重要。

雖然磁盤的“連續”存取速度確實可以在實際使用中達到,但這並非故事的全部。真正令人頭疼的瓶頸在於尋道操作,也就是在磁盤表面移動讀寫磁頭到正確的磁道上,然後再等待磁盤旋轉到正確的位置上,以便讀取指定扇區內的信息。RPM(每分鐘繞轉次數)用來指示磁盤的旋轉速度:RPM越大,耽誤在尋道上的時間就越少,所以越高的RPM意味着越快的磁盤。這裏有一篇由兩個Stanford的研究生寫的很酷的文章,其中講述了尋道時間對系統性能的影響:《Anatomy of a Large-Scale Hypertextual Web Search Engine》

當磁盤驅動器讀取一個大的、連續存儲的文件時會達到更高的持續讀取速度,因爲省去了尋道的時間。文件系統的碎片整理器就是用來把文件信息重組在連續的數據塊中,通過儘可能減少尋道來提高數據吞吐量。然而,說到計算機實際使用時的感受,磁盤的連續存取速度就不那麼重要了,反而應該關注驅動器在單位時間內可以完成的尋道和隨機I/O操作的次數。對此,固態硬盤(SSD)可以成爲一個很棒的選擇。

硬盤的cache也有助於改進性能。雖然16MB的cache只能覆蓋整個磁盤容量的0.002%,可別看cache只有這麼一點大,其效果十分明顯。它可以把一組零散的寫入操作合成一個,也就是使磁盤能夠控制寫入操作的順序,從而減少尋道的次數。同樣的,爲了提高效率,一系列讀取操作也可以被重組,而且操作系統和驅動器固件(firmware)都會參與到這類優化中來。

最後,圖中還列出了網絡和其他總線的實際數據吞吐量。火線(fireware)僅供參考,Intel X48芯片組並不直接支持火線。我們可以把Internet看作是計算機之間的總線。去訪問那些速度很快的網站(比如google.com),延遲大約45毫秒,與硬盤驅動器帶來的延遲相當。事實上,儘管硬盤比內存慢了5個數量級,它的速度與Internet是在同一數量級上的。目前,一般家用網絡的帶寬還是要落後於硬盤連續讀取速度的,但“網絡就是計算機”這句話可謂名符其實。如果將來Internet比硬盤還快了,那會是個什麼景象呢?

我希望這些圖片能對您有所幫助。當這些數字一起呈現在我面前時,真的很迷人,也讓我看到了計算機技術發展到了哪一步。前文分開的兩個圖片只是爲了敘述方便,我把包含南北橋的整張圖片也貼出來,供您參考。

wps_clip_image-25942

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章