FLASH快閃記憶體

內存器件之一

FLASH快閃記憶體是屬於內存器件的一種,"Flash"。

各類 DDRSDRAM 或者 RDRAM 都屬於揮發性內存,只要停止電流供應內存中的數據便無法保持,因此每次電腦開機都需要把數據重新載入內存。

概述


快閃記憶體的物理特性與常見的內存有根本性的差異:
快閃記憶體則是一種非易失性( Non-Volatile )內存,在沒有電流供應的條件下也能夠長久地保持數據,其存儲特性相當於硬碟,這項特性正是快閃記憶體得以成為各類便攜型數字設備的存儲介質的基礎。

分類


NOR和NAND是市場上兩種主要的非易失快閃記憶體技術。
在1984年,東芝公司的發明人舛岡富士雄首先提出了快速快閃記憶體存儲器(此處簡稱快閃記憶體)的概念。與傳統電腦內存不同,快閃記憶體的特點是NVM,其記錄速度也非常快。
Intel是世界上第一個生產快閃記憶體並將其投放市場的公司。1988年,公司推出了一款256K bit快閃記憶體晶元。它如同鞋盒一樣大小,並被內嵌於一個錄音機里。後來,Intel發明的這類快閃記憶體被統稱為NOR快閃記憶體。它結合EPROM和EEPROM兩項技術,並擁有一個SRAM介面。
第二種快閃記憶體稱為NAND快閃記憶體。它由日立公司於1989年研製,並被認為是NOR快閃記憶體的理想替代者。NAND快閃記憶體的寫周期比NOR快閃記憶體短90%,它的保存與刪除處理的速度也相對較快。NAND的存儲單元只有NOR的一半,在更小的存儲空間中NAND獲得了更好的性能。鑒於NAND出色的表現,它常常被應用於諸如CompactFlash、SmartMedia、 SD、 MMC、 xD、 and PC cards、USB sticks等存儲卡上。
NAND 快閃記憶體的存儲單元採用串列結構,存儲單元的讀寫是以頁和塊為單位來進行(一頁包含若干位元組,若干頁則組成儲存塊, NAND 的存儲塊大小為 8 到 32KB ),這種結構最大的優點在於容量可以做得很大,超過 512MB 容量的 NAND 產品相當普遍, NAND 快閃記憶體的成本較低,有利於大規模普及。
NAND 快閃記憶體的缺點在於讀速度較慢,它的I/O 埠只有 8 個,比 NOR 要少多了。這區區 8 個 I/O 埠只能以信號輪流傳送的方式完成數據的傳送,速度要比 NOR 快閃記憶體的并行傳輸模式慢得多。再加上 NAND 快閃記憶體的邏輯為電子盤模塊結構,內部不存在專門的存儲控制器,一旦出現數據壞塊將無法修,可靠性較 NOR 快閃記憶體要差。

應用


NAND 快閃記憶體被廣泛用於移動存儲、MP3 播放器、數碼相機、掌上電腦等新興數字設備中。由於受到數碼設備強勁發展的帶動, NAND 快閃記憶體一直呈現指數級的超高速增長。
“flash存儲器”經常可以與“NOR存儲器”互換使用。許多業內人士也搞不清楚NAND快閃記憶體技術相對於NOR技術的優越之處,因為大多數情況下快閃記憶體只是用來存儲少量的代碼,這時NOR快閃記憶體更適合一些。而NAND則是高數據存儲密度的理想解決方案。
NOR的特點是晶元內執行(XIP, eXecute In Place),這樣應用程序可以直接在flash快閃記憶體內運行,不必再把代碼讀到系統RAM中。NOR的傳輸效率很高,在1~4MB的小容量時具有很高的成本效益,但是很低的寫入和擦除速度大大影響了它的性能。
NAND結構能提供極高的單元密度,可以達到高存儲密度,並且寫入和擦除的速度也很快。應用NAND的困難在於flash的管理和需要特殊的系統介面。

特點


性能

flash快閃記憶體是非易失存儲器,可以對稱為塊的存儲器單元塊進行擦寫和再編程。任何flash器件的寫入操作只能在空或已擦除的單元內進行,所以大多數情況下,在進行寫入操作之前必須先執行擦除。NAND器件執行擦除操作是十分簡單的,而NOR則要求在進行擦除前先要將目標塊內所有的位都寫為0。
由於擦除NOR器件時是以64~128KB的塊進行的,執行一個寫入/擦除操作的時間為5s,與此相反,擦除NAND器件是以8~32KB的塊進行的,執行相同的操作最多只需要4ms。
執行擦除時塊尺寸的不同進一步拉大了NOR和NADN之間的性能差距,統計表明,對於給定的一套寫入操作(尤其是更新小文件時),更多的擦除操作必須在基於NOR的單元中進行。這樣,當選擇存儲解決方案時,設計師必須權衡以下的各項因素。
● NOR的讀速度比NAND稍快一些。
● NAND的寫入速度比NOR快很多。
● NAND的4ms擦除速度遠比NOR的5s快。
● 大多數寫入操作需要先進行擦除操作。
● NAND的擦除單元更小,相應的擦除電路更少。

