Dampak tingkat RAID pada IOPS [ditutup]

11

Berkenaan dengan IOPS, saya telah melihat beberapa sumber di web yang menyarankan IOPS dari sejumlah disk tertentu hanyalah IOPS dari satu disk yang dikalikan dengan jumlah disk.

Jika pemahaman saya tentang IOPS benar (dan saya sama sekali tidak yakin itu), saya akan berpikir realitas akan tergantung pada - di antara banyak faktor lain - tingkat RAID. Dengan RAID 1/10, semua data diduplikasi di setidaknya dua disk, mengurangi pertikaian pada disk tertentu untuk beberapa pola IO. Namun, dalam level RAID bergaris seperti RAID 0/5/6, data didistribusikan daripada digandakan, yang berarti permintaan baca berturut-turut bisa untuk spindle yang sama, yang mengarah ke pemblokiran sementara IO sebelumnya selesai. Menulis bahkan lebih diperdebatkan.

Saya harus menambahkan bahwa saya menghargai kenyataan jauh lebih kompleks karena berbagai optimisasi dan faktor lainnya. Pertanyaan saya sebenarnya hanya mengemudi pada apakah, pada tingkat yang sangat dasar, pemahaman saya tentang apa yang dimaksud IOPS berada di jalur yang benar. Bisa jadi pernyataan saya bahwa IOPS bahkan dapat dipengaruhi oleh level RAID sedemikian rupa menunjukkan kesalahpahaman dasar konsep.

dbr
sumber
4
Anda menyederhanakan ini ke titik di mana Anda mengecualikan dampak cache pengontrol RAID, OS, perilaku aplikasi, I / O dan jenis disk yang sinkron atau tidak sinkron. Jadi apa yang Anda cari?
ewwhite
@ewwhite Maaf, saya seharusnya lebih jelas. Saya benar-benar berharap untuk melihat apakah prinsip dasar pemikiran saya benar, daripada membuat prediksi dunia nyata. Saya menghargai bahwa dalam kenyataannya segala sesuatu sangat dipengaruhi oleh segala macam optimisasi dan kompleksitas lainnya. Ada situasi dunia nyata di latar belakang, tetapi seperti yang sering terjadi ketika Anda melihat sesuatu yang Anda tidak terlalu akrab, saya telah memutuskan untuk pergi dan melakukan beberapa pembelajaran latar belakang sehingga saya merasa sedikit lebih nyaman dengan prinsip-prinsip dasar.
dbr
Saya tergoda untuk bertanya apakah ada yang punya rekomendasi tentang pembacaan yang berkualitas baik mengenai teori dan konsep seputar penyimpanan dan kinerjanya, tapi saya tidak melakukannya karena saya pikir itu mungkin dianggap sebagai pertanyaan yang tidak pantas untuk ServerFault. Tampaknya ada sedikit tulisan berkualitas tinggi pada subjek di luar sana di web yang saya temukan sejauh ini - mungkin karena itu adalah subjek yang cukup kompleks yang hanya sedikit orang yang benar-benar mengerti sepenuhnya.
dbr
Kinerja RAID jauh lebih tergantung pada perangkat keras pengontrol dan batasan implementasi daripada level RAID. Misalnya RAID0, RAID1, RAID5 dan RAID6 secara teoritis dapat menggunakan semua disk untuk membaca lama, sehingga mereka dapat memiliki kecepatan baca yang sama persis pada pengontrol yang ideal.
Zac67

Jawaban:

12

Untuk HDD , IOPS umumnya didominasi oleh waktu akses disk, yang merupakan jumlah latensi pencarian + penundaan rotasi + penundaan transfer. Karena variabel-variabel ini sangat bergantung pada pola akses dan memiliki interaksi yang tidak jelas dengan tata letak RAID spesifik (yaitu: ukuran garis) dan pengontrol (yaitu: baca tuning depan), setiap balasan sederhana AKAN SALAH.

