NVMe ssd: Mengapa menulis 4k lebih cepat daripada membaca?

51

Saya memiliki Samsung 960 Pro 512 GB SSD di NVMe dengan PCIe Gen.3x4 berjalan. Saya menggunakan Driver Samsung NVMe 2.0.0.1607. SSD bekerja dengan baik. Namun, saya tidak mengerti mengapa penulisan 4k lebih cepat daripada membaca 4k. Saya menggunakan AS Benchmark:

masukkan deskripsi gambar di sini

Ini adalah faktor 3! Apakah ada yang salah (dengan sistem saya atau AS Benchmark) atau apakah ini normal?

Musbach
sumber
Dan masih jauh lebih cepat daripada hard drive yang berputar!
Zan Lynx

Jawaban:

76

Membaca 4k akan menjadi hal tersulit yang dapat dilakukan drive. Mereka berada di antara ukuran blok terkecil yang dapat ditangani oleh drive, dan tidak ada cara bagi drive untuk memuat data dalam jumlah besar, bahkan mereka mungkin sangat tidak efisien jika logika load-ahead drive bermaksud membaca apa pun lebih besar dari 4kb.

Drive "Normal" lebih besar kemungkinannya lebih besar dari 4kb karena ada sangat sedikit file yang sekecil itu, dan bahkan file halaman cenderung dibaca dalam potongan besar karena akan aneh jika sebuah program memiliki "hanya" Memori 4KB keluar. Ini berarti bahwa setiap preloading yang dilakukan drive akan benar-benar menghukum throughput drive.

Pembacaan 4K mungkin melewati buffer drive, tetapi bagian "acak" dari pengujian membuatnya sepenuhnya tidak dapat diprediksi. Pengontrol tidak akan tahu kapan drive mungkin membutuhkan "besar" yang lebih sering dibaca lagi.

4K menulis di sisi lain dapat disangga, diantri, dan ditulis secara berurutan dengan cara yang efisien. Drive buffer dapat melakukan banyak pekerjaan menangkap dan menulis yang dirancang untuk itu, dan penyamaratakan aus bahkan mungkin mengalokasikan semua penulisan 4K tersebut ke blok penghapusan drive yang sama, kadang-kadang mengubah apa yang menjadi 4K "acak" tulis menjadi sesuatu yang lebih dekat ke tulisan berurutan.

Bahkan saya menduga bahwa inilah yang terjadi di "4K-64Thrd" menulis, "64-Thrd" tampaknya menggunakan kedalaman antrian yang besar , sehingga menandakan ke drive bahwa ia memiliki sejumlah besar data untuk membaca atau menulis . Ini memicu banyak pengelompokan penulisan dan mendekati kecepatan tulis berurutan drive. Masih ada overhead untuk melakukan penulisan 4K, tetapi sekarang Anda sepenuhnya mengekspos potensi buffer. Dalam versi Baca pengujian pengontrol drive, sekarang mengakui bahwa itu di bawah beban berat yang sangat konstan, menghentikan preloading data, mungkin menghindari buffer dan alih-alih beralih ke mode baca "mentah", lagi-lagi mendekati kecepatan baca berurutan.

Pada dasarnya pengontrol drive dapat melakukan sesuatu untuk membuat menulis 4K lebih efisien, terutama jika sekelompok mereka tiba pada waktu yang sama, sementara itu tidak dapat melakukan apa pun untuk membuat 4K tunggal dibaca lebih efisien, terutama jika ia mencoba untuk mengoptimalkan aliran data dengan pra-memuat data ke dalam cache.

Mokubai
sumber
5
Bukan bagian dari jawaban itu sendiri, tetapi saya menduga bahwa "4K dibaca" (bukan versi 64Thrd) sebenarnya memperlihatkan ukuran blok baca standar drive sebagai 32K atau 64K. Ini akan menjadi 2600/50 = 52 (64K dengan beberapa overhead + membaca 4K asli) atau 1200/50 = 24 (32K dengan beberapa overhead + membaca 4K menguranginya).
Mokubai
16
Jawaban yang bagus secara keseluruhan, tapi saya tidak percaya "ada sedikit file yang sekecil itu" sama sekali. Bahkan saya menduga bahwa pada kebanyakan sistem mayoritas file adalah 4k atau lebih kecil. Mereka tidak mengambil sebagian besar ruang , tapi itu masalah lain.
hobbs
3
Jawaban yang paling sederhana mungkin adalah ini: Jika Anda melakukannya satu per satu, Anda tidak bisa tumpang tindih membaca sama sekali karena Anda bahkan tidak mengetahui untuk apa blok pembacaan selanjutnya sampai Anda mengembalikan data dari pembacaan sebelumnya. Tetapi Anda dapat menimpa penulisan sepenuhnya karena Anda bisa mendapatkan semua data untuk penulisan berikutnya saat Anda masih mengerjakan yang sebelumnya.
David Schwartz
2
@ hobbs Jika Anda mengambil contoh NTFS ukuran cluster standar adalah 4K (atau beberapa darinya) yang berarti bahwa sistem file NTFS itu sendiri bekerja di blok 4K meskipun file dan / atau meta-data sendiri lebih kecil. Jadi file yang lebih kecil tidak ada bedanya. Untuk semua maksud dan tujuan sistem Windows membaca / menulis dalam blok 4K atau kelipatannya.
Tonny
1
@obob: Dengan NTFS, Anda cenderung mendapatkan pembacaan file kecil secara gratis (!). File kecil disimpan dalam entri direktori itu sendiri, berdekatan dengan nama file. Anda harus menekan ukuran file yang cukup khusus mendekati 4KB untuk memiliki file 4KB yang sebenarnya pada disk.
MSalters
16

