Kıyaslama DigitalOcean Blok Depolama

Giriş

Karşılaştırma, belirli bir kurulumun iş yükü ihtiyaçlarınızı karşılayıp karşılamadığını belirleyebilmeniz için altyapı performansını tahmin etmenize olanak tanır. Bu, artan bilgisayar gereksinimlerini karşılamak için yüksek sunucu performansını ve ölçeklemeyi korumanın önemli bir bileşenidir. Karşılaştırma testiyle, sunucu kaynaklarını izleyebilir, performans için optimize edebilir, kullanımı yönetebilir ve oluşabilecek sorunları tahmin edebilirsiniz.

Bu eğiticide, uygulamanızı taklit eden iş yüklerini simüle ederek DigitalOcean Block Storage Volumes'ınızı karşılaştırmak için en iyi uygulamalardan geçeceğiz.

Damlacık ve Blok Depolama Hacim Test Kurulumu

Uygun bir Damlacık ve Blok Depolama Birimi kurulumunu yapılandırmak için test ettiğiniz iş yükünün özelliklerini belirlemek isteyeceksiniz. DigitalOcean Volumes ürününü alternatif bir ürünle karşılaştırıyorsanız, benzer konfigürasyona sahip planları seçtiğinizden emin olun, böylece daha yakın bir karşılaştırma elde edersiniz.

Bir Damlacık kurma konusunda rehberlik için, “İlk DigitalOcean Damlacınızı Oluşturma” başlıklı eğiticimize başvurun. Blok Depolama Hacmi, Damlacık ile eşzamanlı olarak oluşturulabilir ve bazı durumlarda daha sonra Damlalar'ın altındaki Ciltler sekmesinden oluşturabilirsiniz. Denetim Masası . Birimleri oluşturma ve yönetme hakkında daha fazla bilgi için, “DijitalOkean Blok Depolamasına Giriş” bölümünü okuyabilirsiniz.

Birimi, performans gereksinimlerinizi karşılayan dosya sistemiyle biçimlendirin. En popüler varsayılan dosya sistemi, Ext3, önceki nesil Ext3 ve Ext2'den daha performanslıdır. XFS dosya sistemi, performans ve büyük veri dosyalarında uzmanlaşmıştır. “Linux'taki DigitalOcean Blok Depolama Birimlerini Nasıl Bölümlere Ayırım ve Biçimlendirelim” başlıklı dosya sistemlerinden daha fazlasını okuyabilirsiniz. Belirli bir dosya sistemi veya yapılandırma tercihiniz yoksa, sizin için blok birimleri oluşturma ve yükleme işlemi Denetim Masası'nda otomatikleştirilir.

Kurulumunuzu yerine getirdiğinizde, performans testlerinizden en iyi şekilde yararlanmak için kullanabileceğiniz kıyaslama araçlarını ve yapılandırmalarını tartışmaya devam edebiliriz.

Kıyaslama Araçları ve Konfigürasyonları

Performansın ölçülmesi için performans ölçüm aracını tartışacağız, çünkü çok esnek ve çoğu dağıtım tarafından destekleniyor. Araştırmak ve kullanmak isteyebileceğiniz alternatif kıyaslama araçları arasında Bonnie ++, btest ve Filebench bulunur.

Bir Ubuntu sunucusuna fio yüklemek için, önce paket listenizi güncellemeniz ve sonra aşağıdaki komutları kullanarak yüklemeniz gerekir:

  • sudo apt güncellemesi
  • sudo apt yüklemek fio

Her bir kıyaslama aracı, testiniz için en uygun performansı elde etmek için ayarlayabileceğiniz çeşitli parametrelerle birlikte gelir.

Ayarlamaya değer bir parametre, kuyruğun en iyi performansı sergilediği paralellik olan kuyruk derinliğidir. Genellikle bir sıra derinliği 1 , önceki işlem tamamlanana kadar iş yükünün başka bir işlem başlatamayacağını belirtir. Çok paralelleştirilmiş bir uygulamayı simüle etmek istiyorsanız, sadece testleriniz için düşük sıra derinlik numaralarını kullanın. Aksi halde, uygulamanız için istediğiniz performansı elde edene kadar sıra derinliğini artırmaya devam edin.

Kıyaslama aracı fio ile bazı tipik yapılandırma seçenekleri şunları içerir:

Option
Recommendations
iodepthThe queue depth that fio will issue to the file. In order to hit best input/output (I/O) rates, a number greater than iodepth=64 is recommended.
bsBlock size in bytes for I/O to use. File systems use 4K for metadata but tend to store files in much larger block sizes. Databases typically issue 8-16K sized I/O. For peak bandwidth tests, we recommend a block size of bs=64k or greater.
runtimeThe time in seconds to run the benchmark. We recommend a runtime greater than 60 seconds, usually in the range of runtime=120s to runtime=300s.
ioengineThe ioengine option defines how the job issues I/O to the file. We recommend ioengine=libaio which refers to Linux native asynchronous I/O.
directTakes a Boolean value: 0 uses the filesystem cache returning a value closest to the application behavior which may result in higher than typical benchmark results; and 1 skips any file system caching behavior, returning the closest performance to what the block volume can do. We recommend direct=1.
syncUse synchronous I/O for buffered writes. This option takes a Boolean value: 0 means not to force unit access, allowing for writeback cache behavior to operate like it does on normal disk drives with fio behaving more like a filesystem; 1 forces unit access, meaning I/O will not complete until the disk has guaranteed physical placement. We recommend sync=0.
sizeSize of test file, taking an integer. We typically recommend at least 20 gigabytes. Note that DigitalOcean’s performance does not vary with volume size.

Bu konfigürasyonlar göz önüne alındığında, şimdi çalıştırmak isteyebileceğiniz bazı örnek test testlerini inceleyebiliriz.

Benchmark Testlerini Çalıştırma

İşte size çalıştırabileceğiniz bazı örnek ölçütler. Bu öğreticinin bir sonraki bölümünde, aldığınız çıktının daha derinlemesine nasıl denetleneceğine bakacağız.

Aşağıdaki komutlarda, NYC3 veri merkezindeki bir birimdeki bir fio.test dosyasına işaret ediyoruz, kullanmak istediğiniz belirli dosya sistemini işaret edecek şekilde güncellediğinizden emin olun.

Bant Genişliğini Yaz

Bu test blok hacimlerine 1MB rastgele bir yazma gerçekleştirir.

  • fio --filename = / mnt / volume-nyc3-04 / fio.test
  • --direct = 1
  • --rw = randwrite
  • --ioengine = libaio
  • --bs = 1024K
  • --iodepth = 32
  • --name = bw-testi
  • --runtime = 120s

Standart bir Damlacık için, 200MB/sec çıktı bekliyoruz. Yüksek CPU Damlacık ile çalışıyorsanız, 300MB/sec çıktı beklemeniz gerekir.

Rastgele okuma testi

Bu, birden fazla küçük dosyanın bir cihazdan ne kadar hızlı okunabileceğini ölçer.

  • fio --filename = / mnt / volume-nyc3-04 / fio.test
  • --direct = 1
  • --rw = randread
  • --ioengine = libaio
  • --bs = 4K
  • --iodepth = 128
  • --name = rand-r
  • --runtime = 120s

Standart bir Damlacık için saniyede 5000 I / O işlem (IOPS) çıkışı bekliyoruz. Yüksek CPU Damlacık için, 6000 IOPS'den daha büyük bir çıkış bekliyoruz.

Rastgele Yazma Testi

Bu, birden fazla küçük dosyanın ne kadar hızlı yazılabileceğini ölçecektir.

  • fio --filename = / mnt / volume-nyc3-04 / fio.test
  • --direct = 1
  • --rw = randwrite
  • --ioengine = libaio
  • --bs = 4K
  • --iodepth = 128
  • --name = rand-w
  • --runtime = 120s

5000 IOPS'lik bir çıktı standart bir Damlacık için beklediğimiz şeydir, 6000 IOPS'den daha büyük bir çıktı ise Yüksek CPU Damlacık için beklediğimiz şeydir.

Latency Testini okuyun

Okuma gecikme testi ile diskteki uygun veri bloklarını bulmak ve bunlara erişmek için gereken süreyi belirleyeceğiz.

  • fio --filename = / mnt / volume-nyc3-04 / fio.test
  • --direct = 1
  • --rw = randread
  • --ioengine = libaio
  • --bs = 4K
  • --iodepth = 1
  • --name = lat-read
  • --runtime = 120s

Bu test için 5ms daha az geri dönen bir çıktı bekliyoruz.

Gecikme Testi yaz

Bu sınama, bir disk yazma isteğinin tamamlanana kadar oluşturulmasından kaynaklanan gecikmeyi ölçer.

  • fio --filename = / mnt / volume-nyc3-04 / fio.test
  • --direct = 1
  • --rw = randwrite
  • --ioengine = libaio
  • --bs = 4K
  • --iodepth = 1
  • --name = Lat-Write
  • --runtime = 120s

