深刻淺出計算機組成原理學習筆記:第四十六講

1、引子

隨着3D垂直封裝技術和QLC技術的出現,今年的「618」,SSD硬盤的價格進一步大跳水,趁着這個機會,我把本身電腦上的倉庫盤,從HDD換成了SSD硬盤。個人我的電腦完全擺脫了機械硬盤。算法

隨着智能手機的出現,互聯網用戶在2008年以後開始爆發性增⻓,你們在網上花的時間也愈來愈多。這也就意味着,隱藏在精美App和網頁以後的服務端數據請求量,呈數量級的上升。

不管是用10000轉的企業級機械硬盤,仍是用Short Stroking這樣的方式進一步提高IOPS,HDD硬盤已經知足不了咱們的需求了。上面這些優化措施,數據庫

無非就是,把IOPS從100提高到300、500也就到頭了。性能優化

因而,SSD硬盤在2010年先後,進入了主流的商業應用。咱們在第44講看過,一塊普通的SSD硬盤,能夠輕鬆支撐10000乃⾄20000的IOPS。那個時候,很多互聯網公司想要完成性能優化的KPI,
最後的解決放案都變成了換SSD的硬盤。若是這還不夠,那就換上使用PCI Express接口的SSD。oop

不過,只是簡單地換⼀下SSD硬盤,真的最⼤限度地⽤好了SSD硬盤嗎?另外,即使如今SSD硬盤很便宜了,一部分公司的批量數據處理系統,仍然在⽤傳統的機械硬盤,這又是爲何呢性能

那麼接下來這兩講,就請你和我一塊兒來看一看,SSD硬盤的工做原理,以及怎麼最大化利用SSD的工做原理,使得訪問的速度最快,硬盤的使⽤壽命最長。優化

2、SSD的讀寫原理

一、SSD和機械硬盤的優缺點

SSD沒有像機械硬盤那樣的尋道過程,因此它的隨機讀寫都更快。我在下面列了一個表格,對比了一下SSD和機械硬盤的優缺點。
網站

你會發現,無論是機械硬盤不擅⻓的隨機讀寫,仍是它自己已經表現不錯的順序寫入,SSD在這些方面都要比HDD強。不過,有一點,機械硬盤要遠強於SSD,那就是耐用性。
若是咱們須要頻繁地重複寫入刪除數據,那麼機械硬盤要比SSD性價比高不少。

要想知道爲何SSD的耐⽤性不太好,咱們先要理解SSD硬盤的存儲和讀寫原理。咱們以前說過,CPUCache用的SRAM是用一個電容來存放一個比特的數據。
對於SSD硬盤,咱們也能夠先簡單地認爲,它是由一個電容加上一個電壓計組合在一塊兒,記錄了一個或者多個比特。

spa

二、SLC、MLC、TLC和QLC

一、什麼是SLC操作系統

 

可以記錄一個比特很容易理解。給電容裏面充上電有電壓的時候就是1,給電容放電裏面沒有電就是0。採用這樣方式存儲數據的SSD硬盤,咱們通常稱之爲 使用了SLC的顆粒,
全稱是Single-Level Cell,也就是一個存儲單元中只有一位數據。3d

二、SLC存在什麼問題?

可是,這樣的方式會遇到和CPU Cache相似的問題,那就是,一樣的⾯積下,可以存放下的元器件是有限的。若是隻用SLC,咱們就會遇到,

存儲容量上不去,而且價格下不來的問題。

因而呢,硬件工程師們就陸續發明了 MLC(Multi-Level Cell)、 TLC(Triple-Level Cell)以及 QLC(Quad-Level Cell),也就是能在續發明了 MLC(Multi-Level Cell)、 TLC(Triple-Level Cell)以及 QLC(Quad-Level Cell),也就是能在一個電容裏面存下2個、3個乃至4個比特。

只有一個電容,咱們怎麼可以表示更多的比特呢?別忘了,這裏咱們還有一個電壓計。4個比特一共能夠從0000-1111表⽰16個不一樣的數。那麼,若是咱們能往電容⾥⾯充電的時候,
充上15個不一樣的電壓,而且咱們電壓計可以區分出這15個不一樣的電壓。加上電容被放空表明的0,就可以表明從0000-1111這樣4個比特了。

