Disk IOPS ve sar tps arasındaki ilişki


13

Uygulamamın 32 bit CentOS 6.2 üzerinde çalışan IOPS gereksinimlerini tahmin etmeye çalışıyorum. SATA diskleri olan bir makinede biraz ölçüm yapmaya başladım ve sar tarafından ölçülen IOPS ve tps arasındaki farktan oldukça kafam karıştı.

Vikipedi göre SATA disk 75-100 IOPS gerçekleştirmelidir. ioping yardımcı programı rastgele erişim testi için bunu onaylıyor gibi görünüyor:

# ./ioping -R /dev/sda
--- /dev/sda (device 931.0 Gb) ioping statistics ---
279 requests completed in 3.0 s, 92 iops, 371.3 kb/s
min/avg/max/mdev = 2.7 ms / 10.8 ms / 130.8 ms / 7.9 ms

Ancak sar tarafından üretilen tps değerleri çok daha yüksektir (/ dev / sda):

# iostat 1
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
       0.17    0.00    2.02   14.86    0.00   82.96

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda             559.00         0.00    142600.00          0     142600
dm-0          18433.00         0.00    147464.00          0     147464
dm-1              0.00         0.00         0.00          0          0
dm-2              0.00         0.00         0.00          0          0

Bu yükün sıralı (çeşitli blok boyutlarında dd) veya rasgele erişim (ioping) olması gerçekten önemli değildir, değer hala aynıdır. Ben aslında tps IOPS olduğunu düşündüm ve transfer daha büyük parçalar ile aşağı gitmek beklenir.

Peki tps değeri tam olarak ne anlama geliyor? Peki IOPS ile ilişkisi nedir?


2
Disk önbelleği nedeniyle TPS değerinde daha yüksek IOPS gördüğünüzü düşünüyorum.
ceejayoz

1
Tamam, aslında önbelleği doldurmak için 256 KB blok ile dd üzerinden 10GB'lık bir dosya denedim ve ~ 90 saniye tps ~ 200'e düştükten sonra, belki haklısınız. Ama yine de 80 ve 200 oldukça farklı ... Okuma ve yazma IOPS'larının farklı olması mümkün mü? Ve bu değerden gerekli IOPS'yi anlamanın bir yolu var mı?
pystole

1
Neden IOPS'tan sonra olduğunuzu açıklayabilir misiniz? okuma ve yazma burada aynı tencereye atılmış oldukça farklı bir çift ayakkabı vardır.
Nils

Bunun nedeni, minimum HW gereksinimlerini tanımlamam gerekiyor. Ağ üzerinden veri alan bir sunucu var (burada sabit bit hızını varsayabiliriz) ve alınan verileri diske yazar. Veriler dosyalara sırayla yazılır, ancak yüzlerce (örneğin 800) paralel olabilir. Müşteri sayısı bir noktaya ulaştığında büyük iowaitler almaya başladığımı fark ettim. Elde edebileceğim gerçek disk verimi yaklaşık 25MB / s, bu da oldukça düşük, daha yüksek bit hızına sahip daha az istemci 35MB / s, saf sıra yaklaşık 130MB / s yapabilir. Sanırım burada önemli olan IOPS ...
pystole

Yanıtlar:


6

İşlemler, RAW diskine yazılan tek IO komutlarıdır (getirme bloğu / yazma bloğu) (örneğin dm-0'da). Linux çekirdeği bu komutları daha iyi bir sıraya sokmaya veya daha verimli komutlara sıkıştırmaya çalışır (örneğin: bir blok almak yerine bir kerede iki blok almak ve hemen sonra başka bir blok almak). Bunlar disk denetleyicisine (sda için tps) giden işlemlerdir.

İyi kontrolörlerin gerçek işlem sayısını daha da azaltan kendi mantıkları vardır.

Bir işlem, SCSI komutu olabilir "sektör 22'den başlayarak crontoller 1 hedef 2 lun 3'e 2 GB yazın.) Gördüğünüz gibi bu, işlem rakamları ile doğrudan korelasyona getirilemez.

Neyin peşindeyseniz sürekli yazma hızıdır. Burada birkaç sınırlayıcı faktör var:

  • istemci bağlantısı: Ağ Gigabit ise asla 100 MB / sn'den daha fazla girişiniz olmaz
  • disk denetleyicisi: Bu 3 Gb denetleyiciyse, asla 300 MB / sn'den daha fazla verim elde edemezsiniz
  • disk: Sürekli yazma performansı için üreticilerin değerine bakın
  • Dosya sistemi: İşletim sisteminin verileri işlemesi gerektiğinden biraz ek yük var - bunu bir RAM diskinde test edin ...

Sisteminiz için tahminim: 10 veya 5 baskını yapabilen ve en az 6 hızlı (15k) disk alabilen iyi bir donanım baskını denetleyicisi edinin.

Profesyonel kullanım için SATA yerine SAS kullanın.


Tamam, haklısın IOPS, çok fazla önbellek, yeniden sıralama ve birleştirme söz konusu olduğundan yazmalar için bir anlam ifade etmiyor. Kapanıyor ... Teşekkürler.
pystole

5

Ayrıca, TPSdeğerin okumaları ve yazmaları temsil ettiğini de unutmayın -x; okuma ve yazmaların ayrıldığı genişletilmiş görünüm için anahtarı kullanabilirsiniz (r / s = okuma IOPS, w / s = yazma IOPS):

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
vda               0.07    24.65    0.30   18.95    30.65   330.22    18.74     0.07    3.61   0.98   1.89

Evet, haklısın. Ama benim durumumda, yazmaların neredeyse% 100'ü var, okumalar neredeyse yok.
pystole
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.