Burada ayrıca bu test için 5ms daha az bir çıkış bekliyoruz.

Çıkış İncelemesi

Testinizi gerçekleştirdikten sonra, DigitalOcean Volumes tarafından kaç tane okuma ve yazma işleminin servise sunulduğunu incelemek için elde edilen çıktıyı kontrol edeceksiniz. Her bir testin tamamlanması için ne kadar sürdüğüne dikkat etmek istersiniz.

Aşağıda bir yazma bant genişliği testinden örnek çıktı bulunmaktadır.

  • fio --filename = / mnt / volume-nyc3-04 / test.fio --direct = 1 --rw = randwrite --ioengine = libaio --bs = 1024k --iodepth = 32 - ad = bw - testi - -runtime = 120s

Outputbw-test: (groupid=0, jobs=1): err= 0: pid=2584: Fri Apr 20 17:14:19 2018
write: io=22937MB, bw=195468KB/s, iops=190, runt=120160msec
slat (usec): min=54, max=622, avg=135.46, stdev=23.21
clat (msec): min=7, max=779, avg=167.48, stdev=26.28
lat (msec): min=7, max=779, avg=167.62, stdev=26.28
clat percentiles (msec):
| 1.00th=[ 101], 5.00th=[ 155], 10.00th=[ 159], 20.00th=[ 163],
| 30.00th=[ 165], 40.00th=[ 167], 50.00th=[ 167], 60.00th=[ 167],
| 70.00th=[ 169], 80.00th=[ 169], 90.00th=[ 172], 95.00th=[ 178],
| 99.00th=[ 306], 99.50th=[ 363], 99.90th=[ 420], 99.95th=[ 474],
| 99.99th=[ 545]
bw (KB /s): min=137730, max=254485, per=100.00%, avg=195681.88, stdev=9590.24
lat (msec) : 10=0.01%, 20=0.03%, 50=0.37%, 100=0.58%, 250=97.55%
lat (msec) : 500=1.44%, 750=0.03%, 1000=0.01%
cpu : usr=1.76%, sys=1.83%, ctx=22777, majf=0, minf=11
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=99.9%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, >=64=0.0%
issued : total=r=0/w=22937/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
latency : target=0, window=0, percentile=100.00%, depth=32

Run status group 0 (all jobs):
WRITE: io=22937MB, aggrb=195468KB/s, minb=195468KB/s, maxb=195468KB/s, mint=120160msec, maxt=120160msec

Yukarıdaki çıktının vurguladığı satır, ortalama bant genişliğimizi bw=195468KB/s olarak ve saniyede I / O işlemleri (IOPS) iops=190 olarak iops=190 . Bu özel senaryoda, IOPS düşüktür, çünkü saniyede 190iops * 1M =~ 190MB/sec bir pik hızında 1MB yazma gerçekleştirdik ( 190iops * 1M =~ 190MB/sec ).

Okuma gecikme testi gerçekleştirirken, metriklere aşağıdaki gibi görünen satırlarda ulaşacaksınız:

Outputlat-read: (groupid=0, jobs=1): err= 0: pid=2628: Fri Apr 20 17:32:51 2018
read : io=855740KB, bw=7131.2KB/s, iops=1782, runt=120001msec
slat (usec): min=8, max=434, avg=16.77, stdev= 5.92
clat (usec): min=2, max=450994, avg=539.15, stdev=2188.85
lat (usec): min=53, max=451010, avg=556.61, stdev=2188.91

Yukarıdaki örnekte, G / Ç gecikmesinin 556 usec veya microseconds (veya .5 ms veya milisaniye) olduğunu görebiliriz. Bu, blok hacmine tek bir 4K I / O yapmak için gereken süreyi gösterir.

Gecikme, depolama sisteminin performansı, G / Ç'nin boyutu, kuyruk derinliği ve tetiklenen tüm gaz limitleri gibi çeşitli faktörlerden etkilenir.

Kıyaslama testleriniz tamamlandığında Damlacık ve ses seviyesini silebilirsiniz.

Performans Sonuçlarını Anlama

Not : DigitalOcean Blok Depolama Birimleri, tipik kıyaslamalardan daha yüksek sonuçlarla sonuçlanabilecek ek performans iyileştirme özelliklerine (patlama gibi) sahiptir. Bunun etkisi birkaç saniye sonra daha uzun bir profil çalıştırılarak azaltılabilir.

