Mengapa 4k dibaca dalam tolok ukur hdd / ssd lebih lambat daripada menulis?

12

Ada beberapa alat benchmark yang tersedia untuk menguji kecepatan drive pc.

Berikut adalah contoh tolok ukur dari SSD SATA:

  • Sequential Read: 718.498 MB / s
  • Penulisan Berurutan: 777.414 MB / s
  • Baca Acak 512KB: 160.541 MB / s
  • Acak Tulis 512KB: 838.930 MB / s
  • Baca Acak 4KB (QD = 1): 26.985 MB / s [6588.1 IOPS]
  • Acak Tulis 4KB (QD = 1): 135.603 MB / s [33106.2 IOPS]
  • Acak Baca 4KB (QD = 32): 177.003 MB / s [43213.6 IOPS]
  • Acak Tulis 4KB (QD = 32): 178,397 MB / s [43554,0 IOPS]

m.2 SSD:

  • Sequential Read (Q = 32, T = 1): 829.119 MB / s
  • Tulis Sekuensial (Q = 32, T = 1): 677.645 MB / s
  • Baca Acak 4KiB (Q = 32, T = 1): 744.328 MB / s [181720,7 IOPS]
  • Tulis Acak 4KiB (Q = 32, T = 1): 144.876 MB / s [35370.1 IOPS]
  • Sequential Read (T = 1): 785.600 MB / s
  • Tulis Berurutan (T = 1): 789.973 MB / s
  • Pembacaan Acak 4KiB (Q = 1, T = 1): 56.585 MB / s [13814.7 IOPS]
  • Acak Tulis 4KiB (Q = 1, T = 1): 170,449 MB / s [41613,5 IOPS]

HDD:

  • Sequential Read: 114.988 MB / s
  • Penulisan Berurutan: 111.043 MB / s
  • Baca Acak 512KB: 39.260 MB / s
  • Acak Tulis 512KB: 57,409 MB / s
  • Acak Baca 4KB (QD = 1): 0,546 MB / s [133,4 IOPS]
  • Acak Tulis 4KB (QD = 1): 0,757 MB / s [184,9 IOPS]
  • Baca Acak 4KB (QD = 32): 1,582 MB / s [386,3 IOPS]
  • Acak Tulis 4KB (QD = 32): 0,700 MB / s [171,0 IOPS]

Dalam setiap kasus "Acak Baca 4KB Q1" lebih lambat daripada menulis dan dalam kebanyakan kasus kebalikannya untuk "QD32".

Di beberapa forum, orang mengatakan keterbatasannya pada struktur chip SSD, tetapi seperti biasanya hard drive menunjukkan perilaku yang sama, itu tampaknya menjadi alasan lain ?!

mgutt
sumber

Jawaban:

9

TL; DR: Ini karena SSD berbohong kepada Anda dan mengatakan penulisan dilakukan sebelum itu. Tidak bisa lolos dengan hal yang sama untuk dibaca.

Versi yang lebih panjang dari jawabannya adalah menulis caching.

Mari kita mulai dengan case QD1. SSD akan melaporkan penulisan sebagai selesai ke OS setelah menerima data dan menyimpannya dalam cache secara lokal di drive, tetapi sebelum benar-benar menulisnya ke NAND. Ini membuat perbedaan besar karena sebenarnya menulis data ke NAND cukup lambat. Untuk membaca sebenarnya harus membaca data dari NAND sebelum dapat mengirimnya kembali (kecuali jika telah membacanya sebelumnya dan masih memilikinya dalam cache, tetapi itu sangat tidak mungkin dengan pembacaan acak).

Kelemahan dari hal ini adalah bahwa dalam menghadapi kehilangan daya yang tiba-tiba dapat terjadi kehilangan data dari data yang ditulis ke SSD tetapi yang belum sampai ke NAND. Beberapa SSD perusahaan menyertakan kapasitor super yang menyimpan daya yang cukup untuk menyelesaikan penulisan data dalam cache ke NAND jika terjadi kehilangan daya secara tiba-tiba.

Anda melihat hal yang sama untuk hard drive karena mereka juga melakukan caching tulis. Mereka tidak seagresif itu. Mengapa SSD begitu agresif? Untuk menjawab itu, kita perlu mempertimbangkan kasus QD32, yang lebih rumit dan lebih menarik.

Tidak benar apa yang Anda katakan bahwa pembacaan acak umumnya lebih cepat daripada penulisan acak di QD32. Itu sangat tergantung pada SSD tertentu yang Anda lihat.

Jika Anda melihat 4k QD1 acak dibaca pada banyak SSD SATA, mereka semua tampaknya tampil dalam kisaran 20-30 MB / s. Mengapa demikian? Itu karena 4k QD1 membaca acak kebanyakan tentang latensi dan bukan throughput. Latensi berasal dari tiga bagian:

  1. Latensi antarmuka SATA / AHCI yang melibatkan memberi tahu drive apa yang harus dilakukan dan mengirim data.
  2. Kontroler itu sendiri harus mencari tahu apa yang harus dilakukan dengan data dan instruksi yang telah diterimanya.
  3. Waktu yang diperlukan untuk benar-benar membaca atau menulis data ke dudukan NAND.

Baik 1. atau 3. berubah banyak dalam waktu yang lama, dan itulah sebabnya pembacaan acak 1k QD1 juga tidak banyak berubah.

Perpindahan SSD baru-baru ini dari SATA / AHCI ke PCIe / NVMe telah sangat mengurangi latensi 1., itulah sebabnya SSD m.2 dan PCIe tertentu baru-baru ini telah menunjukkan peningkatan besar di sini.

Satu hal yang dapat dilakukan pengontrol SSD untuk sangat membantu dengan latensi adalah membaca atau menulis ke banyak NAND mati secara paralel dan dengan cara itu menutupi sebagian besar latensi 3. Jika Anda melakukan QD32 4k pembacaan acak dengan NCQ SSD dapat melayani pembacaan permintaan rusak dan pastikan itu membaca dari sebanyak mungkin NAND mati secara paralel.

Untuk QD32 4k acak menulis SSD melakukan sesuatu yang disebut menulis menggabungkan. Ketika banyak permintaan tulis kecil datang dalam pengontrol SSD cache mereka secara lokal dan ketika buffer menulis cukup besar telah membangun pengontrol membaginya menjadi potongan-potongan berukuran baik dan menulis potongan ke beberapa NAND mati secara paralel, lagi untuk membantu menutupi NAND latency. Keuntungan lain dari penggabungan penulisan adalah bahwa kebanyakan SSD saat ini memiliki ukuran halaman (jumlah terkecil yang dapat dibaca atau ditulis) lebih besar dari 4k, dan menggabungkan penulisan hingga Anda mencapai ukuran halaman membantu menghindari banyak amplifikasi penulisan. Untuk melakukan hal ini, SSD begitu agresif dalam menulis cache.

Tuan Alpha
sumber