Mengapa HDD saya sangat lambat pada tes kecepatan "4K"?


46

Apa yang salah dengan kecepatan saya di 4K? Mengapa ini sangat lambat? Atau mestinya seperti itu?

Cuplikan layar tolok ukur

Apakah kecepatan itu oke? Mengapa saya memiliki kecepatan rendah di 4K?


13
Itu normal dan diharapkan. "4K" dalam konteks ini berarti baca / tulis acak (dalam blok 4 kilobyte, maka dari itu "4K"), tempat HDD mekanis berkinerja sangat buruk. Di situlah Anda menginginkan SSD. Lihat di sini untuk penjelasan yang lebih mendalam.
Bob

4Kb digunakan karena ukuran khas dari kluster disk, dan pada banyak HDD modern, dari sektor aktual (struktur level rendah pada disk itu sendiri). Artinya, jumlah data terkecil yang mungkin ditransfer pada suatu waktu dalam baca atau tulis, bahkan jika data yang diminta lebih kecil. Menarik bahwa TIDAK menjawab di halaman ini sejauh ini bahkan menyebutkan cluster atau sektor.
thomasrutter

2
@ thomasrutter Karena tidak relevan dengan jawaban. Bagian yang penting adalah bahwa tes ini melibatkan pencarian acak. Tidak relevan (sampai batas tertentu) berapa banyak data yang ditransfer dan apakah itu kelipatan dari ukuran sektor disk; bagian yang penting adalah bahwa tes mentransfer sejumlah data minimal untuk mengukur kinerja yang dicari.
Micheal Johnson

Apakah tes ini di partisi, atau di seluruh disk? Tes tingkat partisi dapat melakukan jauh lebih buruk untuk akses 4K jika Anda memiliki disk dengan sektor fisik 4K tetapi sektor logis 1K, dan menyelaraskan batas partisi untuk mengangkangi sektor.
Toby Speight

Alat partisi modern cenderung memastikan bahwa partisi mulai dan berakhir pada batas sektor; bahkan granularity 1MB sudah umum sekarang. Lewatlah sudah hari-hari lama "63 sektor 512-byte" yang akan menyebabkan masalah bagi sektor asli 4Kb.
thomasrutter

Jawaban:


85

Apa yang Anda hadapi adalah khas HDD mekanis, dan salah satu manfaat utama SSD: HDD memiliki kinerja akses acak yang mengerikan .

Dalam CrystalDiskMark, "Seq" berarti akses berurutan sementara "4K" berarti akses acak (dalam potongan 4kB sekaligus, karena byte tunggal akan terlalu lambat dan tidak realistis 1 ).


Definisi

Secara umum, ada dua cara berbeda untuk mengakses file.

Akses berurutan

Akses berurutan berarti Anda membaca atau menulis file kurang lebih satu byte demi satu. Misalnya, jika Anda menonton video, Anda akan memuat video dari awal hingga akhir. Jika Anda mengunduh file, itu akan diunduh dan ditulis ke disk dari awal hingga akhir.

Dari perspektif disk, ia melihat perintah seperti "baca blok # 1, baca blok # 2, baca blok # 3, baca blok byte # 4" 1 .

Akses acak

Akses acak berarti tidak ada pola yang jelas untuk membaca atau menulis. Ini tidak harus berarti benar-benar acak; itu benar-benar berarti "tidak berurutan". Misalnya, jika Anda memulai banyak program sekaligus, mereka harus membaca banyak file yang tersebar di drive Anda.

Dari perspektif drive, ia melihat perintah seperti "baca blok # 56, baca blok # 5463, baca blok # 14, baca blok # 5"

Blok

Saya telah menyebutkan blok beberapa kali. Karena komputer berurusan dengan ukuran besar (1 MB ~ = 1000000 B), bahkan akses berurutan tidak efisien jika Anda harus meminta drive untuk setiap byte individual - terlalu banyak obrolan. Dalam praktiknya, sistem operasi meminta blok data dari disk pada suatu waktu.