DigitalOcean Blok Depolama Birimleri SAN tabanlı SSD depolamadır. Bu nedenle, belirli bir birimin performansı, blok boyutu ve kuyruk derinliği ile ölçeklendirilir. Yani, depolama, aynı anda tümünü yapmak için çok fazla iş verildiğinde en iyi sonucu verir.

Aşağıda, paralellik üzerine bir performans örneğini gösteren bir grafik bulunmaktadır. Genişletmek için resme tıklayın.

DigitalOcean performansı maksimum IOPS ve maksimum bant genişliği ile sınırlıdır, hangisi önce gelirse. DigitalOcean'da performans, ses büyüklüğü ile değişmez. Bununla birlikte, IOPS ve bant genişliği belirli oranlarda sınırlandırıldığı için, bir geçiş etkisi vardır. Yani, küçük boyutlu I / O üzerindeki sıra derinliğini artırmak, bunun yerine IOPS sınırına vuracağından 200MB / sn'lik en yüksek bant genişliğine ulaşmaz. Büyük bloklar için, 5000'in en yüksek IOPS'sine, bunun yerine 200MB / sn'lik bant genişliği sınırına ulaşacağından ulaşılamayacak.

Bir kural olarak, bir blok boyutu 32K veya daha büyük olacak şekilde, bir blok boyutu veya 16K veya daha az kullanıldığında, bant genişliği sınırından daha az sonuçlanırken, 200MB / sn'lik bant genişliği sınırına çarpacağı için 5000 IOPS'den daha az sonuçlanır. 200 MB / sn, çünkü 5000 IOPS çarpacaktır.

Pratik bir örnek olarak, IOPS ve bant genişliğini karşılaştıralım.

İlk grafik, bir blok boyutu ve bir uygulama kuyruğu derinliği verilen tipik bant genişliğini göstermektedir. İki farklı blok boyutunu 4K ve 256K olarak kabul edeceğiz.

4K değerlerine baktığımızda 4'ün kuyruk derinliğinde 5000 IOPS'ye ulaştığını görüyoruz, ancak sadece 20MB / sn'lik bir bant genişliğine ulaştığını görüyoruz. Çünkü 5000 IOPS * 4K = 20MB/sec . Bu, 4K iş yükünün hiçbir zaman I / O başlıklı olduğundan 20 MB / sn'yi aşmayacağı anlamına gelir.

256K iş yüküne baktığımızda, 2'nin kuyruk derinliğinde 200MB / sn'ye ulaştığını görüyoruz, ancak 200 IOPS'den daha yüksek bir IOPS oranı görmeyecek çünkü 200MB/sec / 256K = 800 IOPS .

DigitalOcean Blok Depolama Birimleri, 16K-64K'lık tipik dosya sistemi iş yükleri için ayarlanır. Bu blok boyutlarında, IOPS ve bant genişliği arasında iyi bir uyum olduğunu görüyoruz.

Block Size
IOPS
Bandwidth
4K~5000 IOPS~20MB/sec
16K~5000 IOPS~80MB/sec
32K~5000 IOPS~160MB/sec
64K~3200 IOPS~200MB/sec
256K~800 IOPS~200MB/sec

Simüle edilen bir G / Ç iş yükünü kıyaslamadan çıktı aldığınızda, uygulamanızın ihtiyaçlarına göre en iyi kurulumu analiz edebileceksiniz.

Sonuç

Bu kılavuzda, beklenen iş akışlarını simüle etmek için DigitalOcean Damlacıkları ve Blok Depolama Birimlerini kıyaslama işlemlerini nasıl yapacağımızı ele aldık. Karşılaştırma testini iş akışınızın bir parçası olarak kullanmak, uygulamalarınız için uygun bir ölçek tutmanızı ve sorunları ortaya çıkmadan önce tahmin etmenizi sağlayabilir.

DigitalOcean Block Storage ile çalışma hakkında daha fazla bilgi almaya devam etmek için, “DigitalOcean Block Storage Volume'da Şifreli Dosya Sistemi Nasıl Oluşturulur” ve “Doctl Kullanarak DigitalOcean Block Storage ile Nasıl Çalışılır” başlıklı makaleyi okuyabilirsiniz.

Bir önceki yazımız olan Laravel Schemaless Öznitelik Paketi başlıklı makalemizi de okumanızı öneririz.

About This Author

Comments are closed

%d blogcu bunu beğendi: