Mengapa ZFS di Linux tidak dapat sepenuhnya memanfaatkan 8x SSD pada AWS i2.8xlarge besar?

12

Saya benar-benar baru untuk ZFS, jadi untuk mulai dengan saya pikir saya akan melakukan beberapa tolok ukur sederhana di atasnya untuk merasakan bagaimana perilakunya. Saya ingin mendorong batas kinerjanya jadi saya menyediakan contoh Amazon EC2 i2.8xlarge(hampir $ 7 / jam, waktu benar-benar adalah uang!). Mesin virtual ini memiliki 8 800GB SSD.

Saya melakukan fiotes pada SSD sendiri, dan mendapat output berikut (dipangkas):

$ sudo fio --name randwrite --ioengine=libaio --iodepth=2 --rw=randwrite --bs=4k --size=400G --numjobs=8 --runtime=300 --group_reporting --direct=1 --filename=/dev/xvdb
[trimmed]
  write: io=67178MB, bw=229299KB/s, iops=57324, runt=300004msec
[trimmed]

57K IOPS untuk penulisan acak 4K. Terhormat.

Saya kemudian membuat volume ZFS yang mencakup semua 8. Awalnya saya punya satu raidz1vdev dengan semua 8 SSD di dalamnya, tapi saya membaca tentang alasan ini buruk untuk kinerja, jadi saya berakhir dengan empat mirrorvdev, seperti:

$ sudo zpool create testpool mirror xvdb xvdc mirror xvdd xvde mirror xvdf xvdg mirror xvdh xvdi
$ sudo zpool list -v
NAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
testpool  2.91T   284K  2.91T         -     0%     0%  1.00x  ONLINE  -
  mirror   744G   112K   744G         -     0%     0%
    xvdb      -      -      -         -      -      -
    xvdc      -      -      -         -      -      -
  mirror   744G    60K   744G         -     0%     0%
    xvdd      -      -      -         -      -      -
    xvde      -      -      -         -      -      -
  mirror   744G      0   744G         -     0%     0%
    xvdf      -      -      -         -      -      -
    xvdg      -      -      -         -      -      -
  mirror   744G   112K   744G         -     0%     0%
    xvdh      -      -      -         -      -      -
    xvdi      -      -      -         -      -      -

Saya menetapkan ukuran rekaman ke 4K dan menjalankan pengujian saya:

$ sudo zfs set recordsize=4k testpool
$ sudo fio --name randwrite --ioengine=libaio --iodepth=2 --rw=randwrite --bs=4k --size=400G --numjobs=8 --runtime=300 --group_reporting --filename=/testpool/testfile --fallocate=none
[trimmed]
  write: io=61500MB, bw=209919KB/s, iops=52479, runt=300001msec
    slat (usec): min=13, max=155081, avg=145.24, stdev=901.21
    clat (usec): min=3, max=155089, avg=154.37, stdev=930.54
     lat (usec): min=35, max=155149, avg=300.91, stdev=1333.81
[trimmed]

Saya hanya mendapatkan 52K IOPS di kumpulan ZFS ini. Itu sebenarnya sedikit lebih buruk daripada satu SSD itu sendiri.

Saya tidak mengerti apa yang saya lakukan salah di sini. Sudahkah saya mengkonfigurasi ZFS secara tidak benar, atau ini merupakan tes kinerja ZFS yang buruk?

Catatan Saya menggunakan gambar 64-bit CentOS 7 HVM resmi, meskipun saya telah memutakhirkan ke kernel elrepo 4.4.5:

$ uname -a
Linux ip-172-31-43-196.ec2.internal 4.4.5-1.el7.elrepo.x86_64 #1 SMP Thu Mar 10 11:45:51 EST 2016 x86_64 x86_64 x86_64 GNU/Linux

Saya menginstal ZFS dari repo zfs yang tercantum di sini . Saya memiliki versi 0.6.5.5 dari zfspaket.

UPDATE : Per @ ewwhite's saran saya mencoba ashift=12dan ashift=13:

$ sudo zpool create testpool mirror xvdb xvdc mirror xvdd xvde mirror xvdf xvdg mirror xvdh xvdi -o ashift=12 -f

dan

$ sudo zpool create testpool mirror xvdb xvdc mirror xvdd xvde mirror xvdf xvdg mirror xvdh xvdi -o ashift=13 -f

Tak satu pun dari ini membuat perbedaan. Dari apa yang saya mengerti bit ZFS terbaru cukup pintar mengidentifikasi SSD 4K dan menggunakan default yang masuk akal.

Namun saya perhatikan bahwa penggunaan CPU sangat tinggi. @ Tim menyarankan ini tetapi saya menolaknya tetapi saya pikir saya tidak menonton CPU cukup lama untuk memperhatikan. Ada sekitar 30 core CPU dalam hal ini, dan penggunaan CPU meningkat hingga 80%. Proses lapar? z_wr_iss, banyak contohnya.

Saya mengonfirmasi kompresi mati, jadi ini bukan mesin kompresi.

Saya tidak menggunakan raidz, jadi seharusnya tidak menjadi perhitungan paritas.

Saya melakukan perf topdan itu menunjukkan sebagian besar waktu kernel dihabiskan di _raw_spin_unlock_irqrestoredalam z_wr_int_4dan osq_lockdi z_wr_iss.

Saya sekarang percaya ada komponen CPU untuk bottleneck kinerja ini, meskipun saya tidak lebih dekat untuk mencari tahu apa itu mungkin.

UPDATE 2 : Per @ewwhite dan saran orang lain bahwa itu adalah sifat tervirtualisasi dari lingkungan ini yang menciptakan ketidakpastian kinerja, saya menggunakan fiobenchmark acak 4K yang tersebar di empat SSD di lingkungan. Setiap SSD dengan sendirinya memberikan ~ 55K IOPS, jadi saya berharap sekitar 240K IO di empat dari mereka. Itu kurang lebih yang saya dapatkan:

$ sudo fio --name randwrite --ioengine=libaio --iodepth=8 --rw=randwrite --bs=4k --size=398G --numjobs=8 --runtime=300 --group_reporting --filename=/dev/xvdb:/dev/xvdc:/dev/xvdd:/dev/xvde
randwrite: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=8
...
randwrite: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=8
fio-2.1.5
Starting 8 processes
[trimmed]
  write: io=288550MB, bw=984860KB/s, iops=246215, runt=300017msec
    slat (usec): min=1, max=24609, avg=30.27, stdev=566.55
    clat (usec): min=3, max=2443.8K, avg=227.05, stdev=1834.40
     lat (usec): min=27, max=2443.8K, avg=257.62, stdev=1917.54
[trimmed]

Ini jelas menunjukkan lingkungan, meskipun tervirtualisasi, dapat mempertahankan IOPS jauh lebih tinggi dari apa yang saya lihat. Sesuatu tentang cara ZFS diimplementasikan adalah menjaganya agar tidak mencapai kecepatan tertinggi. Aku hanya tidak tahu apa itu.

anelson
sumber
Anda menggunakan EC2. Anda hanya mendapatkan IOPS sebanyak yang ingin diberikan Amazon kepada Anda.
Michael Hampton
Amazon memberi saya sekitar 52K IOPS per SSD yang terpasang pada instance ini, dan ada delapan SSD yang terpasang. Dari dokumen Amazon jelas contoh ukuran ini adalah satu-satunya contoh berjalan pada host fisik di mana ia berada. Lebih jauh lagi, ini adalah SSD lokal, BUKAN volume EBS, jadi tidak ada beban kerja lain yang bersaing untuk bandwidth IO. Itu tidak memperhitungkan kinerja yang saya lihat.
anelson
Apakah ini membebani CPU atau mencapai batas memori?
Tim
Sudahkah Anda membaca seri artikel ini? hatim.eu/2014/05/24/... Apakah ada artikel lain yang membantu sama sekali?
Tim
1
Hanya untuk mengesampingkan kekurangan implementasi aktual zfsonlinux, saya akan mencoba tes bangku yang sama dengan instalasi Solaris 11 pada contoh yang sama.
the-wabbit

Jawaban:

6

Pengaturan ini mungkin tidak disetel dengan baik. Ada parameter yang diperlukan untuk file /etc/modprobe/zfs.conf dan nilai ashift saat menggunakan SSD

Coba ashift = 12 atau 13 dan tes lagi.


Edit:

Ini masih merupakan solusi tervirtualisasi, jadi kami tidak tahu terlalu banyak tentang perangkat keras yang mendasarinya atau bagaimana semuanya saling berhubungan. Saya tidak tahu bahwa Anda akan mendapatkan kinerja yang lebih baik dari solusi ini.


Edit:

Saya kira saya tidak melihat titik mencoba mengoptimalkan contoh cloud dengan cara ini. Karena jika kinerja puncak adalah tujuannya, Anda akan menggunakan perangkat keras, bukan?

Tapi ingat bahwa ZFS memiliki banyak pengaturan yang bisa diatur, dan apa yang Anda dapatkan secara default tidak mendekati kasus penggunaan Anda.

Coba yang berikut di Anda /etc/modprobe.d/zfs.confdan reboot. Itu yang saya gunakan di kumpulan data SSD untuk server aplikasi. Ashift Anda harus 12 atau 13. Tolok ukur dengan kompresi = mati, tetapi gunakan kompresi = lz4 dalam produksi. Set atime = off. Saya akan meninggalkan recordsize sebagai default (128K).

options zfs zfs_vdev_scrub_min_active=48
options zfs zfs_vdev_scrub_max_active=128
options zfs zfs_vdev_sync_write_min_active=64
options zfs zfs_vdev_sync_write_max_active=128
options zfs zfs_vdev_sync_read_min_active=64
options zfs zfs_vdev_sync_read_max_active=128
options zfs zfs_vdev_async_read_min_active=64
options zfs zfs_vdev_async_read_max_active=128
options zfs zfs_top_maxinflight=320
options zfs zfs_txg_timeout=30
options zfs zfs_dirty_data_max_percent=40
options zfs zfs_vdev_scheduler=deadline
options zfs zfs_vdev_async_write_min_active=8
options zfs zfs_vdev_async_write_max_active=64
options zfs zfs_prefetch_disable=1
putih
sumber
Saran bagus. Saya memperbarui pertanyaan awal saya dengan lebih detail. Rangkuman: ashift tidak membantu, dan saya pikir ada komponen penggunaan CPU untuk masalah ini.
anelson
Apakah Anda menggunakan kompresi atau dedupe?
ewwhite
tidak saya konfirmasi kompresi tidak aktif zfs get compression. Dedupe mati juga.
anelson
Itu poin yang adil tetapi saya dapat menunjukkan perangkat penyimpanan virtual yang mendasari berkinerja lebih baik. Lihat pembaruan 2 di pos.
anelson
@ Alanelson Oke. Coba pengaturan di atas.
ewwhite
2

Sepertinya Anda sedang menunggu di kunci mutex kernel Linux yang pada gilirannya mungkin menunggu di buffer cincin Xen. Saya tidak bisa memastikan ini tanpa akses ke mesin yang serupa, tapi saya tidak tertarik membayar Amazon $ 7 / jam untuk hak istimewa itu.

Tulisan yang lebih panjang ada di sini: https://www.reddit.com/r/zfs/comments/4b4r1y/why_is_zfs_on_linux_unable_to_fully_utilize_8x/d1e91wo ; Saya lebih suka berada di satu tempat daripada dua.

Matthew Barnson
sumber
1

Saya telah menghabiskan banyak waktu untuk mencoba melacaknya. Tantangan spesifik saya: server Postgres dan saya ingin menggunakan ZFS untuk volume datanya. Baseline adalah XFS.

Pertama dan terutama, cobaan saya mengatakan itu ashift=12salah. Jika ada ashiftangka ajaib , bukan 12. Saya menggunakan 0dan saya mendapatkan hasil yang sangat bagus.

Saya juga telah bereksperimen dengan banyak opsi zfs dan yang memberi saya hasil di bawah ini adalah:

atime=off - Saya tidak perlu waktu akses

checksum=off - Saya menelanjangi, tidak mirroring

compression=lz4- Performa lebih baik dengan kompresi (cpu tradeoff?)

exec=off - Ini untuk data, bukan yang dapat dieksekusi

logbias=throughput - Baca di jalinan ini lebih baik untuk Postgres

recordsize=8k - Ukuran blok 8k khusus PG

sync=standard- mencoba mematikan sinkronisasi; tidak melihat banyak manfaat

Tes saya di bawah ini menunjukkan lebih baik daripada kinerja XFS (beri komentar jika Anda melihat kesalahan dalam pengujian saya!).

Dengan ini langkah saya selanjutnya adalah mencoba Postgres yang berjalan pada sistem file 2 x EBS ZFS.

Setup spesifik saya:

EC2: m4.xlargecontoh

EBS: gp2volume 250GB

kernel: Linux [...] 3.13.0-105-generik # 152-Ubuntu SMP [...] x86_64 x86_64 x86_64 GNU / Linux *

Pertama, saya ingin menguji kinerja EBS mentah. Menggunakan variasi dari fioperintah di atas, saya datang dengan mantra di bawah ini. Catatan: Saya menggunakan blok 8k karena itulah yang saya baca tulis PostgreSQL adalah:

ubuntu@ip-172-31-30-233:~$ device=/dev/xvdbd; sudo dd if=/dev/zero of=${device} bs=1M count=100 && sudo fio --name randwrite --ioengine=libaio --iodepth=4 --rw=randwrite --bs=8k --size=400G --numjobs=4 --runtime=60 --group_reporting --fallocate=none --filename=${device}
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.250631 s, 418 MB/s
randwrite: (g=0): rw=randwrite, bs=8K-8K/8K-8K/8K-8K, ioengine=libaio, iodepth=4
...
randwrite: (g=0): rw=randwrite, bs=8K-8K/8K-8K/8K-8K, ioengine=libaio, iodepth=4
fio-2.1.3
Starting 4 processes
Jobs: 4 (f=4): [wwww] [100.0% done] [0KB/13552KB/0KB /s] [0/1694/0 iops] [eta 00m:00s]
randwrite: (groupid=0, jobs=4): err= 0: pid=18109: Tue Feb 14 19:13:53 2017
  write: io=3192.2MB, bw=54184KB/s, iops=6773, runt= 60327msec
    slat (usec): min=2, max=805209, avg=585.73, stdev=6238.19
    clat (usec): min=4, max=805236, avg=1763.29, stdev=10716.41
     lat (usec): min=15, max=805241, avg=2349.30, stdev=12321.43
    clat percentiles (usec):
     |  1.00th=[   15],  5.00th=[   16], 10.00th=[   17], 20.00th=[   19],
     | 30.00th=[   23], 40.00th=[   24], 50.00th=[   25], 60.00th=[   26],
     | 70.00th=[   27], 80.00th=[   29], 90.00th=[   36], 95.00th=[15808],
     | 99.00th=[31872], 99.50th=[35584], 99.90th=[99840], 99.95th=[199680],
     | 99.99th=[399360]
    bw (KB  /s): min=  156, max=1025440, per=26.00%, avg=14088.05, stdev=67584.25
    lat (usec) : 10=0.01%, 20=20.53%, 50=72.20%, 100=0.86%, 250=0.17%
    lat (usec) : 500=0.13%, 750=0.01%, 1000=0.01%
    lat (msec) : 2=0.01%, 4=0.01%, 10=0.59%, 20=2.01%, 50=3.29%
    lat (msec) : 100=0.11%, 250=0.05%, 500=0.02%, 750=0.01%, 1000=0.01%
  cpu          : usr=0.22%, sys=1.34%, ctx=9832, majf=0, minf=114
  IO depths    : 1=0.1%, 2=0.1%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=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.0%, 64=0.0%, >=64=0.0%
     issued    : total=r=0/w=408595/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
  WRITE: io=3192.2MB, aggrb=54184KB/s, minb=54184KB/s, maxb=54184KB/s, mint=60327msec, maxt=60327msec

Disk stats (read/write):
  xvdbd: ios=170/187241, merge=0/190688, ticks=180/8586692, in_queue=8590296, util=99.51%

Kinerja mentah untuk volume EBS adalah WRITE: io=3192.2MB.

Sekarang, menguji XFS dengan fioperintah yang sama :

Jobs: 4 (f=4): [wwww] [100.0% done] [0KB/0KB/0KB /s] [0/0/0 iops] [eta 00m:00s]
randwrite: (groupid=0, jobs=4): err= 0: pid=17441: Tue Feb 14 19:10:27 2017
  write: io=3181.9MB, bw=54282KB/s, iops=6785, runt= 60024msec
    slat (usec): min=3, max=21077K, avg=587.19, stdev=76081.88
    clat (usec): min=4, max=21077K, avg=1768.72, stdev=131857.04
     lat (usec): min=23, max=21077K, avg=2356.23, stdev=152444.62
    clat percentiles (usec):
     |  1.00th=[   29],  5.00th=[   40], 10.00th=[   46], 20.00th=[   52],
     | 30.00th=[   56], 40.00th=[   59], 50.00th=[   63], 60.00th=[   69],
     | 70.00th=[   79], 80.00th=[   99], 90.00th=[  137], 95.00th=[  274],
     | 99.00th=[17024], 99.50th=[25472], 99.90th=[70144], 99.95th=[120320],
     | 99.99th=[1564672]
    bw (KB  /s): min=    2, max=239872, per=66.72%, avg=36217.04, stdev=51480.84
    lat (usec) : 10=0.01%, 20=0.03%, 50=15.58%, 100=64.51%, 250=14.55%
    lat (usec) : 500=1.36%, 750=0.33%, 1000=0.25%
    lat (msec) : 2=0.68%, 4=0.67%, 10=0.71%, 20=0.58%, 50=0.59%
    lat (msec) : 100=0.10%, 250=0.02%, 500=0.01%, 750=0.01%, 1000=0.01%
    lat (msec) : 2000=0.01%, >=2000=0.01%
  cpu          : usr=0.43%, sys=4.81%, ctx=269518, majf=0, minf=110
  IO depths    : 1=0.1%, 2=0.1%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=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.0%, 64=0.0%, >=64=0.0%
     issued    : total=r=0/w=407278/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
  WRITE: io=3181.9MB, aggrb=54282KB/s, minb=54282KB/s, maxb=54282KB/s, mint=60024msec, maxt=60024msec

Disk stats (read/write):
  xvdbd: ios=4/50983, merge=0/319694, ticks=0/2067760, in_queue=2069888, util=26.21%

Garis dasar kami adalah WRITE: io=3181.9MB; sangat dekat dengan kecepatan disk mentah.

Sekarang, ke ZFS dengan WRITE: io=3181.9MBsebagai referensi:

