Mengapa IOPS penting?

32

Saya mengerti apa itu IOPS dan throughput. Throughput mengukur aliran data ketika MB / s dan IOPS mengatakan berapa banyak operasi I / O yang terjadi per detik.

Yang tidak saya mengerti adalah mengapa banyak layanan penyimpanan hanya menunjukkan IOPS yang mereka sediakan. Saya benar-benar tidak dapat melihat skenario di mana saya lebih suka mengetahui IOPS daripada throughput.

Mengapa IOPS penting? Mengapa AWS terutama menunjukkan ketentuan penyimpanannya di IOPS? Di mana IOPS lebih relevan daripada throughput (MB / s)?


EDIT:

Beberapa orang melihat pertanyaan ini seolah-olah saya bertanya apa itu akses acak dan bagaimana pengaruhnya terhadap kinerja atau bagaimana HDD dan SSD bekerja ... walaupun saya pikir informasi ini berguna bagi orang yang baru mengenal perilaku penyimpanan, banyak fokus sedang diterapkan untuk ini dan itu bukan tujuan dari pertanyaan, pertanyaannya adalah tentang "Informasi baru apa yang saya dapatkan ketika saya melihat nomor IOPS, yang saya tidak akan melihat nomor throughput (MB / s)?"

mFeinstein
sumber
3
Jika Anda ingin memindahkan data besar, Anda peduli tentang throughput. Jika Anda perlu r / w banyak data kecil Anda membutuhkan lebih banyak IOPS. eg1 Jika ada satu operasi yang dapat membaca MB data dari perangkat maka Anda hanya perlu 1 operasi untuk mendapatkan throughput yang tinggi. eg2 Jika Anda perlu membaca lusinan atribut file Anda tidak melihat sejumlah besar data setiap kali tetapi perlu melakukan banyak operasi untuk mengambil bit kecil data. Throughput akan rendah tetapi Anda akan membutuhkan banyak operasi.
TafT

Jawaban:

32

Throughput

Throughput berguna ketika Anda melakukan hal-hal seperti menyalin file. Ketika Anda melakukan hampir semua hal lain, itu acak membaca dan menulis di disk yang akan membatasi Anda.

IOPS

IOPS biasanya menentukan ukuran setiap paket data. Misalnya, AWS gp2 dapat melakukan 10.000 IOPS dengan ukuran muatan 16 KiB . Itu mengalikan 160MiB / detik. Namun, kemungkinan besar Anda tidak akan menggunakan ukuran muatan penuh sepanjang waktu, sehingga hasil aktual mungkin akan lebih rendah. NB KiB adalah 1024 byte, KB adalah 1000 byte.

Karena IOPS menentukan ukuran paket yang memberikan total throughput juga. Sedangkan throughput yang tinggi tidak berarti Anda memiliki IOPS yang tinggi.

Skenario

Pertimbangkan skenario ini:

  • Booting PC Anda. Pertimbangkan perbedaan antara SSD dan disk yang berputar di komputer Anda, yang merupakan sesuatu yang dialami banyak orang. Dengan disk yang berputar, waktu booting bisa satu menit, sedangkan dengan SSD ini bisa turun menjadi 10 - 15 detik. Ini karena IOPS yang lebih tinggi mengarah ke latensi yang lebih rendah ketika informasi diminta. Throughput disk pemintalan cukup bagus, 150MB / detik, meskipun SSD kemungkinan lebih tinggi, ini bukan alasan mengapa lebih cepat - ini adalah latensi yang lebih rendah untuk mengembalikan informasi.
  • Menjalankan pembaruan OS. Ini terjadi di seluruh disk, menambah dan menambal file. Jika Anda memiliki IOPS rendah itu akan lambat, terlepas dari throughput.
  • Menjalankan database, misalnya memilih sejumlah kecil data dari database besar. Ini akan membaca dari indeks, membaca dari sejumlah file, kemudian mengembalikan hasilnya. Sekali lagi itu akan ke seluruh disk untuk mengumpulkan informasi.
  • Memainkan game di PC Anda. Kemungkinan memuat banyak tekstur dari seluruh disk. Dalam hal ini IOPS dan throughput mungkin diperlukan.

Tape KPP