Sebuah blok hanya berbagai bytes; misalnya, blok # 1 mungkin byte # 1- # 512, blok # 2 mungkin byte # 513- # 1024, dll. Blok-blok ini berukuran 512 Bytes atau 4096 Bytes, tergantung pada drive. Tetapi bahkan setelah berurusan dengan blok daripada byte individu, akses blok sekuensial lebih cepat daripada akses blok acak.


Performa

Sekuensial

Akses berurutan umumnya lebih cepat daripada akses acak. Ini karena akses berurutan memungkinkan sistem operasi dan drive memprediksi apa yang akan dibutuhkan selanjutnya, dan memuat potongan besar sebelumnya. Jika Anda telah meminta blok "1, 2, 3, 4", OS dapat menebak Anda akan menginginkan "5, 6, 7, 8" selanjutnya, jadi ia memberitahu drive untuk membaca "1, 2, 3, 4 , 5, 6, 7, 8 "dalam sekali jalan. Demikian pula, drive dapat membaca penyimpanan fisik dalam sekali jalan, daripada "mencari ke 1, membaca 1,2,3,4, mencari ke 5, membaca 5,6,7,8".

Oh, saya sebutkan mencari sesuatu. HDD mekanis memiliki waktu mencari yang sangat lambat karena cara penataannya secara fisik: terdiri dari sejumlah disk yang terbuat dari logam yang berputar, dengan lengan fisik bergerak maju dan mundur untuk membaca disk. Ini adalah video HDD terbuka tempat Anda dapat melihat disk yang berputar dan lengan yang bergerak.

Diagram internal HDD
Gambar dari http://www.realtechs.net/data%20recovery/process2.html

Ini berarti bahwa pada suatu waktu, hanya sedikit data di bawah kepala di ujung lengan yang dapat dibaca. Drive perlu menunggu dua hal: perlu menunggu lengan untuk bergerak ke ring kanan ("track") disk, dan juga perlu menunggu disk berputar sehingga data yang dibutuhkan berada di bawah bacaan kepala. Ini dikenal sebagai pencarian 2 . Baik putaran dan lengan yang bergerak membutuhkan waktu fisik untuk bergerak, dan mereka tidak dapat dipercepat oleh banyak tanpa risiko kerusakan.

Ini biasanya membutuhkan waktu yang sangat lama, jauh lebih lama dari pembacaan yang sebenarnya. Kita berbicara> 5ms hanya untuk sampai ke tempat byte yang diminta tinggal, sedangkan pembacaan aktual dari byte rata-rata sekitar 0,00000625ms per byte byte sekuensial dibaca (atau 0,003125ms per 512 B blok).

Acak

Akses acak, di sisi lain, tidak memiliki manfaat dapat diprediksi. Jadi, jika Anda ingin membaca 8 byte acak, mungkin dari blok "8,34,76,996,112,644,888,341", drive harus "mencari ke 8, membaca 8, mencari to34, membaca 34, mencari to76, membaca 76, ..." . Perhatikan bagaimana perlu mencari lagi untuk setiap blok? Alih-alih rata-rata 0,003125ms per blok 512 B berurutan, sekarang rata-rata (5ms mencari + 0,003125ms dibaca) = 5,003125ms per blok. Itu banyak, berkali- kali lebih lambat. Ribuan kali lebih lambat, sebenarnya.

SSD

Untungnya, kami punya solusinya sekarang: SSD.

SSD, solid state drive , adalah, seperti namanya, solid state . Itu berarti tidak memiliki bagian yang bergerak . Terlebih lagi, cara SSD diletakkan berarti ada (secara efektif 3 ) tidak perlu mencari lokasi byte; sudah tahu . Itu sebabnya SSD memiliki jauh lebih sedikit kesenjangan kinerja antara akses berurutan dan acak.

Masih ada celah, tetapi itu sebagian besar disebabkan karena tidak dapat memprediksi apa yang akan terjadi selanjutnya dan melakukan prapembuatan data sebelum diminta.


1 Lebih akurat, dengan LBA drive dialamatkan dalam blok 512 byte (512n / 512e) atau 4kB (4Kn) untuk alasan efisiensi. Juga, program nyata hampir tidak pernah membutuhkan hanya satu byte pada satu waktu.

2 Secara teknis, mencari hanya mengacu pada perjalanan lengan. Menunggu data berputar di bawah kepala adalah latensi rotasi di atas waktu pencarian.

3 Secara teknis, mereka memiliki tabel pencarian dan memetakan kembali untuk alasan lain, misalnya memakai leveling, tetapi ini benar-benar dapat diabaikan dibandingkan dengan HDD ...


@ KamilMaciorowski Saya sebenarnya memikirkan kembali penyederhanaan itu sekarang, karena itu membuang perhitungan waktu pencarian + baca saya. Baiklah. Itu tidak terlalu penting untuk konsep.
Bob

Anda harus memperbaiki bagian acak Notice how it needs to look for every single byte?:: ganti bytedengan block(dan ubah contoh sesuai). Drive mencari bagian 4k (yang selanjutnya dapat disebarkan menjadi 512bytes chunk, tetapi tidak lebih rendah dari ini. Ia tidak mencari di antara setiap byte! Ia mencari di antara setiap blok jika blok berikutnya tidak tepat di belakang (yang sering terjadi pada cakram terfragmentasi) Dan mencari (menggerakkan kepala di sekitar piring, dan menunggu blok lewat di bawahnya) adalah apa yang sangat lama (beberapa milidetik)
Olivier Dulac

2
Dienote kecil hingga 4 kiB / 512B. 4kiB juga memiliki ukuran halaman, yah, hampir semuanya sehingga OS $ kemungkinan akan membaca hingga penuh blok 4 kiB bahkan jika driver LBA membaca dalam potongan 512 B. Juga saya tidak berpikir masalahnya adalah bahwa HDD perlu 'menemukan' byte lebih dari SDD daripada yang perlu secara fisik memutar ke posisi yang benar. Jika Anda mengakses blok lagi, Anda perlu mencarinya lagi karena HDD terus berputar. Setiap blok remapping cenderung menjadi efek sekunder (dan blok yang dipetakan ulang biasanya hanya setelah yang rusak saya percaya untuk meminimalkan mencari).
Maciej Piechotka

(Mungkin catatan samping yang lengkap - Saya tidak yakin tentang NAND / NOR tetapi setidaknya pengalamatan DDR juga tidak sepenuhnya acak seperti yang ditunjukkan oleh nama tetapi berfungsi dalam 'burst' alamat. Dalam kebanyakan kasus ini adalah 64 B karena itu menjadi ukuran $ line kebanyakan CPU tetapi bisa jauh lebih besar untuk aplikasi lain.)
Maciej Piechotka

1
@ OlivierDulac Saya masih berpikir memperkenalkan blok berpotensi membingungkan, tapi saya sudah mencoba menjelaskannya. Jawaban diperbarui.
Bob

3

Seperti yang sudah ditunjukkan oleh jawaban lain, "4K" hampir pasti merujuk pada akses acak dalam blok ukuran 4 KiB.

Setiap kali hard disk (bukan SSD) diminta untuk membaca atau menulis data, ada dua keterlambatan signifikan yang terlibat:

  • Carilah latensi, agar head baca / tulis untuk "mencari" ke trek melingkar yang benar (atau "silinder") pada platter, termasuk setiap waktu yang diperlukan bagi head untuk menstabilkan trek, dan menyinkronkan dengan data yang tersimpan pada platter
  • Rotasi latensi, untuk plat berputar di bawah head baca / tulis untuk memutar sedemikian rupa sehingga bagian trek yang diinginkan ("sektor") lewat di bawah head

Keduanya adalah jumlah waktu yang relatif konstan untuk setiap drive yang diberikan. Cari latensi adalah fungsi dari seberapa cepat kepala dapat digerakkan dan seberapa jauh ia harus dipindahkan, dan latensi rotasi adalah fungsi dari seberapa cepat platter berputar. Terlebih lagi, mereka tidak banyak berubah selama beberapa dekade terakhir. Produsen benar-benar terbiasa menggunakan waktu pencarian rata-rata misalnya dalam iklan; mereka cukup banyak berhenti melakukan itu ketika ada sedikit atau tidak ada pengembangan di daerah tersebut. Tidak ada pabrikan, terutama di lingkungan dengan persaingan tinggi, menginginkan produk mereka terlihat tidak lebih baik daripada pesaing mereka.

Hard disk desktop biasa berputar pada 7200 rpm, sedangkan drive laptop biasa mungkin berputar pada sekitar 5.000 rpm. Ini berarti bahwa setiap detik, ia mengalami total 120 revolusi (drive desktop) atau sekitar 83 revolusi (drive laptop). Karena rata - rata cakram perlu memutar setengah revolusi sebelum sektor yang diinginkan lewat di bawah kepala, ini berarti bahwa kita dapat mengharapkan cakram dapat melayani sekitar dua kali lebih banyak permintaan I / O per detik, dengan asumsi bahwa

  • baik pencarian dilakukan saat disk berputar (ini mungkin merupakan taruhan yang aman untuk hard disk saat ini di mana I / O melibatkan pencarian), dan latensi pencarian tidak lebih dari latensi rotasi untuk I / O tertentu
  • atau kepala sudah melewati silinder yang benar, menyebabkan drive tidak perlu mencari (yang merupakan kasus khusus di atas, dengan latensi mencari nol)

Jadi kita harus berharap untuk dapat melakukan pada urutan 200 I / O per detik jika data yang diminta untuk mengakses (untuk membaca atau menulis) relatif terlokalisasi secara fisik, sehingga latensi rotasi menjadi faktor pembatas. Dalam kasus umum, kami berharap drive dapat melakukan pada urutan 100 I / O per detik jika data tersebar di seluruh piring atau piring, membutuhkan pencarian yang besar dan menyebabkan latensi pencarian menjadi faktor pembatas. . Dalam istilah penyimpanan, ini adalah " IOPSkinerja "hard disk; ini, bukan kinerja I / O berurutan, biasanya merupakan faktor pembatas dalam sistem penyimpanan dunia nyata. (Ini adalah alasan besar mengapa SSD jauh lebih cepat digunakan: mereka menghilangkan latensi rotasi, dan sangat mengurangi latensi pencarian, karena gerakan fisik kepala baca / tulis menjadi tabel pencarian dalam tabel lapisan pemetaan flash, yang disimpan secara elektronik.)

Menulis biasanya lebih lambat ketika ada flush cache yang terlibat. Biasanya sistem operasi dan hard disk mencoba menyusun ulang penulisan acak untuk mengubah I / O acak menjadi I / O berurutan jika memungkinkan, untuk meningkatkan kinerja. Jika ada penghalang cache flush atau tulis yang eksplisit , optimisasi ini dihilangkan untuk tujuan memastikan bahwa keadaan data dalam penyimpanan persisten konsisten dengan apa yang diharapkan oleh perangkat lunak. Pada dasarnya alasan yang sama berlaku selama membaca ketika tidak ada cache disk yang terlibat, baik karena tidak ada (hari ini tidak umum pada sistem gaya desktop) atau karena perangkat lunak sengaja memotongnya (yang sering dilakukan saat mengukur kinerja I / O). Keduanya mengurangi potensi kinerja IOPS maksimum ke kasus yang lebih pesimistis, atau 120 IOPS untuk penggerak 7200 rpm.

  • Pada 100 IOPS pada 4 KiB per I / O, kami mendapatkan kinerja sekitar 400 KB / s.
  • Pada 200 IOPS pada 4 KiB per I / O, kami mendapatkan kinerja sekitar 800 KB / s.

Yang kebetulan cocok dengan angka Anda hampir persis. I / O acak dengan ukuran blok kecil adalah pembunuh kinerja absolut untuk hard disk rotasi, yang juga merupakan metrik yang relevan.

Adapun I / O murni berurutan, throughput di kisaran 150 MB / s sama sekali tidak masuk akal untuk hard disk rotasi modern. Tetapi sangat sedikit I / O dunia nyata yang benar-benar berurutan, sehingga dalam sebagian besar situasi, kinerja I / O murni berurutan menjadi lebih merupakan latihan akademis daripada indikasi kinerja dunia nyata.


Ini adalah jawaban yang bagus, dan membaca jauh lebih baik daripada milik saya :) Hanya sebuah catatan kecil, setidaknya Seagate masih spesifikasi rata-rata mencari latensi dalam lembar data mereka . WD sepertinya tidak.
Bob