不過,要想表示15個不一樣的電壓,充電和讀取的時候,對於精度的要求就會更高。這會致使充電和讀取的時候都更慢,因此QLC的SSD的讀寫速度,要⽐SLC的慢上好幾倍。
若是你想要知道是什麼樣的物理原理致使這個QLC更慢,能夠去讀一讀這篇文章。

3、P/E擦寫問題

若是咱們去看一看SSD硬盤的硬件構造,能夠看到,它大概是自頂向下是這麼構成的。

一、閃存轉換層

首先,雖然和其餘的I/O設備同樣,它有對應的 接⼝和控制電路。如今的SSD硬盤⽤的是SATA或者PCIExpress接⼝。在控制電路,有一個很重要的模塊,叫做 FTL(Flash-Translation?Layer),
也就是 閃存轉換層。這個能夠說是SSD硬盤的一個核新模塊,SSD硬盤性能的好壞,很大程度上也取決於FTL的算法好很差。如今容我賣個關子,咱們晚一下子仔細講FTL的功能。

二、實際I/O設備

接下來是 實際I/O設備,它其實和機械硬盤很像。如今新的大容量SSD硬盤都是3D封裝的了,也就是說,是由不少個裸片(Die)疊在一塊兒的,
就好像咱們的機械硬盤把不少個盤面(Platter)疊放在一塊兒同樣,這樣能夠在一樣的空間下放下更多的容量。

接下來,一張裸片上能夠放多個 平面(Plane),通常一個平面上的存儲容量大概在GB級別。一個平面上面,會劃分紅不少個塊(Block),通常一個塊(Block)的存儲大小,
一般幾百KB到幾MB大小。一個塊裏面,還會區分不少個頁(Page),就和咱們內存裏面的頁同樣,一個頁的小小一般是4KB。

三、SSD硬盤是如何寫入的

對於SSD硬盤來講,數據的 寫入叫做Program。寫入不能像機械硬盤同樣,經過 覆寫(Overwrite)來進行的,而是要先去 擦除(Erase),而後再寫入。SSD的讀取和寫入的基本單位,不是一個比特(bit)或者一個字節(byte),而是一個 頁(Page)。SSD的擦除單位就更誇張了,咱們不只不能按照照特或者字節來擦除,連按照 頁來擦除都不行,咱們必須按照 塊來擦除。

四、SSD硬盤數據寫入形象比喻

並且,你必須記住的一點是,SSD的使用壽命,實際上是每個塊(Block)的擦除的次數。你能夠把SSD硬盤的一個平面當作是一張白紙。咱們在上面寫入數據,
就好像用鉛筆在白紙上寫字。若是想要把已經寫過字的地方寫入新的數據,咱們先要用橡皮把已經寫好的字擦掉。可是,若是頻繁擦同一個地方,那這個地方就
會破掉,以後就沒有辦法再寫字了。

五、SLC、MLC、TLC和QLC使用壽命對比

咱們上⾯說的SLC的芯⽚,能夠擦除的次數⼤概在10萬次,MLC就在1萬次左右,而TLC和QLC就只在幾千次了。這也是爲何,你去購買SSD硬盤,
會看到一樣的容量的價格差異很大,由於它們的芯片顆粒和壽命徹底不⼀樣。

4、SSD讀寫的生命週期

一、一塊SSD硬盤在平常是怎麼被用起來的

下面咱們來實際看⼀看,一塊SSD硬盤在平常是怎麼被用起來的。
我用三種顏色分別來表示SSD硬盤裏面的頁的不一樣狀態,白色表明這個頁歷來沒有寫入過數據,綠色表明裏面寫入的是有效的數據,紅色表明裏面的數據,在咱們的操做系統看來已是刪除的了。

 

一、初始狀態

二、數據寫入

 一開始,全部塊的每個頁都是白色的。隨着咱們開始往裏面寫數據,裏面的有些頁就變成了綠色。

三、數據刪除

而後,由於咱們刪除了硬盤上的一些文件,因此有些頁變成了紅色。可是這些紅色的頁,並不能再次寫入數據。由於SSD硬盤不能單獨擦除一個頁,必須一次性擦除整個塊,
因此新的數據,咱們只能日後面的白色的頁裏面寫。這些散落在各個綠色空間裏面的紅色空洞,就好像硬盤碎片。

