Saya biasanya menggunakan hdparm
untuk membandingkan HDD saya. Anda dapat membandingkan pembacaan langsung dan pembacaan yang di-cache. Anda ingin menjalankan perintah beberapa kali untuk menetapkan nilai rata-rata.
Contoh
Berikut adalah bacaan langsung.
$ sudo hdparm -t /dev/sda2
/dev/sda2:
Timing buffered disk reads: 302 MB in 3.00 seconds = 100.58 MB/sec
Dan inilah pembacaan cache.
$ sudo hdparm -T /dev/sda2
/dev/sda2:
Timing cached reads: 4636 MB in 2.00 seconds = 2318.89 MB/sec
Detail
-t Perform timings of device reads for benchmark and comparison
purposes. For meaningful results, this operation should be repeated
2-3 times on an otherwise inactive system (no other active processes)
with at least a couple of megabytes of free memory. This displays
the speed of reading through the buffer cache to the disk without
any prior caching of data. This measurement is an indication of how
fast the drive can sustain sequential data reads under Linux, without
any filesystem overhead. To ensure accurate measurements, the
buffer cache is flushed during the processing of -t using the
BLKFLSBUF ioctl.
-T Perform timings of cache reads for benchmark and comparison purposes.
For meaningful results, this operation should be repeated 2-3
times on an otherwise inactive system (no other active processes)
with at least a couple of megabytes of free memory. This displays
the speed of reading directly from the Linux buffer cache without
disk access. This measurement is essentially an indication of the
throughput of the processor, cache, and memory of the system under
test.
Menggunakan dd
Saya juga telah menggunakan dd
untuk jenis pengujian ini juga. Satu modifikasi yang akan saya lakukan pada perintah di atas adalah menambahkan bit ini ke akhir perintah Anda, ; rm ddfile
.
$ time sh -c "dd if=/dev/zero of=ddfile bs=8k count=250000 && sync"; rm ddfile
Ini akan menghapus ddfile
setelah perintah selesai. CATATAN: ddfile
adalah file sementara yang tidak perlu Anda simpan, ini adalah file yang dd
sedang menulis ke (of=ddfile
), saat memuat HDD Anda.
Melampaui
Jika Anda memerlukan pengujian HDD yang lebih ketat, Anda dapat menggunakan Bonnie++.
Referensi
- Bagaimana cara menggunakan 'dd' untuk membandingkan disk atau CPU Anda?
- Tolok ukur IO disk dengan DD dan Bonnie++
(Ini adalah pertanyaan yang sangat populer - Anda dapat melihat variasinya di https://stackoverflow.com/q/1198691 , https://serverfault.com/q/219739/203726 dan https://askubuntu.com/q /87035/740413 )
Apakah ada metode yang lebih baik [daripada dd] untuk [cakram disk]?
Ya, tetapi prosesnya akan memakan waktu lebih lama dan memerlukan pengetahuan tentang cara menginterpretasikan hasil - tidak ada angka tunggal yang akan memberi tahu Anda semuanya sekaligus karena hal berikut memengaruhi jenis pengujian yang harus Anda jalankan:
- Apakah Anda tertarik dengan performa I/O yang acak, berurutan, atau campuran keduanya?
- Apakah Anda membaca dari atau menulis ke disk (atau campuran keduanya)?
- Apakah Anda mengkhawatirkan latensi, throughput, atau keduanya?
- Apakah Anda mencoba untuk memahami bagaimana kinerja berbagai bagian dari hard disk yang sama (biasanya mempercepat lebih dekat ke pusat disk yang berputar)?
- Apakah Anda tertarik dengan kinerja sistem file tertentu saat menggunakan disk Anda atau Anda ingin hasil yang mendekati kinerja mentah disk dengan melakukan I/O langsung ke perangkat blok?
- Apakah Anda tertarik dengan kinerja ukuran I/O tertentu?
- Apakah Anda mengirimkan I/O secara sinkron atau asinkron?
- Berapa banyak I/O yang Anda kirim (kirim terlalu sedikit dengan cara yang salah dan semua I/O dapat di-cache sehingga Anda akhirnya menguji kecepatan RAM Anda daripada kecepatan disk)?
- Seberapa kompresibel konten data yang Anda tulis (mis. hanya data nol yang sangat dapat dikompresi dan beberapa sistem file/disk bahkan memiliki jalur cepat khusus untuk data nol saja yang mengarah ke angka yang tidak dapat diperoleh dengan konten lain)?
Dan seterusnya.
Berikut daftar singkat alat yang paling mudah dijalankan di bagian atas dan sulit/lebih menyeluruh/lebih baik di dekat bagian bawah:
- dd (baca atau tulis berurutan, hanya menampilkan throughput, dapat dikonfigurasi untuk menggunakan sistem file atau perangkat blok, dapat dikonfigurasi untuk melewati cache blok/menunggu I/O benar-benar selesai)
- hdparm (hanya membaca berurutan, hanya menampilkan throughput, tidak pernah menggunakan sistem file, dapat dikonfigurasi untuk melewati cache blok, pengujian cache hanya membaca ulang 2 MByte awal)
- Tolok ukur Utilitas Disk GNOME (mudah dijalankan, tidak pernah menggunakan sistem file, grafis tetapi memerlukan penginstalan GNOME lengkap, memberikan angka latensi dan throughput untuk berbagai jenis I/O tetapi beban kerja tulis sebenarnya melakukan baca/tulis/fsync per sampel ukuran).
- fio (dapat melakukan hampir semua hal dan memberikan hasil mendetail tetapi memerlukan konfigurasi dan pemahaman tentang cara menginterpretasikan hasil tersebut). Inilah yang dikatakan Linus tentangnya:
Greg - dapatkan kode FIO Jens. Itu melakukan hal yang benar, termasuk menulis konten pseudo-acak yang sebenarnya, yang menunjukkan jika disk melakukan beberapa "de-duplikasi" (alias "mengoptimalkan tolok ukur):
[https://github.com/axboe/fio/]
Ada lagi yang mencurigakan - lupakan tentang bonnie atau alat tradisional lainnya.
Sumber: komentar yang tersisa di Google Plus untuk Greg Kroah-Hartman oleh Linus Torvalds.
dengan alat IOPS
Jika Anda tidak mau repot membaca semua ini, saya hanya akan merekomendasikan alat IOPS. Ini akan memberi tahu Anda kecepatan dunia nyata tergantung pada ukuran blok.
Kalau tidak - saat melakukan tolok ukur IO saya akan melihat hal-hal berikut:
- blocksize/cache/IOPS/direct vs buffered/async vs sync
- baca/tulis
- utas
- latensi
-
Penggunaan CPU
-
Ukuran pemblokiran mana yang akan Anda gunakan :Jika Anda ingin membaca/menulis 1 GB dari/ke disk, ini akan cepat jika Anda melakukan satu operasi I/O. Tetapi jika aplikasi Anda perlu menulis dalam potongan 512 byte di seluruh harddisk dalam potongan yang tidak berurutan (disebut I/O acak meskipun tidak acak) ini akan terlihat berbeda. Sekarang, basis data akan melakukan I/O acak untuk volume data dan I/O berurutan untuk volume log karena sifatnya. Jadi, pertama-tama Anda harus memperjelas apa yang ingin Anda ukur. Jika Anda ingin menyalin file video besar itu berbeda dengan jika Anda ingin menginstal Linux.
Ukuran blok ini memengaruhi jumlah operasi I/O yang Anda lakukan. Jika Anda melakukannya mis. 8 operasi baca (atau tulis, tidak dicampur) berurutan, penjadwal I/O OS akan menggabungkannya. Jika tidak, cache pengontrol akan melakukan penggabungan. Praktis tidak ada perbedaan jika Anda membaca 8 blok berurutan 512 byte atau satu potongan 4096 byte. Satu pengecualian - jika Anda berhasil melakukan sinkronisasi langsung IO dan menunggu 512 byte sebelum Anda meminta 512 byte berikutnya. Dalam hal ini, menambah ukuran blok seperti menambahkan cache.
Anda juga harus menyadari bahwa ada sinkronisasi dan async IO:Dengan sinkronisasi IO, Anda tidak akan mengeluarkan permintaan IO berikutnya sebelum yang sekarang kembali. Dengan async IO Anda dapat meminta mis. 10 potongan data dan kemudian tunggu sampai tiba. Utas basis data yang berbeda biasanya akan menggunakan sinkronisasi IO untuk log dan IO asinkron untuk data. Alat IOPS mengatasinya dengan mengukur semua ukuran blok yang relevan mulai dari 512 byte.
-
Maukah Anda membaca atau menulis :Biasanya membaca lebih cepat daripada menulis. Tetapi perhatikan bahwa caching bekerja dengan cara yang sangat berbeda untuk membaca dan menulis:
-
Untuk penulisan, data akan diserahkan ke controller dan jika di-cache, data akan dikenali sebelum data ada di disk kecuali cache penuh. Menggunakan alat iozone Anda dapat menggambar grafik yang indah dari dataran tinggi efek cache (efek cache CPU dan efek buffer cache). Cache menjadi kurang efisien semakin banyak yang telah ditulis.
-
Untuk pembacaan, data pembacaan disimpan dalam cache setelah pembacaan pertama. Bacaan pertama memakan waktu paling lama dan caching menjadi semakin efektif selama waktu aktif. Cache penting adalah cache CPU, cache sistem file OS, cache pengontrol IO, dan cache penyimpanan. Alat IOPS hanya mengukur membaca. Hal ini memungkinkan untuk "membaca di semua tempat" dan Anda tidak ingin menulis daripada membaca.
-
-
Berapa banyak utas yang akan Anda gunakan :Jika Anda menggunakan satu utas (menggunakan dd untuk tolok ukur disk), Anda mungkin akan mendapatkan kinerja yang jauh lebih buruk dibandingkan dengan beberapa utas. Alat IOPS memperhitungkan ini dan membaca beberapa utas.
-
Seberapa penting latensi bagi Anda :Melihat basis data, latensi IO menjadi sangat penting. Setiap perintah insert/update/delete SQL akan ditulis ke dalam jurnal database ("log" dalam istilah database) di komit sebelum diakui. Ini berarti database lengkap mungkin menunggu operasi IO ini selesai. Di sini saya tunjukkan cara mengukur waktu tunggu rata-rata (menunggu) menggunakan alat iostat .
-
Seberapa penting penggunaan CPU untuk Anda :CPU Anda dapat dengan mudah menjadi penghambat kinerja aplikasi Anda. Dalam hal ini Anda harus tahu berapa banyak siklus CPU yang dibakar per byte baca/tulis dan optimalkan ke arah itu. Ini dapat berarti untuk memutuskan untuk/melawan memori flash PCIe tergantung pada hasil pengukuran Anda. Sekali lagi alat iostat dapat memberi Anda perkiraan kasar tentang penggunaan CPU oleh operasi IO Anda.