@ Bob Terima kasih. Sebenarnya saya maksudkan dalam iklan dan sejenisnya; Saya telah mengedit jawaban untuk menjelaskannya. Saya pikir aman untuk mengatakan bahwa sangat sedikit orang yang membaca lembar data, meskipun melakukan itu mungkin akan menjadi pengalaman yang menyejukkan bagi banyak orang ...
sebuah CVn

2

4K mengacu pada I / O acak . Ini berarti disk diminta untuk mengakses blok kecil (ukuran 4 KB) pada titik acak dalam file uji. Ini adalah kelemahan dari hard drive; kemampuan untuk mengakses data di berbagai wilayah disk dibatasi oleh kecepatan di mana disk diputar dan seberapa cepat kepala baca-tulis dapat bergerak. Sequential I / O , di mana blok berturut-turut sedang diakses, jauh lebih mudah karena drive dapat dengan mudah membaca atau menulis blok ketika disk berputar.

Solid-state drive (SSD) tidak memiliki masalah dengan I / O acak karena yang perlu dilakukan adalah mencari di mana data disimpan dalam memori yang mendasarinya (biasanya NAND flash, dapat berupa XPoint 3D atau bahkan DRAM) dan membaca atau tulis data di lokasi yang sesuai. SSD sepenuhnya elektronik dan tidak perlu menunggu pada disk yang berputar atau kepala baca-tulis yang bergerak untuk mengakses data, yang membuatnya lebih cepat daripada hard drive dalam hal ini. Karena alasan inilah peningkatan ke SSD secara dramatis meningkatkan kinerja sistem.

Catatan: kinerja I / O berurutan pada SSD seringkali jauh lebih tinggi daripada pada hard drive juga. SSD tipikal memiliki beberapa chip NAND yang terhubung secara paralel dengan pengontrol memori flash, dan dapat mengaksesnya secara bersamaan. Dengan menyebarkan data di seluruh chip ini, tata letak drive yang mirip dengan RAID 0 tercapai, yang sangat meningkatkan kinerja. (Perhatikan bahwa banyak drive baru, terutama yang lebih murah, menggunakan jenis NAND yang disebut TLC NAND yang cenderung lambat saat menulis data. Drive dengan TLC NAND sering menggunakan buffer kecil NAND yang lebih cepat untuk memberikan kinerja yang lebih tinggi untuk operasi penulisan yang lebih kecil tetapi dapat melambat secara dramatis setelah buffer penuh.)


IIRC, beberapa SSD NVMe bahkan menggunakan cache DRAM.
timuzhti

1
Kebanyakan melakukannya. SSD tanpa bentuk agak pada ujung bawah.
Journeyman Geek
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.