為什麼 CPU 訪問硬碟很慢?

2020-12-12 騰訊網

為什麼這麼設計(Why’s THE Design)是一系列關於計算機領域中程序設計決策的文章,我們在這個系列的每一篇文章中都會提出一個具體的問題並從不同的角度討論這種設計的優缺點、對具體實現造成的影響。如果你有想要了解的問題,可以在文章下面留言。

劇照 | 《少年派的奇幻漂流》

機械硬碟(Hard Disk Drive、HDD)和固態硬碟(Solid State Drive、SSD)是兩種最常見的硬碟,作為計算機的外部存儲,CPU 想要訪問它們存儲的數據需要很長時間,如下表所示,在 SSD 中隨機訪問 4KB 數據所需要的時間是訪問主存的 1,500 倍,機械磁碟的尋道時間是訪問主存的 100,000 倍:

表 1 - 2012 年延遲數字對比[^1]

雖然磁碟的尋道時間只需要 10ms,但是在 CPU 看來已經是非常長的時間了,當我們將上述的時間等比例放大後,就能直觀地感受到它們的性能差異。如果 CPU 訪問 L1 緩存需要 1 秒,那麼訪問主存需要 3 分鐘、從 SSD 中隨機讀取數據需要 3.4 天、磁碟尋道需要 2 個月,網絡傳輸可能需要 1 年多的時間。

在計算機體系結構中,硬碟屬於一種常見的輸入輸出設備,作業系統在啟動時不一定需要硬碟,它既可以通過硬碟啟動,也可以通過網絡設備或者外部設備啟動,所以硬碟不是計算機運行的必要條件。

von-neumann-architecture.svg

圖 1 - 輸入輸出設備

作為一種外部的輸入輸出設備,與 CPU 緩存和內存相比,硬碟極慢的讀取和寫入速度就顯得比較合理了,然而幾千倍甚至幾十萬倍的速度差異也確實讓人很難想像或者接受,在這篇文章中,我們會分析為什麼 CPU 訪問硬碟的速度非常慢:

CPU 訪問硬碟數據的過程比較複雜,它會先通過 I/O 操作將磁碟中的數據讀入內存,再訪問內存的數據;

機械硬碟在訪問磁碟中的數據依賴的是機械結構,需要移動磁碟中的機械臂;

I/O 操作

CPU 想要訪問磁碟中的數據一定要先通過 I/O 操作將磁碟中的數據讀入到內存中,再訪問存儲在內存中的數據。計算機中包含三種比較常見的 I/O 操作[^2] — 編程 I/O(Programmed I/O)、中斷驅動 I/O(Interrupt-driven I/O)和直接內存訪問(Direct Memory Access),我們接下來將依次介紹上述的這幾種操作[^3]:

io-operation

圖 2 - 常見 I/O 操作

執行 I/O 操作最簡單的形式就是使用編程 I/O,使用編程 I/O 時,CPU 會負責全部的工作,如果我們想要在屏幕上輸出 ,CPU 每次都會向 I/O 設備中寫入一個新字符,寫入後會輪詢設備的狀態等待它完成工作後寫入新的字符。這種方式雖然簡單,但是它會佔用全部的 CPU 資源,在某些複雜的系統中會造成計算資源的嚴重浪費。

中斷驅動 I/O是執行 I/O 操作的一種更高效方式,在編程 I/O 中,CPU 會主動獲取設備的狀態並等待設備閒置,但是如果使用了中斷驅動 I/O,設備會在閒置時主動發起中斷暫停當前進程並保存上下文,而作業系統會執行 I/O 設備的中斷處理程序:

如果當前不包含待列印的字符,停止中斷處理程序並恢復暫停的進程;

如果當前包含待列印的字符,將下一個字符拷貝到設備中並恢復暫停的進程;

使用中斷驅動 I/O 可以在設備繁忙時,讓 CPU 能夠處理其它任務,儘可能地提高 CPU 的利用率,不再浪費珍貴的計算資源。與編程 I/O 相比,中斷驅動 I/O 將一部分工作交給了 I/O 設備,所以能夠提高資源的利用率。

直接內存訪問會利用 DMA 控制器來執行 I/O 操作,中斷驅動 I/O 需要為每個字符觸發作業系統中斷,這會消耗一定的 CPU 時間。當我們使用 DMA 控制器時,CPU 會一次將緩衝區中的數據全部讀到 DMA 控制器中,DMA 控制器會負責將數據按字符寫入 I/O 設備:

dma-controller

圖 3 - DMA I/O

雖然 DMA 控制器可以解放 CPU 並減少中斷次數,但是它的執行速度與 CPU 相比卻很慢,如果 DMA 控制器不能快速驅動 I/O 設備,CPU 可能就會等待 DMA 控制器觸發中斷,在這種情況下,中斷驅動 I/O 或者編程 I/O 可以提供更快的訪問速度。