Namun, mari kita coba untuk memiliki angka rata-rata. Pada perkiraan pertama, IOPS dijamin oleh array n-disk harus n-kali IOPS dari disk tunggal. Namun, baik tingkat RAID dan pola akses data , dengan menggeser bobot antara latensi pencarian / rotasi / transfer, secara drastis mengubah pendekatan tingkat pertama ini.

Mari kita lakukan beberapa contoh, dengan asumsi 100 IOPS per disk tunggal (nilai tipical untuk 7200 RPM disk) dan array 4-disk (kecuali untuk RAID1, sering dibatasi hanya untuk 2 arah):

  • disk tunggal adalah 100 IOPS, baik membaca dan menulis (catatan: karena menulis penggabungan, menulis IOPS umumnya lebih tinggi daripada membaca IOPS, tetapi mari abaikan itu untuk kesederhanaan)
  • RAID0 (striping 4-arah) memiliki hingga 4x IOPS acak dan hingga 4x IOPS berurutan. Kata kuncinya di sini adalah "hingga": karena sifat striping dan penyelarasan data, jika sektor yang diakses secara acak berada pada satu disk, Anda akan berakhir dengan IOPS yang jauh lebih rendah.
  • RAID1 (mirroring 2 arah) lebih kompleks untuk profil. Karena disk yang berbeda dapat mencari pada data yang berbeda, ia memiliki hingga 2x IOPS pembacaan acak tetapi 1x yang sama (atau sedikit lebih rendah, karena overhead) menulis IOPS acak. Jika semua hal selaras dengan baik (yaitu: besar tetapi tidak 100% berurutan dibaca, pengontrol RAID menggunakan konsep / penanganan potongan / strip bahkan dalam mode mirroring, baca-depan berfungsi dengan benar, dll.) Membaca berurutan kadang - kadang bisa mencapai 2x tunggal. nilai disk, sementara penulisan berurutan tetap dibatasi pada 1x disk tunggal (yaitu: tidak ada speedup)
  • RAID10 (mirroring 4-arah), kinerja-bijaksana, di setengah jalan antara striping RAID0 4-arah dan mirroring 2-arah. Ini memiliki hingga 4x IOPS baca acak dan hingga 2x IOPS tulis acak. Untuk transfer sekuensial, RAID1 peringatan berlaku: kadang-kadang memiliki hingga 4x sekuensial membaca IOPS, tetapi hanya 2x sekuensial menulis IOPS. Harap dicatat bahwa beberapa implementasi RAID10 (yaitu Linux MDRAID) menyediakan tata letak yang berbeda untuk array RAID10, dengan profil kinerja yang berbeda .
  • RAID5 (striped parity) memiliki hingga 4x IOPS baca acak, sedangkan IOPS tulis acak, tergantung pada sejumlah faktor seberapa besar penulisan terkait ukuran stripe, ketersediaan cache strip besar, ketersediaan algoritma stripe, algoritma rekonstruksi stripe itu sendiri (baca-merekonstruksi-tulis vs baca-modifikasi-tulis), dll, bisa di mana saja antara 0,5x (atau lebih rendah) dan 2x IOPS dari satu disk. Beban kerja berurutan lebih mudah diprediksi, dengan 3x IOPS dari satu disk (baik untuk membaca dan menulis)
  • RAID6 (striped double parity) berperilaku seperti saudara RAID5-nya, tetapi dengan kinerja penulisan yang lebih rendah. Ini memiliki hingga 4x IOPS baca acak dari satu disk, tetapi kinerja penulisan acaknya bahkan lebih rendah dari RAID5, dengan nilai absolut yang sama (0,5x - 2x) tetapi dengan rata-rata kata sebenarnya lebih rendah. Membaca dan menulis berurutan dibatasi pada 2X IOPS dari satu disk.

Coba saya ulangi: di atas adalah perkiraan sederhana dan hampir rusak. Bagaimanapun, jika Anda ingin bermain dengan kalkulator RAID IOPS (sangat tidak lengkap), lihat di sini .