Jawaban lain telah menjelaskan mengapa menulis mungkin lebih cepat daripada membaca; Saya ingin menambahkan bahwa untuk drive ini ini benar-benar normal, karena dikonfirmasi oleh tolok ukur yang dapat Anda temukan di ulasan.

Ulasan ArsTecnica

ArsTechnica telah meninjau drive, baik versi Anda (512 GB) dan yang 2 TB:

ArsTechnica (Grafik ini tidak langsung terlihat di ulasan, ini yang ke 5 di galeri pertama, Anda harus mengkliknya)

Kinerja kedua model ini sangat mirip, dan jumlahnya terlihat seperti milik Anda: drive dapat membaca pada 37 MB / s dan menulis pada 151 MB / s.

Ulasan AnandTech

AnandTech juga telah meninjau drive: mereka menggunakan model 2TB, rata-rata hasil tes dengan kedalaman antrian 1, 2 dan 4. Ini adalah grafik:

AnandTech 4K baca AnandTech 4K menulis

Drive membaca pada 137 MB / s dan menulis pada 437 MB / s. Jumlahnya jauh lebih tinggi daripada Anda, tetapi mungkin karena kedalaman antrian yang lebih tinggi. Pokoknya kecepatan tulis adalah 3 kali kecepatan baca, seperti pada kasus Anda.

Ulasan PC World

Satu lagi review, oleh PC World : mereka telah menguji versi 1 TB, dan hasil untuk 4K adalah 30 MB / s untuk membaca dan 155 MB / s untuk menulis: Grafik PC World Kecepatan menulis sesuai dengan Anda, tetapi di sini drive itu adalah bahkan lebih lambat dalam membaca. Hasilnya adalah rasionya lima banding satu, bukan tiga banding satu.

Kesimpulan

Ulasan mengkonfirmasi bahwa untuk drive ini adalah normal bahwa kecepatan tulis untuk 4K acak jauh lebih cepat daripada kecepatan membaca: tergantung pada tes, bahkan dapat 5 kali lebih cepat.

Drive Anda baik-baik saja. Tidak ada alasan untuk percaya itu salah, atau bahwa sistem Anda memiliki masalah.

Fabio berkata Reinstate Monica
sumber
8

Cache pengontrol SSD menulis di NVRAM onboard, dan mem-flush-nya ke media flash pada waktu yang tepat. Jadi latensi tulis adalah latensi akses cache, biasanya 20us. Sebaliknya, bacaan disajikan di luar media, dengan waktu akses terbaik 120-150.

Andrey Kuzmin
sumber
1

Memperluas jawaban Andrey, Anda perlu melihat overhead yang terlibat sebelum SSD dapat memberi sinyal ke komputer bahwa operasi selesai.

Untuk menulis, data harus ditulis ke cache RAM internal. Nanti akan ditulis ke memori flash, bersama dengan blok 4k lainnya dan metadata yang diperlukan untuk memeriksa, memperbaiki kesalahan dan menemukannya.

Untuk membaca, SSD harus terlebih dahulu menemukan data. Lokasi yang ingin dibaca komputer disebut alamat logis, dan tidak memiliki hubungan langsung dengan lokasi fisik data dalam memori flash. SSD menerjemahkan alamat logis menjadi alamat fisik, berdasarkan geometri memori flash (cara sel diatur), remapping blok yang buruk, leveling keausan dan berbagai faktor lainnya. Kemudian harus menunggu operasi lain selesai sebelum mengambil data dari flash, lalu memeriksanya dan jika diperlukan membaca kembali dan menerapkan koreksi kesalahan, bahkan mungkin menulis ulang seluruh blok di tempat lain.

Sementara total waktu yang diambil oleh operasi tulis mungkin lebih lama dari operasi membaca biasa, waktu yang dibutuhkan untuk SSD untuk melaporkan bahwa operasi selesai sejauh ia dapat memproses perintah lebih lanjut lebih rendah. Dengan blok besar, overhead bukan merupakan faktor pembatas, tetapi dengan banyak blok kecil mulai membatasi kecepatan baca / tulis.

pengguna3241
sumber