在默認情況下,我們都會使用 DMA 控制器來執行 I/O 任務,不過編程 I/O 和中斷驅動 I/O 也不是不能接受的選項。當 CPU 經常需要等待 DMA 控制器執行 I/O 任務時,使用中斷驅動 I/O 甚至輪詢的編程 I/O 都可以得到更高的吞吐量,然而無論使用哪種方式,I/O 都是程序中比較耗時的複雜操作。

機械硬碟

機械硬碟(Hard Disk Drive、HDD)是一種基於電子的、非易失的機械數據存儲設備,它使用磁性存儲器存儲並查找磁碟上的數據,在讀取和寫入數據的過程中,硬碟機械臂連接的磁頭會讀寫磁碟表面的位[^8]。

正是因為磁碟具有比較複雜的機械結構,所以磁碟的讀取和寫入都要花費很多時間,資料庫的讀寫性能也基本都依賴於磁碟的性能,如果我們在使用機械硬碟的資料庫中隨機查詢一條數據,這可能會觸發磁碟的隨機 I/O,然而將數據從磁碟讀取到內存中所需要的成本是非常大的,普通磁碟(非 SSD)加載數據需要經過隊列、尋道、旋轉以及傳輸的這些過程,大概要花費 10ms 左右的時間。

disk-random-io

圖 4 - 磁碟的隨機 I/O

我們在估算資料庫的查詢時可以使用 10ms 這個數量級對隨機 I/O 佔用的時間進行估算,這裡想要說的是隨機 I/O 對於資料庫的查詢性能影響會非常大,而順序讀取磁碟中的數據時速度可以達到 40MB/s,這兩者的性能差距有幾個數量級,因此我們也應該儘量減少隨機 I/O 的次數,這樣才能提高性能。

固態硬碟(Solid State Drive、SSD)是一種以快閃記憶體作為持久存儲器的電腦存儲設備[^9]。與機械硬碟不同,固態硬碟中不包含任何的機械結構,我們使用它讀取或者存儲數據時不會使用到任何的機械結構,因為一切過程都是由電路完成的,所以 SSD 的讀寫速度比 HDD 快很多。

hdd-ssd-price

圖 5 - HDD 和 SSD 的價格

機械硬碟和 SSD 從誕生後價格都在不斷降低,機械硬碟是今天數據中心使用的主要外部存儲,大多數通用的商用伺服器都會使用機械硬碟作為主要的外部存儲,但是因為 SSD 的讀寫速度是機械硬碟的幾十倍,所以越來越多的伺服器,尤其是資料庫都會使用 SSD 作為外部存儲。不過作為具有機械結構的外部存儲設備,它雖然結構非常成熟並且具有較大的容量,但是它在受到震動時很容易受到外界的幹擾。

總結

硬碟是計算機上的外部存儲設備,它可以持久存儲大量數據,然而 CPU 無法直接訪問硬碟中的數據,當計算機啟動時作業系統會將硬碟中的數據加載到內存中以便 CPU 訪問,但是如果 CPU 要訪問的數據不在內存中,那麼我們需要花費幾千倍甚至幾十萬倍的時間來讀取數據,這主要是由以下兩個原因造成的:

CPU 需要通過 I/O 操作訪問外部存儲中的數據,編程 I/O、中斷驅動 I/O 和 DMA 幾種方式都會帶來額外開銷並佔用較多的 CPU 時間;

機械硬碟會通過機械結構訪問其中存儲的數據,每一次硬碟的隨機 I/O 都需要執行隊列、尋道、旋轉和轉移數據幾個過程,大約需要消耗 10ms 的時間;

正如我們在文章中提到的,硬碟不是計算機運行的必要硬體設備,計算機可以從磁碟、光碟等任意外部存儲設備中將啟動所需要的數據加載到內存中並正常啟動,不過硬碟已經是今天最為常見的外部存儲設備了。到最後,我們還是來看一些比較開放的相關問題,有興趣的讀者可以仔細思考一下下面的問題:

寫入到硬碟上的數據一定會被持久存儲,不會丟失嗎?

內存中的數據為什麼在斷電重啟之後就會被清空?