可靠性

採用flash介質時一個需要重點考慮的問題是可靠性。對於需要擴展MTBF的系統來說,Flash是非常合適的存儲方案。可以從壽命(耐用性)、位交換和壞塊處理三個方面來比較NOR和NAND的可靠性。

耐用性

在NAND快閃記憶體中每個塊的最大擦寫次數是一百萬次,而NOR的擦寫次數是十萬次。NAND存儲器除了具有10比1的塊擦除周期優勢,典型的NAND塊尺寸要比NOR器件小8倍,每個NAND存儲器塊在給定的時間內的刪除次數要少一些。

易於使用

可以非常直接地使用基於NOR的快閃記憶體,可以像其他存儲器那樣連接,並可以在上面直接運行代碼。
由於需要I/O介面,NAND要複雜得多。各種NAND器件的存取方法因廠家而異。
在使用NAND器件時,必須先寫入驅動程序,才能繼續執行其他操作。向NAND器件寫入信息需要相當的技巧,因為設計師絕不能向壞塊寫入,這就意味著在NAND器件上自始至終都必須進行虛擬映射。

其他作用

驅動還用於對DiskOnChip產品進行模擬和NAND快閃記憶體的管理,包括糾錯、壞塊處理和損耗平衡。

亮點


Flash是非揮發性隨機存取存儲器NVRAM),它可以作為緩存或作為直接存儲的底層設備。雖然比動態隨機存儲器(DRAM)慢10倍,但儘管這樣,它還比硬碟快得多。它的速度和耐用性,讓寫操作變得比直接寫硬碟快很多。將FLASH作為一個持續的高速緩存,再讓它慢慢的寫回磁碟作永久數據保存。
高速緩存可以分佈在整個集群,從而對多種類型的操作系統提供快可靠的高速緩存副本。這種高速緩存副本由由Flash快閃記憶體或者內存組成,將共享整個群集的緩存。

特性比較


介面差別

NOR flash帶有SRAM介面,有足夠的地址引腳來定址,可以很容易地存取其內部的每一個位元組。
NAND器件使用複雜的I/O口來串列地存取數據,各個產品或廠商的方法可能各不相同。8個引腳用來傳送控制、地址和數據信息。
NAND讀和寫操作採用512位元組的塊,這一點有點像硬碟管理此類操作,很自然地,基於NAND的存儲器就可以取代硬碟或其他塊設備。

容量成本

NAND flash的單元尺寸幾乎是NOR器件的一半,由於生產過程更為簡單,NAND結構可以在給定的模具尺寸內提供更高的容量,也就相應地降低了價格。
NOR flash佔據了容量為1~16MB快閃記憶體市場的大部分,而NAND flash只是用在8~128MB的產品當中,這也說明NOR主要應用在代碼存儲介質中,NAND適合於數據存儲,NAND在CompactFlash、Secure Digital、PC Cards和MMC存儲卡市場上所佔份額最大。

位交換

比特反轉測試圖片
比特反轉測試圖片
所有flash器件都受位交換現象的困擾。在某些情況下(很少見,NAND發生的次數要比NOR多),一個比特位會發生反轉或被報告反轉了。
一位的變化可能不很明顯,但是如果發生在一個關鍵文件上,這個小小的故障可能導致系統停機。如果只是報告有問題,多讀幾次就可能解決了。
當然,如果這個位真的改變了,就必須採用錯誤探測/錯誤更正(EDC/ECC)演演算法。位反轉的問題更多見於NAND快閃記憶體,NAND的供應商建議使用NAND快閃記憶體的時候,同時使用EDC/ECC演演算法。
這個問題對於用NAND存儲多媒體信息時倒不是致命的。當然,如果用本地存儲設備來存儲操作系統、配置文件或其他敏感信息時,必須使用EDC/ECC系統以確保可靠性。

壞塊處理

NAND器件中的壞塊是隨機分佈的。以前也曾有過消除壞塊的努力,但發現成品率太低,代價太高,根本不划算。
NAND器件需要對介質進行初始化掃描以發現壞塊,並將壞塊標記為不可用。在已製成的器件中,如果通過可靠的方法不能進行這項處理,將導致高故障率。

軟體支持

當討論軟體支持的時候,應該區別基本的讀/寫/擦操作和高一級的用於磁碟模擬和快閃記憶體管理演演算法的軟體,包括性能優化。
在NOR器件上運行代碼不需要任何的軟體支持,在NAND器件上進行同樣操作時,通常需要驅動程序,也就是內存技術驅動程序(MTD),NAND和NOR器件在進行寫入和擦除操作時都需要MTD。
使用NOR器件時所需要的MTD要相對少一些,許多廠商都提供用於NOR器件的更高級軟體,這其中包括M-System的TrueFFS驅動,該驅動被Wind River System、Microsoft、QNX Software System、Symbian和Intel等廠商所採用。

虛擬化