Pertimbangkan sejenak sistem cadangan kaset. LTO6 dapat melakukan 400MB / detik, tapi (saya kira di sini) mungkin bahkan tidak bisa melakukan satu TIO acak, bisa serendah detik per TIO. Di sisi lain itu mungkin dapat melakukan banyak IOPS berurutan, jika IOPS didefinisikan sebagai membaca atau menulis paket data untuk direkam.

Jika Anda mencoba untuk mem-boot OS dari tape itu akan memakan waktu lama, jika berhasil sama sekali. Inilah sebabnya mengapa IOPS seringkali lebih bermanfaat daripada throughput.

Untuk memahami perangkat penyimpanan Anda mungkin ingin tahu apakah itu IOPS acak atau berurutan, dan ukuran IO. Dari sana Anda dapat memperoleh throughput.

AWS

Perhatikan bahwa AWS menerbitkan angka IOPS dan throughput untuk semua jenis penyimpanannya, di halaman ini . SSD tujuan umum (gp2) dapat melakukan 10.000 16KiB IOPS, yang memberikan maksimum 160MB / detik. IOPS yang disediakan (io1) adalah 20.000 16KiB IOPS, yang memberikan maksimum 320MB / detik.

Perhatikan bahwa dengan volume gp2 Anda mendapatkan 30IOPS per GB yang disediakan, jadi untuk mendapatkan 10.000 IOPS Anda membutuhkan volume 333,33 GB. Saya tidak ingat apakah io1 volume memiliki batasan yang sama (sudah lama sejak saya melakukan ujian asosiasi di mana hal semacam itu diuji), tapi saya curiga mereka melakukannya, dan jika demikian mungkin 60IOPS per GB.

Kesimpulan

Throughput berurutan tinggi berguna, dan dalam beberapa kasus merupakan faktor pembatas kinerja, tetapi IOPS tinggi cenderung lebih penting dalam kebanyakan kasus. Anda tentu saja masih membutuhkan throughput yang masuk akal terlepas dari IOPS.

Tim
sumber
Saya mendapatkan bahwa IOPS mengukur kinerja akses acak, tetapi itu tidak benar-benar menunjukkan seberapa cepat Anda melakukan sesuatu ... Anda mungkin melakukan 10.000 IOPS, tetapi ini bisa menjadi sesuatu yang lambat atau cepat, satu-satunya cara untuk mengetahui adalah mengetahui berapa banyak MB / s operasi sedang memakan.
mFeinstein
IOPS biasanya menentukan ukuran muatan data. AWS mengatakan 16KiB. Jadi 10.000 IOPS pada 16KiB / s memberi Anda 160MB / detik.
Tim
2
10000 IOPS pada 16KB tidak akan diterjemahkan menjadi 20000 IOPS pada 8KB, meskipun (mungkin ~ 11000). Ini berarti seseorang perlu mengetahui IOPS dan throughput untuk menilai drive / beban kerja.
boot4life
4
Hanya untuk menjadi sombong, itu masih 1 IOPS, bukan 1 IOP. Ini bukan jamak
Matthew Steeples
1
Saya tidak bisa memikirkan yang lain. Sebagian besar hal yang IOPS tinggi adalah throughput yang cukup tinggi, tetapi dalam banyak kasus berguna karena IOPS bukan throughput. Contoh lain bisa menjadi basis data relasional, meskipun itu bukan perangkat penyimpanan itu perangkat lunak. Saya tidak yakin apa lagi yang Anda inginkan dari pertanyaan ini, saya pikir konsepnya telah dijelaskan secara menyeluruh kepada Anda. Apa pun dengan waktu pencarian tinggi atau latensi mungkin memiliki IOPS rendah, tetapi throughput dapat dipisahkan dan menjadi tinggi dalam beberapa kasus.
Tim
57

Ini karena throughput berurutan bukanlah bagaimana sebagian besar aktivitas I / O terjadi.

Operasi baca / tulis acak lebih mewakili aktivitas sistem normal, dan itu biasanya terikat oleh IOPS.

Streaming porno dari salah satu server saya ke pelanggan kami (atau mengunggah ke CDN kami) lebih berurutan dan Anda akan melihat dampak throughput di sana.

Tetapi mempertahankan database yang mengkatalogkan pornografi dan melacak aktivitas pengguna melalui situs ini akan bersifat acak, dan dibatasi oleh jumlah operasi I / O kecil / detik yang mampu dilakukan oleh penyimpanan yang mendasarinya.