Sekarang, kembali ke dunia nyata. Pada beban kerja dunia nyata, RAID10 seringkali merupakan pilihan yang lebih cepat dan disukai , mempertahankan kinerja tinggi bahkan dalam menghadapi array yang rusak . RAID5 dan RAID6 tidak boleh digunakan pada beban kerja yang sensitif terhadap kinerja, kecuali jika sifatnya baca-sentris atau berurutan. Perlu dicatat bahwa pengontrol RAID yang serius memiliki cache writeback terproteksi daya yang besar, terutama untuk mengatasi (dengan caching strip berat) kinerja penulisan acak rendah RAID5 / 6. Jangan pernah gunakan RAID5 / 6 dengan pengontrol RAID tanpa cache , kecuali Anda benar-benar tidak peduli dengan kecepatan array.

SSD adalah binatang yang berbeda, pikir. Karena mereka memiliki waktu akses rata-rata yang jauh lebih rendah secara intrinsik, RAID berbasis paritas menghasilkan overhead kinerja yang jauh lebih rendah dan merupakan opsi yang jauh lebih layak daripada pada HDD. Namun, dalam beban kerja sentris acak-tulis kecil, saya akan menggunakan setup RAID10.

shodanshok
sumber
Jangan pernah gunakan RAID5 / 6 dengan pengontrol RAID tanpa cache, kecuali Anda benar-benar tidak peduli dengan kecepatan array. Anda bisa lolos dengan ini jika Anda benar-benar tahu apa yang Anda lakukan dan memiliki kontrol ketat terhadap pola IO Anda. Jika Anda tidak melakukan apa pun kecuali IO berurutan yang cocok dengan ukuran strip array, Anda bisa menggunakan RAID5 / 6 cache-less. Dan cache tidak dapat menyimpan kinerja jika Anda melakukan cukup acak, operasi tulis blok kecil ke array RAID5 / 6, meskipun nilai "cukup operasi IO" yang membunuh kinerja bisa menjadi angka yang sangat besar untuk pengontrol RAID yang benar-benar baik.
Andrew Henle
@AndrewHenle Tentu, jika hanya mengeluarkan sekuensial membaca / menulis yang bergaris-garis, bahkan pengontrol tanpa roda dalam mode RAD5 / 6 dapat memberi Anda hasil yang baik. Namun ini adalah pola penggunaan yang sangat sempit (yaitu: streaming dan cadangan). Untuk beban kerja tujuan umum, sebuah pengontrol tanpa-cach yang dikombinasikan dengan RAID paritas apa pun akan sangat lambat. Beberapa pengendali bahkan memerlukan cache writeback yang dilindungi powerloss untuk memungkinkan Anda membuat parity RAID.
shodanshok
Saya berpikir lebih banyak tentang admin yang bertanya-tanya mengapa penyimpanan surat perusahaan mereka 21-drive RAID6 array dengan 19-MB-karena-lebih besar-harus-menjadi-lebih cepat ukuran garis lambat ....
Andrew Henle
1

Itu hanya masalah definisi. Anda dapat mengukur IOPS di berbagai level dalam sistem dan Anda akan mendapatkan nilai yang berbeda. Sebagai contoh, misalkan Anda memiliki dua disk mirror dan Anda menulis secepat mungkin. IOPS yang menuju ke disk akan menjadi dua kali lipat jumlah IOPS yang dapat ditangani oleh satu disk dengan beban penulisan yang serupa. Tetapi IOPS yang masuk ke controller akan sama dengan jumlah IOPS yang bisa ditangani oleh satu disk.

Biasanya yang kita pedulikan adalah berapa banyak IOPS logis yang bisa kita masukkan ke dalam array dan kita tidak terlalu peduli dengan apa yang terjadi di level disk. Dalam hal ini, Anda benar dan IOPS tergantung pada tingkat RAID, jumlah disk, kinerja masing-masing disk, dan, dalam beberapa kasus, karakteristik spesifik operasi.

David Schwartz
sumber