相關焦點

  • 電腦硬體檢測圖文教程,CPU內存顯卡硬碟拷機跑分,圖吧工具箱
    我們看一下CPU工具,這裡有很多常見的軟體,也有一些不是常見的,我們簡單介紹一下CPUZ, 它能檢測cpu很多信息,比如型號,頻率等等,cpu相關的檢測跑分拷機我以前也發布過文章和視頻,其他的一些軟體,就不過多介紹了,有興趣的朋友也可以試一下。
  • 硬碟寫入速度慢的原因
    移動硬碟或U盤買回來以後,一般我們都會先測試他的讀寫速度,但往往就會發現與產品標註的讀寫速度相差甚遠,這可能是在沒有正確的方法下進行操作。一、檢查接口連接是否正確。移動硬碟或U盤多為USB接口,應該接在支持USB 3.0的接口(常見為藍色)上。如果接在只支持最高USB 2.0(常見為黑色或白色)的接口上,經過換算和半雙工模式,實際最高傳輸數據為30MB。二、檢查電腦系統是否安裝USB 3.0驅動程序。
  • 電腦運行速度慢?可能是你的機械硬碟入坑了——機械硬碟硬核科普
    現在固態硬碟降價,很多電腦上都配備了固態硬碟。雖然固態硬碟價格降下來了,但是對比動輒1T(1000GB)容量起步的機械硬碟來說價格還是偏貴。雖然說目前固態硬碟(SSD)取代機械硬碟(HDD)的聲音越來越多,但存儲容量以及價格上的客觀優勢,HDD 還是有的,並且它越來越偏向於被當做長期備份和存儲數據資料的數據倉庫來使用。
  • 老電腦該升級CPU、硬碟還是內存、顯卡?大白話告訴你該怎麼做
    (三)硬碟:存放文件的大「柜子」,所有數據都放在這裡面。△硬碟的常見形式,右邊的比左邊的好升級原則:固態硬碟是必需品,如果主板支持的話建議上M.2盤;注意事項:老的硬碟可以當倉庫盤使用,不用數據遷移;系統分區要足夠大,且一定要安裝在固態硬碟上;系統盤建議100G起步,要買大品牌
  • M.2和SATA傻傻分不清 固態硬碟應該怎麼選
    對於很多小夥伴來講,自己使用的筆記本幾年之後變慢,一大部分原因是因為我們的硬碟不給力,這時候很多人都會考慮給自己換一塊硬碟,但是往往在硬碟的選擇上摸不清頭腦,到底應該選擇SATA接口的固態硬碟還是應該選擇M.2接口的固態硬碟呢?都是固態硬碟,但是兩個硬碟的價格差距真的好大,在性能上來講兩個不同規格的產品又有什麼樣的區別呢?
  • 固態硬碟也會突然變慢?有SLC緩存就不會
    雖然固態硬碟就是高速度的代名詞,但是在讀寫大文件的時候,一些固態硬碟還是不可避免地出現速度暴跌的情況。作為一名玩家,誰也不希望自己的遊戲在複製安裝時要耗費大量的時間吧。這不,希捷酷玩510系列的動態模擬SLC緩存就是解決這個問題的一劑良方。
  • NAS硬碟不一樣?為什麼比普通硬碟貴幾百塊還是很多人買
    只要對硬碟稍作了解,大家會發現其實除了電腦主機用的普通硬碟外,還會有各種專門針對特定用途的硬碟,比如NAS硬碟、監控硬碟等。事實上,NAS硬碟在同樣的容量規格下,其價格會比普通的主機硬碟貴兩三百塊。但是對於NAS系統,大多數人還是會選擇NAS專用硬碟呢?
  • 硬碟就是一個旋轉餐桌
    我是一個硬碟,在我們這個大家族中,我屬於通過機械裝置定位並讀取數據的機械式硬碟,從速度上說,和我的兄弟SSD硬碟沒法比,但是我的容量更大,更便宜啊!來,爆個照:磁臂實物圖如果你還是不清楚我為什麼慢,那麼就想想吃飯的場景吧。
  • 用路由器上網慢怎麼辦
    Windows2000、XP、2003系統有時會自行關閉硬碟的DMA模式,自動改用PIO模式運行!這就造成在使用以上系統中硬碟性能突然下降,其中最明顯的現象有:系統起動速度明顯變慢,一般來說正常WindowsXP系統啟動時那個由左向右運動的滑條最多走2~4次系統就能啟動,但這一問題發生時可能會走5~8次或更多!
  • 教你如何自己更換筆記本固態硬碟和內存,升級電腦不求人
    今天老闆拿來七臺筆記本電腦,客戶要求換m.2固態硬碟和加內存,原機硬碟已經被拆掉,只有一根ddr4 2666 4g內存,需要改配置。幹活的時候抽空拍了幾張照片作為教程,希望不會自己更換配置的小夥伴們用得上。
  • CPU使用率飆升至100%?按這3步走,找出罪該禍首!
    小夥伴們,如果你們在使用電腦的時候,電腦突然變得異常卡頓、死機、加載很慢,那趕緊去看看電腦的cpu使用率!談到cpu,我們都知道它是電腦的運算核心,也是電腦的控制核心,是每臺電腦中的最重要的一個硬體。CPU使用率的真正含義那麼cpu使用率的真正含義是什麼呢?
  • 硬碟技術的倒退?一文看懂疊瓦式硬碟和垂直式硬碟的愛恨情仇
    近日,威騰電子推出了旗下新款企業級硬碟,Ultrastar DC HC550,單碟2TB,非疊瓦式(SMR)技術,使用的是EAMR技術,關於威騰電子最新的EAMR技術的具體原理尚不得知,威騰電子也只透露其為MAMR(微波輔助磁記錄)技術的一個分支,雖然沒有採用垂直式(PMR)技術,但是拋棄了疊瓦式(SMR)技術就已經讓很多機友開心了,但是為什麼疊瓦式(SMR)技術這麼招人痛恨呢
  • 為什麼英雄聯盟加載很慢,但進去後就不卡了?花一百塊完美解決
    但小編要問大家一個問題,在玩這款遊戲的時候,有沒有遇到過加載過程非常慢,但是進入遊戲之後就一點也不卡的情況?大家的回答都是肯定的,那這到底是什麼原因呢?下面就和小編一起來了解一下吧。有很多人都說自己的電腦不行了,其實不然,英雄聯盟這款遊戲對電腦的配置要求非常低,可以說當下只要是一臺電腦基本上都能玩英雄聯盟,我說的是基本上,有的人花幾千塊買了一臺電腦,但還是很慢。
  • HyperX FURY雷電固態硬碟與刀鋒移動硬碟評測
    然而往往電腦、筆記本存儲的設備所採用的都是「硬碟」。而在硬碟部分又分為「固態硬碟」、「機械硬碟」,它們各自的讀寫速度都不同,想要為自己的電腦、行動裝置提升速度,如何選擇它們才是關鍵。顆粒決定硬碟壽命?之前筆者介紹其他硬碟測試時,也有提到這個問題,今天我們再來說說「快閃記憶體顆粒對硬碟的影響」。
  • 怎麼知道是液態硬碟
    ,它的速度較慢,可以選用價格較低的機械硬碟也就是液態硬碟固態硬碟的工作溫度範圍比較寬 液態硬碟與機械硬碟的區分 液態硬碟實際上是屬於機械硬碟,它的速度較慢,但容量很大,價格上也比較便宜,適用於倉儲,安裝程序。
  • 為什麼HDFS文件塊(block)大小設定為128M解析
    三、為什麼HDFS中塊(block)不能設置太大,也不能設置太小? 四、 HDFS中塊(block)的大小為什麼設置為128M? 減少硬碟尋道時間(disk seek time):HDFS的設計是為了支持大數據操作,合適的block大小有助於減少硬碟尋道時間(平衡了硬碟尋道時間、IO時間),提高系統吞吐量。
  • 電腦硬碟壞了,會出現以下3種情況,看完後你就了解啦
    本期文章就以「電腦硬碟損壞」為例,來說說硬碟壞了之後,電腦會出現哪些狀況。電腦硬碟的概述電腦硬碟有很多種,除卻品牌的劃分之外,主要分為兩種,第一種是機械硬碟,老式硬碟多為機械硬碟(HDD),主要由磁碟碟片、磁頭、主軸與傳動軸等組成,。
  • 一顆沙子的逆襲,cpu的修仙之路
    cpu我們聽到的很多,不管是手機、電腦還是伺服器,都離不開這個小玩意兒。這個小玩意兒,他的製造過程代表了當今世界科技發展的最高水平,所以這東西,放心的買,不會有山寨,因為有那個心也沒那個技術啊!接下來帶大家了解一下一粒小小的沙子是如何一步一步的逆襲成為王者,點石成金的。
  • cpu風扇轉速多少正常_cpu風扇轉速如何調節
    打開APP cpu風扇轉速多少正常_cpu風扇轉速如何調節 華強電子網 發表於 2020-12-17 17:37:50   電腦是我們現在生活中經常會用到的,而CPU則是電腦的大腦,承擔著電腦的運轉工作,另外在組裝電腦過程中,CPU散熱器的安裝也是非常重要的,大家對於cpu風扇的轉速也並不是很清楚,那麼cpu風扇轉速多少正常呢?
  • 「攢機向」電腦的「倉庫」硬碟怎麼選之機械硬碟
    硬碟是電腦存儲數據的地方,重要性可想而知。現在裝機基本上是固態用來裝系統和常用軟體,而機械盤則用來作為存儲數據盤。怎麼挑機械硬碟就是今天要說的。先說下機械硬碟怎麼工作的。為啥說它,因為它和機械硬碟的工作方式很像。他們都有一個碟片用來記錄信息,用一個機械臂讀取信息,只是原理有些不一樣。留聲機從外圍一直向裡直到讀完整張碟片,機械硬碟可以定位讀寫,工作時機械臂抬起,找到信息讀寫之後再回來,不斷重複這個動作。先說這個的原因是為了下面講的機械硬碟參數更好理解。