ubuntu@ip-172-31-30-233:~$ sudo zpool create testpool xvdbd -f && (for option in atime=off checksum=off compression=lz4 exec=off logbias=throughput recordsize=8k sync=standard; do sudo zfs set $option testpool; done;) && sudo fio --name randwrite --ioengine=libaio --iodepth=4 --rw=randwrite --bs=8k --size=400G --numjobs=4 --runtime=60 --group_reporting --fallocate=none --filename=/testpool/testfile; sudo zpool destroy testpool
randwrite: (g=0): rw=randwrite, bs=8K-8K/8K-8K/8K-8K, ioengine=libaio, iodepth=4
...
randwrite: (g=0): rw=randwrite, bs=8K-8K/8K-8K/8K-8K, ioengine=libaio, iodepth=4
fio-2.1.3
Starting 4 processes
randwrite: Laying out IO file(s) (1 file(s) / 409600MB)
randwrite: Laying out IO file(s) (1 file(s) / 409600MB)
randwrite: Laying out IO file(s) (1 file(s) / 409600MB)
randwrite: Laying out IO file(s) (1 file(s) / 409600MB)
Jobs: 4 (f=4): [wwww] [100.0% done] [0KB/41328KB/0KB /s] [0/5166/0 iops] [eta 00m:00s]
randwrite: (groupid=0, jobs=4): err= 0: pid=18923: Tue Feb 14 19:17:18 2017
  write: io=4191.7MB, bw=71536KB/s, iops=8941, runt= 60001msec
    slat (usec): min=10, max=1399.9K, avg=442.26, stdev=4482.85
    clat (usec): min=2, max=1400.4K, avg=1343.38, stdev=7805.37
     lat (usec): min=56, max=1400.4K, avg=1786.61, stdev=9044.27
    clat percentiles (usec):
     |  1.00th=[   62],  5.00th=[   75], 10.00th=[   87], 20.00th=[  108],
     | 30.00th=[  122], 40.00th=[  167], 50.00th=[  620], 60.00th=[ 1176],
     | 70.00th=[ 1496], 80.00th=[ 2320], 90.00th=[ 2992], 95.00th=[ 4128],
     | 99.00th=[ 6816], 99.50th=[ 9536], 99.90th=[30592], 99.95th=[66048],
     | 99.99th=[185344]
    bw (KB  /s): min= 2332, max=82848, per=25.46%, avg=18211.64, stdev=15010.61
    lat (usec) : 4=0.01%, 50=0.09%, 100=14.60%, 250=26.77%, 500=5.96%
    lat (usec) : 750=5.27%, 1000=4.24%
    lat (msec) : 2=20.96%, 4=16.74%, 10=4.93%, 20=0.30%, 50=0.08%
    lat (msec) : 100=0.04%, 250=0.03%, 500=0.01%, 2000=0.01%
  cpu          : usr=0.61%, sys=9.48%, ctx=177901, majf=0, minf=107
  IO depths    : 1=0.1%, 2=0.1%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=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.0%, 64=0.0%, >=64=0.0%
     issued    : total=r=0/w=536527/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
  WRITE: io=4191.7MB, aggrb=71535KB/s, minb=71535KB/s, maxb=71535KB/s, mint=60001msec, maxt=60001msec

Perhatikan, ini dilakukan lebih baik daripada XFS WRITE: io=4191.7MB. Saya cukup yakin ini karena kompresi.

Untuk tendangan, saya akan menambahkan volume kedua:

ubuntu@ip-172-31-30-233:~$ sudo zpool create testpool xvdb{c,d} -f && (for option in atime=off checksum=off compression=lz4 exec=off logbias=throughput recordsize=8k sync=standard; do sudo zfs set $option testpool; done;) && sudo fio --name randwrite --ioengine=libaio --iodepth=4 --rw=randwrite --bs=8k --size=400G --numjobs=4 --runtime=60 --group_reporting --fallocate=none --filename=/testpool/testfile; sudo zpool destroy testpool
randwrite: (g=0): rw=randwrite, bs=8K-8K/8K-8K/8K-8K, ioengine=libaio, iodepth=4
...
randwrite: (g=0): rw=randwrite, bs=8K-8K/8K-8K/8K-8K, ioengine=libaio, iodepth=4
fio-2.1.3
Starting 4 processes
randwrite: Laying out IO file(s) (1 file(s) / 409600MB)
randwrite: Laying out IO file(s) (1 file(s) / 409600MB)
randwrite: Laying out IO file(s) (1 file(s) / 409600MB)
randwrite: Laying out IO file(s) (1 file(s) / 409600MB)
Jobs: 4 (f=4): [wwww] [100.0% done] [0KB/71936KB/0KB /s] [0/8992/0 iops] [eta 00m:00s]
randwrite: (groupid=0, jobs=4): err= 0: pid=20901: Tue Feb 14 19:23:30 2017
  write: io=5975.9MB, bw=101983KB/s, iops=12747, runt= 60003msec
    slat (usec): min=10, max=1831.2K, avg=308.61, stdev=4419.95
    clat (usec): min=3, max=1831.6K, avg=942.64, stdev=7696.18
     lat (usec): min=58, max=1831.8K, avg=1252.25, stdev=8896.67
    clat percentiles (usec):
     |  1.00th=[   70],  5.00th=[   92], 10.00th=[  106], 20.00th=[  129],
     | 30.00th=[  386], 40.00th=[  490], 50.00th=[  692], 60.00th=[  796],
     | 70.00th=[  932], 80.00th=[ 1160], 90.00th=[ 1624], 95.00th=[ 2256],
     | 99.00th=[ 5344], 99.50th=[ 8512], 99.90th=[30592], 99.95th=[60672],
     | 99.99th=[117248]
    bw (KB  /s): min=   52, max=112576, per=25.61%, avg=26116.98, stdev=15313.32
    lat (usec) : 4=0.01%, 10=0.01%, 50=0.04%, 100=7.17%, 250=19.04%
    lat (usec) : 500=14.36%, 750=15.36%, 1000=17.41%
    lat (msec) : 2=20.28%, 4=4.82%, 10=1.13%, 20=0.25%, 50=0.08%
    lat (msec) : 100=0.04%, 250=0.02%, 2000=0.01%
  cpu          : usr=1.05%, sys=15.14%, ctx=396649, majf=0, minf=103
  IO depths    : 1=0.1%, 2=0.1%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=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.0%, 64=0.0%, >=64=0.0%
     issued    : total=r=0/w=764909/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
  WRITE: io=5975.9MB, aggrb=101982KB/s, minb=101982KB/s, maxb=101982KB/s, mint=60003msec, maxt=60003msec

Dengan volume kedua WRITE: io=5975.9MB,, jadi ~ 1.8X tulisan.

Volume ketiga memberi kita WRITE: io=6667.5MB, jadi ~ 2.1X menulis.

Dan volume keempat memberi kita WRITE: io=6552.9MB. Untuk tipe instance ini, sepertinya saya hampir membatasi jaringan EBS dengan dua volume, pasti dengan tiga dan tidak lebih baik dengan 4 (750 * 3 = 2250 IOPS).

* Dari video ini pastikan Anda menggunakan kernel Linux 3.8+ untuk mendapatkan semua kebaikan EBS.

berto
sumber
Hasil yang menarik. Catatan saya pikir Anda sudah bingungWRITE: io= ; itu bukan kecepatan, itu jumlah data yang ditulis pada waktu itu. Terkait dengan kecepatan hanya untuk tes yang memiliki runtime yang tetap, tetapi untuk konsistensi dengan tolok ukur lain, lebih baik fokus pada IOPS iops=,. Dalam kasus Anda, hasilnya serupa. Anda mungkin bisa menjadi jauh lebih baik jika Anda menggunakan volume EBS IOPS yang disediakan dan contoh yang lebih besar. Lihat halaman ini untuk perkiraan tutup EBS berdasarkan ukuran contoh. Hanya berhati-hatilah, biaya EBS bertambah dengan cepat jika Anda tidak hati-hati!
anelson
Umpan balik yang bagus, terima kasih @anelson! melihat iops yang disediakan dan mereka sangat mahal. Namun, saya sedang mempertimbangkan untuk membuat volume iops kecil yang disediakan untuk volume log di mana ZIL ditulis dan mencapai beberapa manfaat kinerja. Di suatu tempat saya membaca ZIL tidak tumbuh lebih besar dari apa yang ada di memori dan saya memilikinya terbatas pada 2G /etc/modules.d/zfs.conf. Pertanyaan selanjutnya adalah berapa jumlah yang tepat dari iops untuk contoh pemberian ec2. Melihat halaman yang Anda referensi itu masih sulit, dan saya tidak melihat kinerja sebagus kondisi dokumen.
berto