IOPS ve Throughput Nedir?
Hiçbir son kullanıcı ne kadar teknoloji harikası olursa olsun yavaş, sürekli çöken ve bir işlemlerin yarısında kapanan yazılımlarla çalışmak istemezler. Doğal olarak bir sistem veya proje planlarken performans bizim için önemli bir etkendir. Sunucu ve servislerde oluşan dar boğazları incelediğiniz zaman büyük bir kısmının yetersiz kaynak atamasından dolayı oluştuğunu görürsünüz, hal böyleyken sorunun çözümü kolay gibi gözükmektedir. Memory yetmiyorsa Ram artırımı işlemci yetmiyorsa CPU artırımına gidilir. Sanallaştırma sayesinde minimum kesintiyle hatta çoğu durumda kesintiye bile ihtiyacımız olmadan kaynakları değiştirebiliriz ama durum her zaman böyle olmayabilir. Özellikle disk performansında oluşan sorunların çözümü bu kadar kolay olmuyor. Bunun için mimariyi oluştururken ilk seferde üzerinde çalışacak servisleri ve yükü doğru tahmin etmeli ve buna göre sistemler hazırlamalıyız.
Birçok sistem yöneticisi bir servisi veya sistemi devreye alırken disk’le ilgili ihtiyaçlarını düşünürken sadece kapasite öngörüsünde bulunurlar. Doğal olarak orta ve uzun vadede yük artıkça dar boğazlar oluşmaya ve performans kaybı gözlemlenir. Bunun yegane sebebi sistemin ihtiyaç duyacağı toplam IOPS ve Throughput doğru öngörülememesi veya hiç hesaba katılmamasıdır.
Peki nedir bu değerler ve ne işe yararlar. IOPS(Input/output operations per second) adından da anlaşılacağı gibi bir diskin saniyede yapabileceği maksimum yazma veya okuma sayısıdır. Throughput is belli bir zaman aralığında yapılan işi temsil eder storage için konuşursak 1 saniyede kaç MB yazdığı veya okuyabildiği değerdir. Genelde insanlar IOPS’a odaklanır ve Throughput’u önemsemez veya aynı şey olduğunu düşünür. Durum maalesef böyle değil ve size iki farklı senaryoyla durumu anlatmak istiyorum. İlk senaryoda kullanıcıların arşiv olarak kullandıkları bir dosya sunucusunun throughput’unu hesaplarken ikinci senaryoda aynı diskler ile bir yoğun yazma oranına sahip bir log arşivininkini hesaplayacağız.
Öncelikle Throughput hesaplama formülümüz tek disk için şudur.
MB/s = IOPS * <KB per IO> / 1024
Burada ki “KB per IO” disk üzerindeki block size’larıdır.Her iki örnek içinde 128KB olarak aldım.
İlk önce dosya sunucumuzu ele alalım. Bu sunucunun toplam iş yükünün %80’i okuma, %20’si yazma olsun ve güvenlik sebebiyle de RAID-5 yapalım. 4 adet 175IOPS’a sahip disk takalım.
Öncelikle toplam IOPS’u hesaplamamız gerekiyor.
Toplam IOPS = 4 * 175
Raid yaptığımız için Raid’den kaynaklı bir “IO penalty” bulunmaktadır. Bunun sebebi Raid 0 haricinde tüm Raid yapılarında verinin birden fazla diske yazılmasıdır. Yazının sonunda “raid penalty” tablosunu bulabilirsiniz.Raid 5 için bu değer “4”.
Fonksiyonal IOPS’u hesaplarsak
Fonksiyonal IOPS = ((Toplam IOPS *yazma yüzdesi)/(Raid penalty ))+(Toplam IOPS*okuma yüzdesi)
Dosya sunucusunun fonksiyonal IOPS ve Throughput’u
Yazma için 35 IOPS ve Throughput’u yaklaşık olarak 4,5MB/s
Okumak içinse 560 IOPS ve Throughput’u yaklaşık olarak 70MB/s
Logları tuttuğumuz sunucu Raid-6 ile kurulmuş olsun. Geri kalan tüm özellikleri bire bir aynı olduğunu varsayalım. Raid-6’nın penalty değeri 6’dır. Bu durumda,
Yazma için yaklaşık IOPS 94 ve Throughput’u yaklaşık olarak 11,75 MB/s
Okumak içinse yaklaşık IOPS 140 ve Throughput’u yaklaşık olarak 17,5 MB/s
Gördüğünüz üzere aynı diskler farklı raid yapıları ve okuma ve yazma oranlarıyla tamamen farklı sonuçlar vermektedir. Tasarımınızı yaparken mutlaka ihtiyacınızı iyicene analiz edip karar verin. Peki kullanıcı sayınızı ve her kullanıcının yaklaşık olarak yaratacağı yükü biliyorsunuz diyelim. Bu durumda
Gerekli Disk Sayısı = ((Read IOPS) + (Write IOPS*Raid Penalty))/ Disk IOPS
Formülünü kullanarak ihtiyacınız olan disk sayısını bulabilirsiniz. Gereken minimum disk sayısını bilmek performansın yanında kapasite planlaması yaparken de size yardımcı olacaktır.
Yazımı bitirmeden önce küçük bir tiyo vermek istiyorum : Diskin block size’ını değiştirerek throughput’da artış sağlayabilirsiniz ama bu deduption oranınızı ciddi anlamda etkileyecektir.