與磁盤相比,SSD具備很高的IO性能,可是和磁盤相比,SSD的性能穩定性不如磁盤好。在使用過程當中,SSD的性能會發生變化,而不能保持很強的一致性。這是SSD的一個特性,性能會隨着時間、使用壽命發生變化。對於存儲系統設計而言,這種不肯定的性能變化以及抖動都會對系統總體性能形成影響。所以,對於閃存存儲系統設計者而言,須要瞭解SSD內部的工做機制以及熟悉致使IO抖動的因素。ide
可能你們會說,SSD性能發生變化的一個重要因素是內部GC(垃圾回收)機制的影響。其實不全是,GC會致使SSD性能發生變化,NAND Flash上的數據佈局方式會對GC性能形成影響,其本質問題是數據遷移與用戶IO之間的資源競爭。另外,企業級SSD標稱的性能每每都是在GC全速運行狀況下的穩態性能,而不是出廠時的空盤性能。因此,在通常狀況下,應用測試的IO穩定性都仍是能夠的。存儲系統在使用SSD時,也都會只考慮穩態性能,而不是空盤性能。問題是在穩態性能狀況下,在不一樣的IO Pattern狀況下,不一樣的使用壽命狀況下,其性能穩定性、IO抖動性還會發生變化。而這種性能變化偏偏是存儲系統設計者須要考慮和解決的重要問題。對於存儲系統設計者來講,不能將SSD當成一個黑盒進行使用,這是與磁盤存儲系統設計來講是一個重大差異。佈局
縱觀SSD的設計,咱們能夠發現影響SSD性能不穩定的因素有不少,其中主要因素有NAND介質自己的比特錯誤;讀與寫、擦除的衝突;Read Disturb、GC等問題致使性能變差。從外在表現來看,Bit Error的增多會致使SSD在使用過程當中出現性能抖動問題,尤爲是隨着使用壽命的耗盡,SSD性能會發生明顯的變化。另外在不一樣的IO Pattern下,性能也不盡相同,有些SSD甚至會存在寫後讀的問題,緊隨着寫以後的讀延遲會變得很大,達到毫秒級,這是因爲內部IO衝突致使的。此外,在同一區域大量讀以後,也可能發現性能會出現抖動,這也是因爲內部的Read Disturb機制開始工做了,會與用戶IO發生競爭,從而致使性能抖動,甚至降低。性能
NAND Flash做爲半導體存儲介質,其存在嚴重的比特錯誤(BitError)。不一樣製造工藝會致使NAND具備不一樣的比特出錯率;不一樣的NAND類型,MLC、TLC以及將來的QLC都會具備不一樣的比特出錯率;3D TLC在使用不當的狀況下,其出錯機率會發生變化;不一樣的使用壽命狀態,NAND存放時間,其比特出錯機率也會發生變化。因此,對於NAND介質來講,多種因素會致使出錯機率發生變化。對於SSD而言,這種Error Bit會致使IO的性能發生不肯定的抖動。例如對於讀操做,若是Bit Error控制在必定範圍以內,BCH或者LDPC×××能夠快速解碼,那麼一個正常的讀請求能夠控制在100us左右。若是Bit Error超出了快速解碼的範圍,那麼×××將會花費大量的時間進行解碼,引入延遲;若是Bit Error過多,×××沒法進行正確解碼,那麼在SSD內部會經過Read Retry機制嘗試經過調整NAND的參考電壓來從新讀取數據,這必然會致使更大的延遲;若是read retry也搞不定,那麼須要依賴企業級SSD內部的NAND級別RAID來進行數據恢復,一樣須要引入很大的延遲。當一個盤的使用壽命在不斷耗盡的過程當中,NAND Flash的Bit Error錯誤將會呈上升趨勢,而不少譯碼器的解碼能力不會呈現線性變化趨勢,而更多的會呈現突變,相似於e指數變化趨勢。也就是說當Bit Error的數量達到必定程度以後,譯碼時間將會急劇增長,從而致使IO延遲急劇增長,外在表現爲IO性能的急劇抖動。測試
讀寫衝突、讀寫與擦除之間的衝突也是致使IO抖動的重要因素。當一個讀請求和擦除請求落在了同一個通道的相同Die上,那麼讀請求將會因爲擦除操做而被迫等待。NAND Flash的擦除操做基本上在2ms以上,若是發生這種衝突,那麼IO的延遲將會從100us提高到2ms以上,從而發生嚴重的延遲。爲了解決這個問題,如今有些NAND也會提供Erase Suspend的功能,經過該命令讓擦除操做暫停,讓讀操做先進行,從而下降讀延遲。在SSD內部的讀寫衝突也會引入延遲,當讀寫操做發生在同一個Block時,會致使讀延遲增長。針對這個問題,在存儲系統設計過程當中,須要將讀寫請求在空間上進行分離,從而避免讀寫請求在同一個Block上衝突。spa
NAND Flash存在Read Disturb的問題,當NANDFlash一個區域被重複讀以後,其Bit Error將會上升。爲了解決該問題,SSD內部的Firmware會進行Read Disturb的處理。一個區域被重複讀取以後,會進行數據搬移操做,該操做過程相似於Garbage Collection過程。一旦該過程被觸發以後,SSD內部的IO請求數量將會上升,從而對讀請求形成必定的影響,致使性能下降及抖動。設計
SSD做爲一種半導體存儲介質,其性能一般會高於磁盤,可是在極端狀況下,因爲IO Pattern致使的讀寫衝突,Bit error的增長都會致使SSD性能的變化,而且出現性能抖動的問題。此外,SSD對於順序寫、隨機寫、順序讀、隨機讀以及混合讀寫狀況下的性能都會有所變化,而且不一樣的IO Pattern會致使數據在NAND上的佈局發生變化,從而會致使各類讀寫狀況下的性能都有所變化。例如,全盤順序寫以後的順序寫性能會比較高,可是在全盤隨機寫以後的順序寫性能會略差。其中的核心緣由在於NAND上的數據佈局初始條件的不一樣,GC行爲會發生差別,從而致使後面的業務IO性能發生變化。在磁盤存儲中不存在這些因素,可是在SSD存儲中,必定須要考慮SSD固件的行爲。一個比較好的設計是讓SSD內部的FTL工做在最佳狀態下,從系統軟件層面總體控制存儲IO的行爲,從而保證IO的性能一致性,防止IO出現不肯定的抖動。blog