"CEPH Benchmark" sayfasının sürümleri arasındaki fark

BulutWiki sitesinden
Şuraya atla: kullan, ara
(Fio Test Betiği)
 
(Aynı kullanıcının aradaki diğer 8 değişikliği gösterilmiyor)
123. satır: 123. satır:
  
 
yazmak yeterli.
 
yazmak yeterli.
 +
 +
==CEPH Test Betikleri==
 +
===Rados Benchmark Betiği===
 +
#!/bin/bash
 +
SANIYE=60
 +
POOL=tank
 +
THREAD=16
 +
for i in 4K  8K 16K 32K 64K 128K 512k 1M 4M
 +
        do
 +
        #Islem yapmadan page cahe drop et!
 +
        echo 3 > /proc/sys/vm/drop_caches
 +
        #Yazilacak birsey varsa sync et!
 +
        sync
 +
        for k in write seq rand
 +
                do
 +
                echo "rados bench -p $POOL $SANIYE  -b $i  -t $THREAD $k  --no-cleanup >  $i.$k.txt"
 +
                rados bench -p $POOL $SANIYE  -b $i  -t $THREAD $k  --no-cleanup >  $i.$k.txt
 +
                done
 +
        done
 +
===Fio Test Betiği===
 +
====Raw Device Test====
 +
#!/bin/bash
 +
RUN_TIME=300
 +
RAMP_TIME=240
 +
IO_DEPTH=32
 +
TEST=write
 +
RBD_DEVICE=/dev/rbd1
 +
for i in 4k 8k 16k 64k 128k 256k 512k 1M 4M
 +
do
 +
 +
/usr/local/bin/fio --filename=$RBD_DEVICE --time_based --invalidate=0 --time_based --direct=1 --iodepth=$IO_DEPTH --ioengine=rbd --rbd
 +
name=data --pool=tank --clientname=admin --rw=$TEST --bs=$i --size=16G --numjobs=48 --runtime=$RUN_TIME --ramp_time=$RAMP_TIME -- group_reporting --name=test --output=ceph.$i.wr.txtxt
 +
done
 +
====Fio rbd Engine ile Test====
 +
[global]
 +
ioengine=rbd
 +
clientname=admin
 +
pool=tank
 +
rbdname=data
 +
invalidate=0    # mandatory
 +
direct=1
 +
#sync=1
 +
size=8G
 +
numjobs=1
 +
rw=write
 +
group_reporting
 +
ramp_time=15
 +
#size'a eriste bile devam et
 +
time_based
 +
#new_group
 +
runtime=90
 +
[rbd_4k]
 +
bs=4k
 +
iodepth=32
 +
stonewall
 +
write_bw_log=4k.bw.wr.txt
 +
write_iops_log=4k.io.wr.txt
 +
write_lat_log=4k.lat.wr.txt
 +
[rbd_64k]
 +
bs=64k
 +
iodepth=32
 +
stonewall
 +
write_bw_log=64k.bw.wr.txt
 +
write_iops_log=64k.io.wr.txt
 +
write_lat_log=64k.lat.wr.txt
 +
[rbd_512k]
 +
bs=512k
 +
iodepth=32
 +
stonewall
 +
write_bw_log=512k.bw.wr.txt
 +
write_iops_log=512k.io.wr.txt
 +
write_lat_log=512k.lat.wr.txt
 +
====Dosya Sistemi Testi====
 +
[global]
 +
ioengine=libaio
 +
ramp_time=5
 +
iodepth=32
 +
untime=90
 +
time_based
 +
direct=1
 +
#elle ekle
 +
size=1G
 +
[4k]
 +
bs=4k
 +
stonewall
 +
#filname Directory olarak degistir
 +
directory=/mnt
 +
rw=write
 +
write_bw_log=4k.bw.wr.txt
 +
write_iops_log=4k.io.wr.txt
 +
write_lat_log=4k.lat.wr.txt

13:59, 18 Haziran 2018 itibarı ile sayfanın şu anki hâli

Fio

Fio Programı Argümanları