基於FLASH快閃記憶體的存儲能夠解決很多性能問題,尤其是由虛擬伺服器環境所導致的問題。但FLASH快閃記憶體仍有很多神秘之處:它們可信嗎?哪種類型的FLASH快閃記憶體最適合虛擬環境?
FLASH快閃記憶體是一種內存技術,與RAM不同,在斷電時它仍舊可以保留所存儲的信息。儘管FLASH快閃記憶體在執行讀寫操作時並不像RAM那樣快,但性能遠遠高於典型的硬碟。更為重要的是,FLASH快閃記憶體訪問數據時幾乎不存在任何時間延遲。FLASH快閃記憶體技術非常適合隨機I/O,而虛擬伺服器環境中恰恰存在大量的隨機I/O。
對FLASH快閃記憶體主要的關注點之一是其執行寫操作的方式。FLASH快閃記憶體可以執行的寫操作次數有限,這意味著FLASH快閃記憶體廠商需要開發複雜的控制器技術,對寫入FLASH快閃記憶體模塊的方式進行管理,確保每個FLASH快閃記憶體單元接收相同的寫請求。
目前有三種類型的FLASH快閃記憶體,耐久性各不相同。單階存儲單元(SLC)FLASH快閃記憶體在每個單元寫一位數據,耐久性最好。多階存儲單元(MLC)FLASH快閃記憶體在每個單元寫多位數據,耐久性排名第二。三階存儲單元(TLC)在每個單元寫三位數據,耐久性最差。每個單元寫入的數據位越多意味著每個單元的容量越高,每GB的成本越低,同樣意味著平均壽命更短。
SLC是數據中心標準,但控制器技術的不斷優化使得MLC被大多數用例所接受。尤其是在採用了某種方式的數據保護,比如鏡像或者RAID或者使用了FLASH快閃記憶體層時。

規格介紹


就在虛擬環境中使用FLASH快閃記憶體而言,通常有三種規格可供選擇。
最常見的是固態硬碟,其與硬碟的規格相同。這類FLASH快閃記憶體可以很容易地安裝在伺服器內部或者存儲陣列內部,直接使用HDD的驅動器插槽即可。
SSD的不足之處在於性能、密度。在SSD中放置FLASH快閃記憶體意味著所有的存儲I/O都是通過SCSI堆棧處理的。與其他方式相比,會增加一些延遲。儘管如此,這些系統,尤其是陣列,仍舊可以交付成千上萬個IOPS,因此很少會受到需要使用SCSI協議的SSD的影響。密度同樣受到了忽視,快閃記憶體SSD廠商已經採用了獨特的方式在硬碟中塞入儘可能多的FLASH快閃記憶體,與同等的HDD相比,SSD通常提供了更大的存儲容量。
就某些環境而言,SCSI所增加的延遲存在問題,儘管通常我們所指的並不是虛擬環境。當延遲是一個關注點時,可以選擇PCIe SSD,將快閃記憶體設備集成到PCIe板卡上。這通常避免了標準的存儲協議堆棧而且能夠在本地訪問CPU。但用於三大最為流行的虛擬環境的驅動器都是很普通的。
PCIe應該被虛擬環境視為RAM內存的一個擴展。因為PCIe具備低延遲特性,能夠提供性能非常高的虛擬內存池,這樣一來動態RAM用於存儲換出的頁面幾乎對性能沒有任何影響。
另一種正在變得流行的FLASH快閃記憶體是內存匯流排FLASH快閃記憶體。FLASH內存匯流排FLASH快閃記憶體安裝在伺服器FLASH內存插槽中而不是PCIe匯流排中。FLASH內存匯流排FLASH快閃記憶體看起來像是DRAM雙排直插內存模塊,但實際上包含的是FLASH快閃記憶體。這種實現方式的延遲甚至比PCIe SSD還要低而且在訪問CPU時提供了私有、高性能路徑。FLASH內存匯流排FLASH快閃記憶體在虛擬環境中應用有限,但將FLASH內存匯流排FLASH快閃記憶體用作虛擬交換FLASH內存大有裨益,當難於使用PCIe插槽時,FLASH內存匯流排快閃記憶體同樣是刀片、1U以及2U伺服器的理想選擇。

損耗


FLASH快閃記憶體的損耗在VMware以及Hyper-V環境中備受關懷,類似於緩存和數據去重這樣的技術將會對其持久性造成負面影響。
FLASH快閃記憶體被認為是大有前途的技術,很多人認為他們可以在伺服器中部署快閃記憶體充當緩存的角色。但殊不知FLASH快閃記憶體適合讀,而並不適合寫。你需要十分注意FLASH快閃記憶體的耗損,並充分利用其有限的壽命。
FLASH快閃記憶體廠商會使用DRAM,這種介質抗耗損能力比較好。他們將所有的寫操作都聚集於DRAM緩存,從而減少對快閃記憶體緩存的大量寫操作。這保留了快閃記憶體的完整性並有效防止了快閃記憶體的耗損。
Hyper-V則體現出略微不同的FLASH快閃記憶體耗損問題。它在存儲中應用數據去重,而對源文件執行寫。原數據以很多小的寫操作寫入緩存,當Hyper-V在運行去重演演算法時,這些寫操作又會二次破壞緩存。