四、把整個Block擦除

若是有哪個塊的數據一次性所有被標紅了,那咱們就能夠把整個塊進行擦除。它就又會變成白色,能夠從新一頁一頁往裏面寫數據。這種狀況其實也會常常發生。畢竟一個塊不大,
也就在幾百KB到幾MB。你刪除一個幾MB的文件,數據又是連續存儲的,天然會致使整個塊能夠被擦除。

五、想要寫入兩個Block大小的新數據

隨着硬盤片面裏面的數據愈來愈多,紅色空洞佔的地方也會愈來愈多。因而,你會發現,咱們就要沒有白色的空頁去寫入數據了。這個時候,

咱們要作一次相似於Windows系統「磁盤碎片整理」或者Java裏面的「內存垃圾回收」工做做。找一個紅色空洞最多的塊,把裏面的綠色數據,挪到另外一個塊裏面去,

而後把整個塊擦除,變成白色,能夠從新寫入數據。

不過,這個「磁盤碎⽚整理」或者「內存垃圾回收」的⼯做,咱們不能太主動、太頻繁地去作。由於SSD的擦除次數是有限的。若是動不動就搞個磁盤碎⽚整理,那麼咱們的SSD硬盤很快就會報廢了。

二、SSD硬盤的容量是用不滿的?

說到這裏,你可能要問了,這是否是說,咱們的SSD硬盤的容量是⽤不滿的?由於咱們總會遇到一些紅色空洞?

 

 

 

 

沒錯,一塊SSD的硬盤容量,是沒辦法徹底用滿的。不過,爲了避免得罪消費者,生產SSD硬盤的廠商,實際上是預留了一部分空間,專們用來作這個「磁盤碎片整理」工做的。
一塊標成256G的SSD硬盤,每每實際有240G的硬盤空間。SSD硬盤經過咱們的控制芯片電路,把多出來的硬盤空間,用來進行各類數據的閃轉騰挪,
讓你可以寫滿那240G的空間。這個多出來的16G空間,叫做 預留空間(Over Provisioning),通常SSD的硬盤的預留空間都在7%-15%左右。

5、總結延伸

到這裏,相信你對SSD硬盤的寫入和擦除的原理已經清楚了,也明白了SSD硬盤的使用壽命受限於能夠擦除的次數。

仔細想想,你會發現SSD硬盤,特別適合讀多寫少的應用。在平常應用裏面,咱們的系統盤適合用SSD。可是,若是咱們用SSD作專門的下載盤,一直下載各類影音數據,而後刻盤備份就不太好了,特別是如今QLC顆粒的SSD,它只有幾千次可擦寫的壽命啊。

在數據中內心面,SSD的應用場景也是適合讀多寫少的場景。咱們拿SSD硬盤用來作數據庫,存放電商網站的商品信息很合適。可是,用來做爲Hadoop這樣的Map-Reduce應用的數據盤就不行了。由於Map-Reduce任務會大量在任務中間向硬盤寫入中間數據再刪除掉,這樣用不了多久,SSD硬盤的壽命就會到了。

好了,最後讓咱們總結一下。

這一講,咱們從SSD的物理原理,也就是「電容+電壓計」的組合,向你介紹了SSD硬盤存儲數據的原理,以及從SLC、MLC、TLC,直到今天的QLC顆粒是怎麼回事兒。

而後,咱們一塊兒看了SSD硬盤的物理構造,也就是裸片、平面、塊、頁的層次結構。咱們對於數據的寫入,只能是一頁一頁的,不能對頁進行覆寫。對於數據的擦除,
只能整塊進行。因此,咱們須要用一個,相似「磁盤碎片整理」或者「內存垃圾回收」這樣的機制,來清理塊當中的數據空洞。而SSD硬盤也會保留必定的預留空間,避免出現硬盤沒法寫滿的狀況。

到了這裏,咱們SSD硬盤在硬件層面的寫入機制就介紹完了。不過,更有挑戰的一個問題是,在這樣的機制下,咱們怎麼儘量延長SSD的使用壽命呢?若是要開發一個跑在SSD硬盤上的數據庫,咱們能夠利用SSD的哪些特性呢?想要知道這些,請你必定要記得回來聽下⼀講。

相關文章
相關標籤/搜索