Saya mungkin membutuhkan 2.000 IOPS untuk dapat menjalankan database pada penggunaan puncak, tetapi hanya dapat melihat throughput 30MB / s pada tingkat disk karena jenis aktivitas. Disk mampu 1.200MB / s, tetapi IOPS adalah batasan di lingkungan.

Ini adalah cara untuk menggambarkan potensi kapasitas sistem penyimpanan. SSD dapat memiliki kemampuan untuk melakukan 80.000 IOPS dan 600MB / s throughput. Anda bisa mendapatkan throughput itu dengan 6 disk SAS 10rb biasa, tetapi hanya akan menghasilkan sekitar 2.000 IOPS.

putih
sumber
Bisakah Anda memberi saya contoh di mana IOPS akan memberi saya wawasan tentang kinerja sistem saya di mana MB / s tidak akan berguna?
mFeinstein
@mFeinstein Lihat contoh porno di atas.
ewwhite
33
+1 untuk contoh porno lol
mFeinstein
2
Juga, sistem operasi kemungkinan melakukan banyak akses acak kecil. Throughput seq tidak akan membantu. Itulah alasan untuk menjalankan OS pada SSD, setidaknya di PC.
sudo
3
Saya sering melihat disk yang digunakan sepenuhnya ~ 2MB / detik. Itu karena 100% IO acak. Terkadang, keuntungan perf yang luar biasa mungkin dengan meletakkan data secara berurutan pada disk (misalnya menghapus fragmentasi, mengindeks dalam database).
boot4life
6

Sementara jawaban ewwhite sepenuhnya benar, saya ingin memberikan angka yang lebih konkret hanya untuk membantu menjelaskan mengapa perbedaan itu penting dalam perspektif.

Seperti ewwhite telah dinyatakan dengan benar, sebagian besar aplikasi non-streaming terutama melakukan operasi disk non-sekuensial, itulah sebabnya IOPS penting di samping throughput puncak teoritis.

Ketika seorang rekan kerja dan saya pertama kali menginstal SSD di sistem pengembangan kami untuk menggantikan HDD yang sebelumnya kami gunakan, kami menjalankan beberapa pengukuran kinerja pada mereka yang benar-benar menyoroti mengapa ini penting:

Hasil SATA HDD:

Sequential Read Throughput: ~ 100 MB / s
Non-Sequential Readput (2k blok, IIRC): ~ 1 MB / s

Hasil SSD yang dilampirkan PCIe:

Sequential Read Throughput: ~ 700 MB / s
Non-sequential Read Throughput (blok 2k, IIRC): ~ 125 MB / s

Seperti yang dapat Anda lihat dengan jelas dari contoh, hanya daftar throughput maks untuk setiap perangkat akan memberikan gambaran yang sangat tidak akurat tentang bagaimana mereka membandingkan. SSD hanya sekitar 6-7x secepat HDD ketika membaca file besar secara berurutan, tetapi lebih dari 100x lebih cepat saat membaca potongan kecil data dari berbagai bagian disk. Tentu saja, dengan HDD, batasan ini sebagian besar disebabkan oleh fakta bahwa HDD harus secara fisik memindahkan kepala r / w ke trek yang diinginkan dan kemudian menunggu data yang diinginkan berputar di bawah kepala, sementara SSD tidak memiliki bagian fisik untuk bergerak.

Waktu kompilasi kami meningkat jauh lebih dramatis daripada yang disarankan oleh perbandingan sederhana dari throughput maksimum. Bangunan yang sebelumnya memakan waktu lebih dari 30 menit sekarang selesai dalam waktu sekitar satu menit, karena cakram I / O selama pembuatan besar terdiri dari membaca dan menulis banyak file sumber terpisah yang tidak secara individual sangat besar dan dapat tersebar secara fisik di seluruh disk .

Dengan memberikan nomor throughput dan IOPS, Anda bisa mendapatkan ide yang jauh lebih baik tentang bagaimana beban kerja yang diberikan akan tampil pada perangkat penyimpanan yang diberikan. Jika Anda hanya mengalirkan data dalam jumlah besar yang tidak terfragmentasi, Anda akan mendapatkan hasil yang mendekati maksimum. Namun, jika Anda melakukan banyak pembacaan kecil dan / atau penulisan yang tidak disimpan secara berurutan pada disk, Anda akan dibatasi oleh IOPS.

