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)?"
sumber
Jawaban:
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:
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.
sumber
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.
sumber
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.
sumber
Untuk melakukan operasi IO, drive harus melalui serangkaian operasi. Untuk hard drive mekanis, mereka perlu melakukannya.
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.
sumber
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.
sumber
Menjawab pertanyaan Anda
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.
sumber
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.
sumber
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.
sumber