Flash disklerin kullanım ömrü ve performansı nasıl artırılır?

Bu flood’da flash disklerin kullanım ömürlerini artıran Wear Leveling tekniğinden ve genel olarak flash disklerin ömürlerini ve performanslarını artırmak için kullanılan tekniklerden bahsedeceğim.

Önceki flood’da flash disklerin çalışma prensiplerini açıklayıp blokların silinme ömürlerinin sınırlı olduğunu belirtmiştik. SSD ve taşınabilir diskler üzerinde bulunan kontrolörler her bir bloğun silinme sayısını tutar. Bir flash diskin yapısı aşağıda gösterilmiştir.

Flash disk kontrolörleri gelen diske yazma isteklerinde silinme sayısı daha düşük olan bloklardaki page'leri tercih eder. Böylece disk üzerindeki bütün blokların silinme sayısı birbirine yakın tutulmuş olur. Bu tekniğe Wear Leveling adı verilir.

İşletim sistemindeki dosya sistemi disk tipinden (manyetik, SSD) bağımsız çalışır. Aynı şekilde dosya sistemi Wear Leveling'den haberdar olmadan okuma/yazma işlemlerini yürütebilmelidir. Wear Leveling'i dosya sisteminden bağımsız hale getirmek için flash disk kontrolörü üzerinde mantıksal adresten fiziksel adrese dönüşüm yapan tablolar bulunur. Kontrolör Wear Leveling ile bir page'deki veriyi fiziksel olarak taşıyıp bu tabloda mantıksal adrese karşılık gelen fiziksel adresi günceller ve bu detayın dosya sistemi katmanına sızması gerekmez.

En basit Wear Leveling algoritmaları dinamik ve statik Wear Leveling olarak adlandırılır. Dinamik versiyonda yukarıda anlatıldığı gibi içeriği değişen bloklar farklı blok numaralarına yazılır. Statik versiyonda ise üzerinde içeriği değişmeyen veriler tutan (bir kere yazılan) bloklar da periyodik olarak başka bloklara kaydırılarak ilgili blokların da etkin biçimde diskin silinme yükünü sırtlaması sağlanır. Algoritmalar ortak olarak en düşük silme sayısına sahip olan blokları bulmak ve bunları kullanmak üzere optimize edilirler.

Flash tabanlı disklerin kullanım ömrünü azaltan ve performansını düşüren en önemli faktör disk üzerindeki boş alanın yetersiz olmasıdır. Yeni bir verinin yazılması ve veri güncelleme işleminde boş page veya silinmiş bloğa ihtiyaç duyulması sebebiyle kullanılmayan alanı yetersiz olan disklerde gerekli alanı açmak için değiştirilmek istenen verinin birkaç katı (en kötü durumda yüzlerce katı) büyüklüğünde page'in yer değiştirilmesi gerekebilir. Bu işlem hem performansı hem de bloklardaki silinme sayısı arttığı için disk ömrününü olumsuz şekilde etkiler.

Yetersiz disk alanı kaynaklı ortaya çıkan ve yukarıda anlatılan olaya Write Amplification adı verilir. Üreticiler bu problemle başetmek üzere Over-Provision uygularlar. Örneğin kullanıcıya 128GB'lık bir diskin 112GB'ını kullandırıp sürekli boş alan bulunmasını sağlarlar.

Doğası gereği verinin çok fazla değiştiği enterprise sistemlerde (örneğin OLTP veri tabanları) performans gereksinimlerinden dolayı SSD disk kullanılmak istenebilir. Yoğun kullanımda mevcut flash disklerin silme sayıları ile diskin ömrü 6 ay gibi çok kısa sürelere düşebilir. Diskin bu kadar kısa sürede bozulması operasyonel maliyetleri beraberinde getirdiği için enterprise sistemlerde kullanılmak üzere diske Over-Provisioning biraz abartılarak uygulanabilir. Örneğin kullanıcıya 1TB olarak verilen bir disk aslında 4TB kapasiteye sahip olabilir.

Kullanıcıya verilen depolama alanı gerçek kapasitenin 4'te 1'i olan diskin kullanım ömrü Wear Leveling tekniği ile 4 katına çıkmış olur. Ben de profesyonel kariyerimin en keyifli işlerinden birinde endüstriyel otomasyon alanında kullanılan bir üründeki flash diskin kullanım alanını aynı bırakarak kapasitesini ve dolayısıyla kullanım ömrünü 8-16 katına çıkaran bir projeyi tamamlamıştım. Ürün endüstriyel otomasyonda kullanıldığı için ömrü dolan diskleri değiştirmek üretimin durmasına yani para kaybına sebep olduğu için bu özellik elzemdi.

Yukarıda bahsedilen fonksiyonu kodlamak kadar test etmek de zevkliydi. Kalite ekiplerinin fonksiyonaliteyi doğrulayabilmesi için müşteriye de açılacak şekilde web arayüzünden blokların silinme sayılarını bir Heat Map (Sıcaklık Haritasında) ile sunmuştuk. Daha önce bahsettiğimiz dd adlı araç ile disk üzerinde gerçekte 3 ayda oluşacak dosya sistemi hareketlerini birkaç günde hızlıca oluşturacak bir betik yazmıştık. Siz de bu tarz bir betik yazarak artık kullanmadığınız bir flash belleğin silme limitini doldurup onu kullanılamaz hale getirebilirsiniz.