Bir depolama ürününün kutusunda “500.000 IOPS” yazıyor olabilir. Aynı ürün sizin iş yükünüzde bunun onda birini verebilir ve ikisi de doğrudur. Aradaki farkı anlamak için üç ölçütün ne ölçtüğünü ayırmak gerekir.
Üç ayrı ölçüt
IOPS, saniyedeki giriş–çıkış işlemi sayısıdır. Kaç istek karşılandığını söyler, ne kadar veri taşındığını değil.
Verim (throughput), birim zamanda taşınan veri miktarıdır; MB/s ile ölçülür.
Gecikme (latency), tek bir isteğin tamamlanma süresidir; milisaniye ile ölçülür.
Üçü birbirine bağlıdır ama biri iyileşirken diğeri kötüleşebilir. Kullanıcının “yavaş” dediği şey neredeyse her zaman gecikmedir — IOPS ya da verim değil.
Blok boyutu her şeyi değiştirir
IOPS tek başına anlamsız bir sayıdır; hangi blok boyutunda ölçüldüğü söylenmeden karşılaştırılamaz.
Basit ilişki şudur: verim = IOPS × blok boyutu.
Aynı disk, 4 KB’lık isteklerle yüksek IOPS ve düşük verim üretir; 1 MB’lık isteklerle düşük IOPS ve yüksek verim üretir. İkisi de aynı donanımdır.
Ürün kataloglarındaki büyük IOPS rakamları neredeyse her zaman 4 KB rastgele okumada ölçülür — yani en yüksek sayıyı veren senaryoda. Veritabanınız 8 KB blok kullanıyorsa o rakam sizin için geçerli değildir.
Rastgele ve sıralı erişim
Sıralı erişim verinin diskte yan yana duran bölümlerini okur: yedek alma, büyük dosya kopyalama, video akışı. Burada belirleyici olan veriмdir.
Rastgele erişim dağınık noktalara gider: veritabanı indeksleri, sanal makine diskleri, çok sayıda küçük dosya. Burada belirleyici olan IOPS’tur.
Dönen disklerde fark uçurumdur, çünkü kafanın hareket etmesi gerekir. Katı hâl disklerde fark küçülür ama kaybolmaz. İkisi arasındaki mekanik ayrım SSD ve HDD farkı yazısında.
Kuyruk derinliği
Kuyruk derinliği, aynı anda bekleyen istek sayısıdır. Katı hâl diskler paralel çalışabildiği için kuyruk derindikçe daha çok IOPS üretirler.
Buradaki takas nettir: kuyruk derinliği arttıkça IOPS yükselir ama gecikme de yükselir. Her istek sırasını bekler.
Bu yüzden bir ölçüm “yüksek IOPS” gösterirken kullanıcı yavaşlık yaşayabilir. Katalog rakamları genelde çok derin kuyrukta alınır; gerçek uygulama yükü ise çoğu zaman sığ kuyruktadır.
Doğru soru “kaç IOPS” değil, “kabul edilebilir gecikmede kaç IOPS”tur.
Okuma ve yazma ayrı ölçülür
Çoğu depolamada yazma, okumadan pahalıdır. RAID kullanıyorsanız araya bir çarpan daha girer: RAID 5’te tek bir mantıksal yazma dört fiziksel işleme, RAID 6’da altıya çıkar.
Yani uygulamanın istediği yazma IOPS’u ile disklerden istenen IOPS aynı sayı değildir. Seviyelerin karşılaştırması RAID seviyeleri yazısında; kendi disk sayınızla hesap için RAID hesaplayıcı aracı var.
Okuma/yazma oranını da bilmeniz gerekir. %70 okuma / %30 yazma karışımı, %100 okumadan belirgin biçimde farklı davranır.
Önbellek yanıltır
Denetleyicideki ve sunucudaki önbellek, kısa ölçümlerde gerçek dışı sonuçlar üretir. Test verisi önbelleğe sığıyorsa disklere hiç inilmez ve rakamlar tavan yapar.
Anlamlı ölçüm için iki kural vardır: test kümesi önbellekten belirgin biçimde büyük olmalı, ve test yeterince uzun sürmeli — bir dakikalık bir koşu, önbellek dolduktan sonraki kararlı hâli göstermez.
Aynı nedenle, katı hâl disklerde uzun süreli yazma testleri başta yüksek sonra düşen bir eğri çizer.
İhtiyacınızı nasıl bulursunuz
Tahmin etmek yerine mevcut sistemi ölçmek her zaman daha isabetlidir. Windows tarafında performans sayaçları, Linux tarafında ilgili izleme araçları saniyedeki okuma ve yazma işlemlerini verir.
Bir hafta boyunca toplayın ve tepe değeri değil 95. yüzdelik değeri kullanın. Tepe değere göre tasarlamak gereksiz maliyet üretir; ortalamaya göre tasarlamak ise yoğun saatte yetersiz kalır.
Bu sayıları depolama tasarımına çevirmek için IOPS hesaplayıcı aracını, kapasite tarafı için disk bölümleme aracını kullanabilirsiniz.
Bulutta ek sınırlar
Bulut disklerinde IOPS genelde boyuta bağlıdır: küçük bir disk düşük IOPS tavanına sahiptir. İhtiyacınız olan performansı almak için gereğinden büyük disk almak yaygın bir durumdur.
İkinci sınır sanal makinenin kendisindedir. Disk yüksek IOPS verse bile makine tipinin toplam depolama bant genişliği tavanı vardır; ikisinden düşük olan geçerlidir.
Üçüncüsü kısa süreli hızlanma (burst) mekanizmasıdır: disk bir süre yüksek performans verir, kredisi tükenince taban değere düşer. Kısa testler geçer, üretim yükü düşer.
Kısaca
IOPS istek sayısını, verim taşınan veriyi, gecikme ise bekleme süresini ölçer. Bir rakam blok boyutu, erişim deseni ve kuyruk derinliği belirtilmeden anlamlı değildir.
Tasarım yaparken sorulacak soru şudur: bu iş yükünün istediği desende, kabul edilebilir gecikmeyle kaç işlem gerekiyor? Katalogdaki tepe değer bu sorunun yanıtı değildir.