寫入放大

寫入放大中一種不良的現象，即實際寫入的物理資料量是寫入資料量的多倍。由於快閃記憶體在可重新寫入資料前必須先擦除，而擦除操作的粒度與寫入操作相比低得多，執行這些操作就會多次移動使用者資料和元資料。因此，要改寫資料，就需要讀取快閃記憶體某些已使用的部分，更新它們，並寫入到新的位置，如果新位置在之前已被使用過，還需連同先擦除；由於快閃記憶體的這種工作方式，必須擦除改寫的快閃記憶體部分比新資料實際需要的大得多。此倍增效應會增加請求寫入的次數，縮短SSD的壽命，從而減小SSD能可靠執行的時間。增加的寫入也會消耗快閃記憶體的頻寬，此主要降低SSD的隨機寫入效能。許多因素會影響SSD的寫入放大，一些可以由使用者來控制，而另一些則是資料寫入和SSD使用的直接結果。在2008年，英特爾和SiliconSystems首先在他們的論文和出版物使用了術語“寫入放大”。寫入放大通常用快閃記憶體的寫入與主機系統的寫入之比來衡量。沒有開啟資料壓縮時，寫入放大不小於1。在使用壓縮的情況下，SandForce聲稱他們的典型寫入放大達到了0.5，而在最佳情況下，使用SF-2281控制器，此值能低至0.14。SSD基本操作.由於快閃記憶體操作的性質，資料不能像在硬碟中那樣直接覆寫。當首次向SSD寫入資料時，單元都處於已擦除狀態，因而資料可以直接寫入，一次一頁的一部分。當新的資料要替換已寫入的舊資料時，SSD控制器將會寫入新的資料至新的位置，並且更新邏輯對映，將其指向新的物理位置。原位置的資料將不再有效。在可以再次寫入之前，它需要先被擦除。快閃記憶體的程式設計和擦除次數有限。通常以快閃記憶體在整個壽命中最多可忍受的程式設計/擦除迴圈迴圈次數又降至1000。寫入放大越低，則越為理想，因為與之對應的是快閃記憶體中P/E迴圈次數減少，所以能延長SSD的壽命。計算數值.即使是在定義術語之前，寫入放大就已經存在於固態硬碟中，但直到2008年，才有英特爾和SiliconSystems開始在他們的論文和出版物中使用它。所有的SSD都有一個寫入放大值，基於目前正在寫入的資料及先前已寫入到SSD的資料。為了能準確地測量特定SSD的該值，應使選定的測試流程執行足夠長的時間，以確保驅動器已達到穩態。一個簡單計算SSD寫入放大的公式是：快閃記憶體寫入的資料量 ÷ 主控寫入的資料量 = 寫入放大影響因素.SSD的寫入放大會受許多因素的影響。下表列出了主要因素以及它們對寫入放大的影響。對於變數因素，表中註明了“正面”相關或“反面”相關。如隨著預留空間的增加，寫入放大將減小關係，那麼它的關係或“正向”或“反向”。垃圾回收.資料以頁面所有的SSD都包含不同程度的垃圾回收機制，但在執行的頻率和速度上有所不同。垃圾回收佔了SSD上寫入放大的很大一部分。讀取資料不需要擦除快閃記憶體，因此通常與寫入放大無關。在有限的情況下會發生讀取干擾錯誤，此時會讀取並重新寫入區塊中的資料，但是這不會對驅動器的寫入放大造成實質性的影響。後臺垃圾回收.垃圾回收的過程包括讀取並重新向快閃記憶體寫入資料。這意味著，主控寫入新資料時，就必須先讀取整個區塊，再寫入區塊中仍包含有效資料的部分，之後才寫入新資料。這顯著降低了系統的效能。有的SSD控制器實現了“後臺垃圾回收”，能讓控制器在主控需要寫入新的資料之前，使用空閒時間整理快閃記憶體塊。這使驅動器能維持較高的效能。如果能在需要快閃記憶體前，控制器在後臺垃圾回收時,就已經收集好了所有的空閒區塊，那麼就可以直接寫入主控要寫入的新資料，而無須先移動資料，這樣驅動器就總能表現出最佳效能。不幸的是，實際上某些區塊上的資料主控並不需要，它們最終將會被刪除，但作業系統並沒有告訴控制器這些資訊。結果，要被刪除的資料被重寫到了快閃記憶體的另一個位置，因而提高了寫入放大。在一些OCZ的SSD中，後臺垃圾回收僅會清除少量的塊，之後便停止，以此限制過度寫入的數量。另一種解決方案是配備一個高效的垃圾回收系統，在主控寫入的同時同步執行必要的資料移動。在SSD少有空閒的環境中，這種解決方案更有效。SandForce的SSD控制器和Violin Memory的系統有這項功能。檔案系統感知垃圾回收.2010年，一些廠商即便不支援TRIM，也能獲得相似的效能。三星實現的操作似乎在假定、並且需要有一個NTFS檔案系統。目前，這些廠商生產的SSD是否仍具備該功能不得而知。有報道稱，如果沒有正確地用MBR和NTFS格式化這些驅動器，將會出現系統資料的損壞。預留空間.預留空間呈現給使用者的可用邏輯容量之間的差值。在SSD的垃圾收集、耗損均衡及壞塊對映操作中，額外的預留空間有助於降低控制器寫入快閃記憶體時的寫入放大。預留空間的第一級來自容量的計算，單位使用吉位元組。從而預留0%空間的128 GB SSD提供給使用者的容量是128,000,000,000位元組。這個初始的7.37％通常不計算在總的預留空間數量中。預留空間的第二級來自制造商。這一級的預留空間大小通常為0％、7％或28％，基於十進位制吉位元組的物理容量與十進位制吉位元組的使用者可用空間之差。舉例而言，製造商釋出的規格為100 GB、120 GB或128 GB的SSD，可能它們的實際物理容量都是128 GB。這種差異就是由28％、7％和0％造成的，而這也是製造商聲稱它們的驅動器有28％預留空間的依據。這不包括額外的十進位制和二進位制吉位元組之間相差的7.37％。預留空間的第三級來自驅動器上的已知可用空間，以獲得永續性和效能，前提是報告未使用的部分，和/或以目前或未來的空間為代價。可以藉由作業系統使用TRIM命令來確定空閒空間。另外，一些SSD提供了工具，以讓終端使用者選擇額外的預留空間。此外，如果在SSD上沒有100%地使用可用空間劃分分割槽佈局，SSD也將會自動把未分割槽的空間作為預留空間使用。還有一個預留空間作業系統的最小可用空間限制；一些作業系統在每一個驅動器上都保留有一定的最小可用空間，特別是在啟動或主驅動器上。如果SSD，也許是透過連續使用TRIM命令，能夠識別出這些額外空間，那麼它就能作為半永久性的預留空間。預留空間往往需要佔用使用者容量，或暫時或永久，但它能減少寫入放大，增加永續性，並提高效能。TRIM.TRIM是一個SATA命令，使得作業系統可以告訴SSD不再需要哪些之前儲存過資料的區塊。可能這些檔案已被刪除，或整個分割槽已被格式化。若作業系統替換了一個LBA的同時覆寫了一個檔案時，SSD就能知道可以標記原來的LBA為過時或無效，在垃圾回收的過程中就不用再保留那些塊。如果使用者或作業系統刪除一個檔案，通常只會將該檔案標記為已刪除，而並未真正擦除磁碟上的實際內容。正因如此，SSD不知道可以擦除檔案先前佔用的LBA，所以在垃圾回收時仍會保留它們。在有作業系統支援的情況下，TRIM命令解決了這個問題，如Windows 7、Mac OS及Linux &gt;= 2.6.33。當永久刪除一個檔案或格式化硬碟時，作業系統依據不再包含有效資料的LBA傳送TRIM命令。這可告知SSD可以擦除並重新使用哪些使用中的LBA。垃圾回收過程中需要移動的LBA因此而減少。結果是SSD將有更多的空閒空間，同時獲得低寫入放大及更高的效能。限制和依賴.TRIM命令也需要SSD支援。SSD韌體如果不支援TRIM命令，就不會標記TRIM命令收到的LBA為無效，而仍假設資料有效，並在垃圾回收時繼續予以保留。只有當作業系統向這些LBA中儲存新資料時，SSD才能將最初的LBA標記為無效。若驅動器中沒有內建支援TRIM，SSD廠商可以為使用者升級韌體，或提供一個單獨的實用程式，以從作業系統中提取關於無效資料的資訊，再另外TRIM SSD。只有使用者每次執行程式後，才能從中獲得好處。使用者可以設定計劃任務，讓該實用程式在後臺定期自動執行。正因為SSD支援TRIM命令，在收到命令後，它不一定能立即表現出最快效能。TRIM命令釋放的空間可能隨機散落於SSD中。要經過幾輪的資料寫入和垃圾回收之後，空間才會逐漸合併，表現的效能才能提高。即使已配置OS和SSD支援TRIM命令，其他情況也可能會使TRIM無法發揮出它的功效。截至2010年初[ [update]]，資料庫和RAID系統還沒有配備TRIM感知，因而無法向SSD傳遞資訊。這種情況下，SSD將繼續保留那些區塊，直到OS將那些LBA用於新的寫操作。實際可從TRIM命令中得到的益處取決於SSD上的空閒使用者容量。如果SSD使用者容量為100 GB，使用者實際在驅動器上儲存了95 GB資料，任何TRIM操作為垃圾回收和耗損均衡增加的可用空間都不會超過5 GB。在這種情況下，增加5 GB的預留空間將使SSD的效能更加穩定一致，因為可用空間總會有額外的5 GB，而不必等待OS發來TRIM命令。空閒使用者容量.SSD控制器將使用SSD上的任何空閒塊以進行垃圾回收和耗損均衡。無使用者資料的使用者容量部分。安全擦除.ATA安全擦除命令旨在從驅動器中刪除所有使用者資料。對於沒有內建加密功能的固態硬碟，此命令將會把驅動器恢復至其出廠狀態。剛開始，它的效能將恢復至可能的最高水平及最佳的寫入放大，但只要驅動器再次開始垃圾收集，效能和寫入放大就會逐漸降至先前水平。許多工具能使用ATA安全擦除命令重置驅動器，而且有使用者介面。在行業中經常提到的一個免費工具是HDDErase。Gparted和Ubuntu live CD提供可啟動的Linux系統，上有包含安全擦除的磁碟實用程式。實時加密所有寫入資料的驅動器可以以另一種方式實現ATA安全擦除。方法是簡單地向其補零，並在每次完成安全擦除後產生一個新的隨機加密金鑰。這樣就無法再讀取舊資料，因為無法解密。內建加密的驅動器可能需要傳送TRIM命令，以將其設為出廠狀態。耗損均衡.如果反覆地程式設計和擦寫某區塊，而其他區塊卻沒有寫入，該區塊會早於其他的區塊而磨損——從而過早地結束了SSD的壽命。由於這個原因，SSD控制器使用稱為耗損均衡的技術，以儘可能均勻地將寫入分配到SSD的所有快閃記憶體區塊上。理想情況下，每一區塊都能寫入到最大次數，這樣它們都能同時失效。不幸的是，耗損均衡操作會要求移動之前寫入後就未改變的資料可以寫入到冷資料的區塊中，讓冷資料的區塊達到均衡。資料被重定位，而主控卻並沒有修改它們，這增加了寫入放大，而降低了快閃記憶體的壽命。關鍵是要找到最優演算法以使兩者同時達到最佳化。靜動資料分離.對SSD控制器來說，靜動資料分離並不是一件簡單的事。該方法需要SSD控制器將資料不斷變化、需要重寫。任何對操作中未涉及資料的垃圾回收都會增加寫入放大。因此分離資料將使靜態資料留在原地，如果它永遠不會改寫，寫入放大就能達到最低。順序寫入.當順序向固態硬碟寫入資料時，寫入放大等於1，意為沒有寫入放大。這是因為在資料寫入時，依次用來自同一檔案的資料填充區塊。如果OS確認該檔案將被替換或刪除，可以標記整個塊為無效，也不需要讀取它以將垃圾收集到的資料重寫入另一個塊。它只需要擦除，比隨機資料寫入所需的“讀取-擦除-修改-寫入”的垃圾收集過程更易、更快。隨機寫入.在完全垃圾回收、安全擦除、100％TRIM、或新安裝之後，SSD有大量的空閒區塊，隨機寫入效能達到峰值。最大速度將取決於連線到SSD控制器的並行快閃記憶體通道數、韌體效率及快閃記憶體寫入頁面的速度。在此階段，寫入放大之於隨機寫入達到最佳，接近1。一旦區塊都寫入了一次，垃圾收集過程將啟動，效能將會被此過程的速度和效率所限制。此階段的寫入放大將增至驅動器經歷過的最高水平。對效能的影響.SSD的總體效能取決於許多因素，其中包括寫入放大。向快閃記憶體裝置寫入比從它讀取所需的時間更長。SSD通常並聯使用多個快閃記憶體元件，以提高效能。如果SSD的寫入放大高，控制器將不得不多次向快閃記憶體寫入。主控將需要更多的時間寫入資料。低寫入放大的SSD不需要寫那麼多的資料，因此能比高寫入放大的驅動器更早寫入完畢。產品宣告.2008年9月，英特爾宣佈了X25-M SATA SSD，聲稱WA能低至1.1。2009年4月，SandForce宣佈了SF-1000 SSD處理器系列，報稱其WA為0.5，似乎是藉由某種形式的資料壓縮而達到。在此次釋出前，曾認為1.0的寫入放大是SSD可以達到的最低水平。目前，只有SandForce的SSD控制器使用了壓縮。