Fio kullanılabilecek olan disk bechmark yazılımlarından birisi, ilk olarak hangi argümanlar ile çağrılabileceğine bakalım:

–runtime= Saniye olarak programın ne kadar çalıştırılacağı
–max-jobs=Açılacak maksimum program/iş parçacığı (process/thread) sayısı
–numjobs= Aynı workload üzerinde çalışacak iş sayısı
–ramp_time= Saniye olarak istatistikler alınmaya başlamadan geçmesi gereken süre . Bu süreyi programın tampon bellekleri doldurması veya stabil sonuçlar almak için kullanabilirsiniz. Bu değeri 15  runtime süresini 60  olarak ayarlarsınız program toplam 75 saniye çalışacak 15 saniye sonra istatistikleri yazmaya başlayacaktır.
--directory= Test dosyalarının yaratılacağı dizinin adı
–name= Test dosyasın adı
–bs= blok büyüklüğü (4k, 8k vb)
–size= test için yaratılacak olan dosyanın büyüklüğü, test normalde bu dosya büyüklüne erişilinceye kadar devam eder. runtime ile verilen çalışma süresine erişilir ise dosya büyüklüğü değerine erişilememiş olsa dahi program sonlandırılır.
–time_based= size argümanında tanımlanan dosya boyutuna erişilse bile testler runtime argümanında tanımlanan süre boyunca devam eder
–group_reporting= raporlar grup olarak üretilir. (max_jobs ile tanımlanan her iş için ayrı repor üretilmez)
–ioengine= I/O işlemi nasıl yapılacağını tanımları (sync vb)
–direct= O_DIRECT sistem cağrısı ( non-buffered I/O) ile çekirdek page tablosu (kernel page cache) kullanılmaması
–sync: O_DSYNC çağrılarak I/0 yazma işlemi tamamlandığından emin oluması.
–iodepth= Tek bir dosya üzerinde iş yapan iş parçacıklarının sayısı. Yazma işlemini sync olarak yapan ioengine’ler için arttırmanın bir değer artışına neden olma ihtimali düşük. Async olarak yapan ioengine’ler için arttırılması denenebilir.
–rw= Yapılacak olan I/O’nun çeşidi
   • read = Sıralı okuma
   • write = Sıralı yazma
   • trim = Sıralı trim (linux)
   • randread = rastgele okuma
   • randwrite = rastgele yazma
   • randtrim = rastgele trim
   • rw = rastgele rw
   • randrw = rastgele okuma/yazma
–rwmixread= rastgele yapılacak olan okuma/yazma testlerinde okuma oranı (atanmış değeri 50:50)
–rwmixwrite= rastgele yapılacak olan okuma/yazma testlerinde yazma oranı (atanmış değeri 50:50)
–output= test sonuçlarının yazılacağı dosya adı
–write_bw_log= Benchmark sırasında bantgenişliği değerlerinin yazılacağı dosyanın ismi. Genellikle grafik çizme amaçlı olarak kullanılır.
–write_iops_log= Benchmark sırasında bantgenişliği değerlerinin yazılacağı dosyanın ismi. Genellikle grafik çizme amaçlı olarak kullanılır.
–write_lat_log= I/O Operasyonlarının ne kadar zamanda bitirlildiğinin yazılacağı dosyanın adı.
--cpuload= fio programının işlemci kullanımını verilen değeri maksimum  yüzde kullanacak şekilde ayarlar. (1-100 arası değer alır)

Örnek Kullanım

Test ederken numjobs,iodepth değerlerini 1 olarak başlayıp I/O satüre olacak değlere kadar arttırmanızı tavsiye ederim. Ceph benchmarkları  sırasında 128k blok büyüklüğü için için kullandığım fio komutu. numjobs değeri istemcinin yaratabileceği maksimum I/O miktarı yaratması için 128 olarak ayarlandı. Bu değer muhtamalen 128’e ulaşmadan I/O satüre olacaktur. 1’den başlayarak arttırarak sizin sisteminiz için hangi değerde satüre olacağını deneyebilirsiniz.

