Bagaimana untuk memeriksa kinerja hard drive (Baik melalui terminal atau GUI). Kecepatan menulis. Kecepatan baca. Ukuran Cache dan kecepatan. Kecepatan acak.
hdparm
adalah tempat yang baik untuk memulai.
sudo hdparm -Tt /dev/sda
/dev/sda:
Timing cached reads: 12540 MB in 2.00 seconds = 6277.67 MB/sec
Timing buffered disk reads: 234 MB in 3.00 seconds = 77.98 MB/sec
sudo hdparm -v /dev/sda
akan memberikan informasi juga.
dd
akan memberikan anda informasi tentang kecepatan menulis.
Jika drive doesn't memiliki sistem file (dan hanya kemudian), menggunakan of=/dev/sda
.
Jika tidak, mount di /tmp dan menulis kemudian hapus tes output file.
dd if=/dev/zero of=/tmp/output bs=8k count=10k; rm -f /tmp/output
10240+0 records in
10240+0 records out
83886080 bytes (84 MB) copied, 1.08009 s, 77.7 MB/s
gnome-disk
Apakah ada sesuatu yang lebih anda inginkan?
Suominen benar, kita harus menggunakan beberapa jenis sinkronisasi, tetapi ada metode sederhana, conv=fdatasync akan melakukan pekerjaan:
dd if=/dev/zero of=/tmp/output conv=fdatasync bs=384k count=1k; rm -f /tmp/output
1024+0records in
1024+0 records out
402653184 bytes (403 MB) copied, 3.19232 s, 126 MB/s
Saya tidak akan merekomendasikan menggunakan /dev/urandom
karena itu's perangkat lunak dan lambat seperti babi. Lebih baik untuk mengambil potongan dari data acak pada ramdisk. Pada hard disk pengujian acak doesn't peduli, karena setiap byte ditulis sebagai (juga pada ssd dengan dd). Tapi jika kita menguji dedupped zfs renang dengan murni nol atau data acak, ada besar perbedaan kinerja.
Sudut pandang yang lain harus sinkronisasi waktu inklusi; semua modern filesystem menggunakan caching pada operasi file.
Untuk benar-benar mengukur kecepatan disk dan memori, kita harus melakukan sinkronisasi filesystem untuk menyingkirkan cache efek. Itu dapat dengan mudah dilakukan dengan:
time sh -c "dd if=/dev/zero of=testfile bs=100k count=1k && sync"
dengan cara ini anda mendapatkan output:
sync ; time sh -c "dd if=/dev/zero of=testfile bs=100k count=1k && sync" ; rm testfile
1024+0 records in
1024+0 records out
104857600 bytes (105 MB) copied, 0.270684 s, 387 MB/s
real 0m0.441s
user 0m0.004s
sys 0m0.124s
jadi disk datarate hanya 104857600 / 0.441 = 237772335 B/s --> 237MB/s
Yang lebih dari 100MB/s lebih rendah dibandingkan dengan caching.
Bahagia benchmarking,
Jika anda ingin memantau disk membaca dan menulis kecepatan real-time anda dapat menggunakan iotop alat.
Hal ini berguna untuk mendapatkan informasi yang tepat tentang bagaimana cara melakukan disk untuk aplikasi tertentu atau tugas. Output akan menunjukkan kepada anda membaca/menulis kecepatan per proses, dan total membaca/menulis kecepatan untuk server, mirip dengan top
.
Untuk menginstal iotop:
sudo apt-get install iotop
Untuk menjalankannya:
sudo iotop
Jika anda ingin akurasi, anda harus menggunakan fio
. Hal ini membutuhkan membaca manual (man fio
) tapi itu akan memberi anda hasil yang akurat. Perhatikan bahwa untuk setiap akurasi, anda perlu menentukan apa yang anda ingin mengukur. Beberapa contoh:
Kecepatan BACA sekuensial dengan blok besar (ini harus di nomor yang anda lihat di spesifikasi untuk drive anda):
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=read --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
Kecepatan MENULIS berurutan dengan blok besar (ini harus di nomor yang anda lihat di spesifikasi untuk drive anda):
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=write --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
Random 4K baca QD1 (ini adalah jumlah yang benar-benar penting untuk kinerja dunia nyata kecuali anda tahu pasti):
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting
Campuran acak 4K membaca dan menulis QD1 dengan sync (ini adalah kasus terburuk nomor yang harus anda harapkan dari drive anda, biasanya kurang dari 1% dari angka-angka yang tercantum dalam lembar spesifikasi):
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randrw --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting
Meningkatkan --ukuran
argumen untuk meningkatkan ukuran file. Menggunakan file yang lebih besar dapat mengurangi angka-angka yang anda dapatkan tergantung pada teknologi drive dan firmware. File-file kecil yang akan memberikan "terlalu bagus" hasil rotasi media karena kepala baca tidak perlu bergerak banyak. Jika perangkat anda di dekat kosong, menggunakan file cukup besar untuk hampir mengisi drive akan membuat anda mendapatkan kasus terburuk perilaku untuk masing-masing tes. Dalam kasus SSD, ukuran file tidak peduli bahwa banyak.
Namun, perhatikan bahwa untuk beberapa media penyimpanan dengan ukuran file yang tidak penting seperti total byte yang ditulis selama periode waktu yang singkat. Sebagai contoh, beberapa Ssd mungkin telah secara signifikan kinerja yang lebih cepat dengan pra-blok terhapus atau mungkin telah kecil SLC flash area yang's digunakan sebagai cache menulis dan kinerja perubahan setelah SLC cache penuh. Sebagai contoh lain, Seagate SMR Hdd memiliki sekitar 20 GB PMR cache daerah yang memiliki performa tinggi namun setelah itu akan penuh, menulis langsung ke SMR daerah dapat memotong kinerja 10% dari aslinya. Dan satu-satunya cara untuk melihat kinerja ini degration adalah untuk pertama menulis 20+ GB secepat mungkin. Tentu saja, ini semua tergantung pada beban kerja anda: jika anda menulis akses bursty dengan gondrong penundaan yang memungkinkan perangkat untuk membersihkan cache internal, lebih pendek menguji urutan akan mencerminkan dunia nyata kinerja yang lebih baik. Jika anda perlu untuk melakukan banyak IO, anda perlu untuk meningkatkan investasi --io_size
dan --runtime
parameter. Perhatikan bahwa beberapa media (misalnya, sebagian besar perangkat flash) akan mendapatkan tambahan wear dari pengujian tersebut. Menurut pendapat saya, jika ada perangkat yang miskin tidak cukup untuk menangani jenis pengujian, itu tidak boleh digunakan untuk memegang data berharga dalam hal apapun.
Selain itu, beberapa kualitas tinggi perangkat SSD mungkin bahkan lebih cerdas wear leveling algoritma mana internal SLC cache memiliki cukup kecerdasan untuk mengganti data-data di tempat yang sedang ditulis ulang selama tes jika itu adalah ruang alamat yang sama (yaitu, tes berkas lebih kecil dari total SLC cache). Untuk perangkat tersebut, file size mulai peduli lagi. Jika anda membutuhkan anda yang sebenarnya beban kerja it's terbaik untuk menguji dengan ukuran file yang anda'll benar-benar melihat dalam kehidupan nyata. Jika nomor anda mungkin terlihat terlalu bagus.
Perhatikan bahwa fio
akan membuat diperlukan file sementara di jalankan pertama. Itu akan diisi dengan data acak untuk menghindari terlalu baik angka dari perangkat yang curang dengan mengompresi data sebelum menulis untuk penyimpanan permanen. Sementara file yang akan disebut fio-berkas sementara.dat
dalam contoh di atas dan disimpan dalam direktori kerja saat ini. Jadi pertama-tama anda harus mengubah ke direktori yang dipasang pada perangkat yang ingin anda uji.
Jika anda memiliki SSD dan ingin melihat bahkan angka yang lebih tinggi, meningkatkan --numjobs
di atas. Yang mendefinisikan concurrency untuk membaca dan menulis. Contoh di atas semua memiliki numjobs
diisi 1
sehingga uji adalah single-threaded proses membaca dan menulis (mungkin dengan antrian set dengan iodepth
). High end Ssd (misalnya Intel Optane) harus mendapatkan angka yang tinggi bahkan tanpa meningkatkan numjobs
banyak (misalnya 4
harus cukup untuk mendapatkan tertinggi spec angka) tetapi beberapa "Perusahaan" Ssd memerlukan pergi ke 32
-128
untuk mendapatkan spec angka karena internal latency dari perangkat tersebut lebih tinggi tetapi secara keseluruhan throughput yang lebih gila.
bonnie++ adalah patokan utama utilitas yang saya tahu untuk linux.
(Saya'm saat ini sedang mempersiapkan linux livecd bekerja dengan bonnie++ untuk menguji mesin berbasis windows dengan itu!)
Dibutuhkan perawatan dari caching, sinkronisasi, data acak, random lokasi pada disk, ukuran kecil update, update besar, membaca, menulis, dll. Membandingkan usbkey, sebuah harddisk (rotary), sebuah solid-state drive dan ram berbasis filesystem bisa sangat informatif bagi pemula.
Saya tidak tahu apakah hal ini termasuk dalam Ubuntu, tapi anda bisa compile dari source dengan mudah.
Menulis kecepatan
$ dd if=/dev/zero of=./largefile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 4.82364 s, 223 MB/s
Ukuran blok ini sebenarnya cukup besar. Anda dapat mencoba dengan ukuran yang lebih kecil seperti 64k atau bahkan 4k.
Kecepatan baca
Jalankan perintah berikut untuk menghapus cache memori
$ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"
Sekarang membaca file yang dibuat di ujian tulis:
$ dd if=./largefile of=/dev/null bs=4k
165118+0 records in
165118+0 records out
676323328 bytes (676 MB) copied, 3.0114 s, 225 MB/s
beberapa petunjuk tentang cara untuk menggunakan bonnie++
bonnie++ -d [TEST_LOCATION] -s [TEST_SIZE] -n 0 -m [TEST_NAME] -f -b -u [TEST_USER]
bonnie++ -d /tmp -s 4G -n 0 -m TEST -f -b -u james
Sedikit lebih lanjut di: SEDERHANA BONNIE++ CONTOH.
Memeriksa integritas, mendeteksi palsu flash drive dan uji kinerja, semua tiga dalam satu tembakan.
Lebih lanjut di jawaban ini.