reirab
sumber
Bukankah Anda sudah mengukur IOPS juga?
mFeinstein
3

Untuk melakukan operasi IO, drive harus melalui serangkaian operasi. Untuk hard drive mekanis, mereka perlu melakukannya.

  1. Cari trek yang benar dan pilih kepala kanan.
  2. Tunggu piring berputar ke posisi yang tepat.
  3. Sebenarnya mentransfer data.

Waktu yang diambil untuk 3 tergantung pada ukuran blok data, tetapi waktu yang diambil untuk 1 dan 2 tidak tergantung dari ukuran permintaan.

Throughput headline dan angka-angka IOP mewakili kasus-kasus ekstrim. Angka throghput informasi utama mewakili kasus di mana setiap operasi melibatkan blok data yang besar, sehingga drive menghabiskan sebagian besar waktunya untuk memindahkan data.

Angka IOP headline mewakili kasus di mana blok data sangat kecil sehingga sebagian besar waktu dihabiskan mencari kepala dan menunggu piring berputar.

Untuk banyak beban kerja, blok cukup kecil sehingga jumlah blok yang akan ditransfer jauh lebih penting daripada ukuran blok.

Peter Green
sumber
2

Ada dua jenis bottleneck yang bisa Anda alami pada volume IO (atau IO secara umum sebenarnya).

Kinerja aktual memang diukur untuk memasukkan komponen berdasarkan volume data yang dipindahkan, diskalakan oleh bandwidth yang tersedia atau serupa, ukuran unitcost *, tetapi ada juga overhead yang terkait dengan permintaan, yaitu konstan, baik itu disk, jaringan, atau banyak hal lainnya.

unitcost * ukuran + overhead. persamaan garis.

Jika unitcost besar, atau ukurannya besar, maka masuk akal untuk mengisi daya berdasarkan volume ini, seperti jaringan telepon seluler, di sisi lain kadang-kadang biaya overhead jauh lebih kritis.

Anda dapat melakukan percobaan sederhana ini sendiri, membuat direktori dengan beberapa file 1GB (atau apa pun yang praktis, sesuatu yang cukup besar diperlukan beberapa detik untuk membaca / menulisnya), dan kemudian membuat folder dengan sejuta file 100 byte (perhatikan, itu adalah 0,1GB data), dan kemudian lihat apa yang terjadi pada throughput Anda ketika Anda mulai mencoba untuk memindahkan semua hal ini mengatakan di antara partisi / disk yang berbeda - Anda akan mendapatkan kinerja yang diperberat oleh throughput untuk file besar, dan dicekik oleh jumlah file untuk barang yang lebih kecil.

Saya akan berasumsi amazon mengetahui kedua model pengisian daya dan hanya menemukan satu yang lebih baik mewakili kemampuan infrastruktur mereka.

Ada batasan pada ukuran IOP yang secara luas terkait dengan jumlah toko yang dapat ditransfer dalam "siklus", jadi permintaan besar masih berakhir dengan biaya beberapa IOPS.

Ada bagian yang bagus di sini dari amazon sendiri tentang IOPS dan penetapan biaya, dan 'penghematan' yang mereka sampaikan melalui optimisasi

Karakteristik dan Pemantauan I / O

Tidak membaca semuanya tetapi terlihat menarik, jika Anda penasaran dengan bidang ini.

Iain Price
sumber
2

Menjawab pertanyaan Anda

"Informasi baru apa yang saya dapatkan ketika saya melihat nomor IOPS, yang tidak akan saya lihat nomor throughput (MB / s)?"

secara langsung, ini adalah berapa banyak operasi IO kedalaman antrian yang ditentukan dan ukuran file yang dapat dilakukan penyimpanan per detik . Anda dapat menghitung throughput pada kondisi tertentu menggunakan rumus berikut:

IOPS * ukuran file = Throughput

Tes penyimpanan dapat menghasilkan jumlah IOPS yang berbeda tergantung pada ukuran file dan kedalaman antrian. Pada kedalaman antrian = 1 atau 2, pengontrol tidak akan mengambil keuntungan dari caching, sedangkan pada kedalaman antrian 32, 256, 512 nomor naik beberapa kali dan tidak banyak berubah. Pada ukuran file 128KB, hitungan IOPS bisa lebih rendah di sebelah file 4KB, tetapi throughtput - lebih tinggi.