/usr/local/bin/fio --directory=/ceph/ --time_based --direct=1 --rw=write --bs=128k --size=20G --numjobs=128 --runtime=240 --group_reporting --name testfile --output=ceph128kw.txt

fio sonuçlarının daha anlamlı olarak görebilmek için  fioparse.sh betiğini kullanıyoruz. Github’tan indirip kurabilirsiniz. 1Gbps uplink’olan sunucudan

fioparse.sh ceph128kw.txt
test  users size         MB       ms      min      max      std    IOPS    50us   1ms   4ms  10ms  20ms  50ms   .1s    1s    2s   2s+ 
  write128 128K w  101.428  157.690    6.000 5374.000  166.140    811,                        1    11    17    12    56     0     0

10Gbps uplink olan sunucudan

test  users size         MB       ms      min      max      std    IOPS    50us   1ms   4ms  10ms  20ms  50ms   .1s    1s    2s   2s+ 
  write128 128K w  121.529  131.200    6.000 2124.000  134.880    972,                        3    27    11     3    53     0     0

Genfio ile İş Dosyası Oluşturma

Benchmark işine başladığınızda  testiniizi farklı okuma örüntüleri  (okuma,yazma, rastgele yazma vb) blok büyüklükleri için tektar etmeniz gerekecektir. fio  Bu iş için tek tek komut yazmak yerine yapılacak testleri bir dosyaya yazıp (job file) daha sonra oradan okumanıza izin veriyor. Çok fazla parametre test edeceksiniz iş dosyasının yazımıda ayrıca bir iş yükü olduğundan bu işi halletmek için genfio betiği kullanıyoruz. Genfio fio kaynak kodlarını github’dan indirdiğinizde tools dizini altında geliyor. İlk olarak genfio betiğinin alabileceği argümanlara bakalım:

-c =  Test ederken tampo bellek kullanını açıyor. Atanmış değeri kapalı.
-a = Testleri sıralı olarak yapıyor. Atanımş değeri kapalı.
-s  = Testleri disk bazında sıralı olarak yapmak için. Atanmış değeri kapalı.
-p = Testleri tüm diskler için birbiri ardında çalışacak şekilde yapmak için. Atanmış değeri açık.
-d = Disk (/dev/sda vb)
-r = Programın koşma süresi
-b = Test blok büyüklüğü
-m = I/O örüntüsü (fio’da -rw ile tanımlananardan birisi, read, write vb)
-x prefix = Yaratılacak iş dosyası için kullanılacak ön ek.
-A = fio işleri çalıştıktan sonra çalıştırılacak sistem komutları. (Örn: Dosya silme)
-B = fio işleri çalıştırılmadan önce çalıştırılacak sistem komutları (Örn: disk mount etme)

Yukarıda elle çalıştırdığımız komut bir iş dosyası oluşturarak genfio ile oluşturmak için:

genfio -m write -b 128k -d /ceph -D 1 -p

Yazamız yereli. Komut sunucunun ismi ile başlayan ve .fio ile biten bir iş dosyası oluşturuyor: fio ile dosyayı çağırmadan önce kırmızı ile işaretli kısımları değiştirip:

[global]
ioengine=libaio 
invalidate=1
ramp_time=5
iodepth=1
runtime=300
time_based
direct=1
[write-ceph-128k-para]
bs=128k
stonewall
filename=/ceph
rw=write
write_bw_log=lufer106-128k-ceph-write-para.results
write_iops_log=lufer106-128k-ceph-write-para.results

Mavi ile işaretli kısımı ekliyoruz

[global]
ioengine=sync
invalidate=1
ramp_time=5
iodepth=1
runtime=300
time_based
direct=1
#elle ekle
size=20G 


programı çalıştırmak için:

fio  <is_dosyasi_adi.fio>

yazmak yeterli.

Fio Sonuçlarının Grafik Haline Getirilmesi

write_bw_log, write_iops_log, write_cal_log komutları ile yazdırdığımız test sonuçlarını  fio2gnuplot yazılımı kullanıyoruz.  Tüm sonuçlar için grafik çizdirmek için:

fio2gnuplot -p "*bw.log*" -g
fio2gnuplot -p "*iops.log*" -g
fio2gnuplot -p "*lat.log*" -g

komutlarını yazmak yeterli. fio2gnuplot komutunu kullanmadan önce gnuplot yazılımın sistemde kurulu olduduğundan emin olun. Grafiklere başlık yazdırmak istiyorsanız -t aldığınız veri setinin bellir bir saniyesinden sonra grafik oluşturulmasını istiyorsanız -m artgümanlarını kullanabilirsiniz.

Rados Bench

Rados bench kurduğunuz ceph cluster’ın okuma ve yazma testlerini gerçekleştirmeniz için ceph ile birlikte gelen araçlardan birisi.  Alacağı argüman listesi:

rados bench -p <pool ismi>  <test süresi saniye > -b <obje büyüklüğü> -t <iş parçacığı adedi>

herhangi bir değer vermez iseniz obje büyüklüğünü 4Mbyte, iş parçası büyüklüğünü 16 olarak kabul ediyor.  Okuma testi yapmak için ilk olarak –no-cleanup argümanı ile yazma testi yapmanız gerekiyor. Tank ismindeki bir pool’da 240 saniye süreli yazma testi yapmak için:

rados bench -p tank 240 write --no-cleanup

yazmak yeterli.

CEPH Test Betikleri

Rados Benchmark Betiği

#!/bin/bash
SANIYE=60
POOL=tank
THREAD=16
for i in 4K  8K 16K 32K 64K 128K 512k 1M 4M
       do
       #Islem yapmadan page cahe drop et!
       echo 3 > /proc/sys/vm/drop_caches
       #Yazilacak birsey varsa sync et!
       sync
       for k in write seq rand
               do
               echo "rados bench -p $POOL $SANIYE  -b $i  -t $THREAD $k   --no-cleanup >  $i.$k.txt"
               rados bench -p $POOL $SANIYE  -b $i  -t $THREAD $k   --no-cleanup >  $i.$k.txt
               done
       done

Fio Test Betiği

Raw Device Test

#!/bin/bash
RUN_TIME=300
RAMP_TIME=240
IO_DEPTH=32
TEST=write
RBD_DEVICE=/dev/rbd1
for i in 4k 8k 16k 64k 128k 256k 512k 1M 4M 
do
/usr/local/bin/fio --filename=$RBD_DEVICE --time_based --invalidate=0 --time_based --direct=1 --iodepth=$IO_DEPTH --ioengine=rbd --rbd
name=data --pool=tank --clientname=admin --rw=$TEST --bs=$i --size=16G --numjobs=48 --runtime=$RUN_TIME --ramp_time=$RAMP_TIME -- group_reporting --name=test --output=ceph.$i.wr.txtxt
done

Fio rbd Engine ile Test

[global]
ioengine=rbd
clientname=admin
pool=tank
rbdname=data
invalidate=0    # mandatory
direct=1
#sync=1
size=8G
numjobs=1
rw=write
group_reporting
ramp_time=15
#size'a eriste bile devam et
time_based
#new_group
runtime=90
[rbd_4k]
bs=4k
iodepth=32
stonewall
write_bw_log=4k.bw.wr.txt
write_iops_log=4k.io.wr.txt
write_lat_log=4k.lat.wr.txt 
[rbd_64k]
bs=64k
iodepth=32
stonewall
write_bw_log=64k.bw.wr.txt
write_iops_log=64k.io.wr.txt
write_lat_log=64k.lat.wr.txt 
[rbd_512k]
bs=512k
iodepth=32
stonewall
write_bw_log=512k.bw.wr.txt
write_iops_log=512k.io.wr.txt
write_lat_log=512k.lat.wr.txt

Dosya Sistemi Testi

[global]
ioengine=libaio
ramp_time=5
iodepth=32

untime=90 time_based direct=1

  1. elle ekle

size=1G

[4k]
bs=4k
stonewall
#filname Directory olarak degistir
directory=/mnt
rw=write
write_bw_log=4k.bw.wr.txt
write_iops_log=4k.io.wr.txt
write_lat_log=4k.lat.wr.txt