Cara terbaik untuk mengevaluasi kinerja penyimpanan adalah dengan mencari tes IOPS dan throughput pada berbagai ukuran blok dan kedalaman antrian.

Eugene
sumber
Saya percaya Anda mungkin membingungkan IOPS dengan throughput sedikit ... Throughput bukan sinonim dari akses kontinu, tetapi total MB / s penyimpanan dapat diproses pada waktu tertentu .... Jadi ketika Anda mengatakan HDD dan SSD akan memiliki throughput yang sama, itu untuk akses terus menerus ... Karena ada throughput untuk akses acak juga ... Hanya sedikit lebih sedikit untuk HDD secara umum karena waktu pencarian.
mFeinstein
Jadi, Anda harus memasukkan dalam jawaban Anda bahwa Anda merujuk pada akses berkelanjutan di awal dan akses acak di akhir, karena IOPS juga tidak identik dengan akses acak ... Hanya ketika lebih masuk akal untuk menggunakan IOPS sebagai pengukuran
mFeinstein
@ mFeinstein Saya sudah mengedit jawabannya, lihat.
Eugene
1

Secara umum, IOPS lebih sulit didapat daripada throughput. Jika Anda memiliki banyak IOPS, Anda akan memiliki cukup throughput sebagian besar waktu.

Dengan hard drive klasik, jumlah sumbu adalah faktor pembatas Anda, karena head harus dipindahkan secara fisik pada setiap drive: dan sangat lambat. SSD memiliki kapasitas IOPS yang jauh lebih baik.

Jika Anda hanya memiliki satu pengguna, menyalin satu file besar ke jaringan, Anda mungkin hanya memiliki selusin upaya untuk mendapatkan data, dan sisanya hanya akan mengalir dari disk.

Namun, jika Anda menggunakan basis data, atau memiliki banyak pengguna secara bersamaan, Anda harus mengakses berbagai bagian penyimpanan Anda secara bersamaan, dengan IOPS yang meroket.

Hanya memperbarui 10 baris secara paralel pada basis data relasional mungkin berakhir dalam menghasilkan ratusan IO: membaca indeks, membaca data, menambahkan file log, memperbarui indeks dan data. Sebagian besar sistem operasi dan basis data berusaha sangat keras untuk membatasi jumlah IO dengan melakukan caching dan menunda / mengelompokkan IO jika memungkinkan.

Xavier Nicollet
sumber
1

Saya akan menjawab pertanyaan saya sendiri juga karena saya pikir sebagian besar jawaban pergi jauh dari topik dan jawabannya bisa jauh lebih sederhana:

Jika Anda melihat throughput perangkat penyimpanan Anda saja, Anda mungkin kehilangan apa yang terjadi ... Jika ada throughput rendah (MB / s rendah) Anda mungkin memiliki perangkat lambat ATAU memiliki banyak akses acak di HDD atau perangkat lain itu tidak menangani akses acak dengan baik.

Dengan melihat ke IOPS dan mengetahui ukuran chunk dari setiap operasi I / O Anda dapat mengetahui berapa banyak akses yang dapat ditangani oleh perangkat penyimpanan dan berapa throughput dari IOPS ini (chunk size * IOPS).

Jadi melihat IOPS tinggi Anda dapat menyimpulkan bahwa perangkat penyimpanan Anda menangani banyak akses acak, bahkan jika ini datang dengan throughput rendah .... atau mungkin Anda mencari ke IOPS rendah yang memiliki throughput rendah yang sama yang berarti perangkat Anda hanya diam.

Jadi dengan melihat IOPS kita bisa mendapatkan wawasan tentang apa arti sebenarnya dari throughput, mereka berdua saling melengkapi.

mFeinstein
sumber
IOPS = Input / Output Per Detik, ini bukan tentang jamak, dan trailing S tidak boleh dihilangkan. :)
Eugene
1
Ini bukan tentang jamak, saya telah melihat beberapa orang merujuk ke IOP sebagai kependekan dari "I / O OPeration" karena terdengar seperti ... Tapi ya, ini mungkin menyebabkan kebingungan, jadi saya akan menggantinya, terima kasih
mFeinstein