Hard disk jauh lebih lambat saat melakukan beberapa pembacaan simultan yang lama

2

Ringkasan

  • Dari hard disk tradisional (piringan berputar)
  • baca satu file besar, dapatkan kinerja yang baik
  • baca file besar lainnya secara bersamaan, dapatkan total throughput dibagi 5 hingga 10. Cukup penurunan kinerja!

Ditambah kepala disk yang secara mekanis bergerak maju mundur beberapa kali per detik dapat didengar dan dirasakan dengan tangan. Juga setelah beberapa jam suhu diamati lebih tinggi.

Jika ini jarang terjadi atau dalam waktu singkat, tidak apa-apa. Jika ini sering atau untuk jangka waktu yang lama, tidak hanya kinerjanya buruk dan ia mengumumkan umur yang lebih pendek.

Contoh

  • Disk: disk Western Digital 2 terabyte.
  • Throughput saat membaca satu file besar bisa 50-100MB / s.
  • Efek paling ekstrem dengan file besar: file video (misalnya ukuran 1GB hingga 13GB). Juga terjadi ketika membaca file foto mentah (~ 25MB).
  • Segera setelah program lain membaca file lain secara bersamaan, total throughput turun menjadi 5-10MB / s.

Informasi tambahan

Ini bukan masalah fragmentasi file. Jika file terfragmentasi, throughput akan lambat (jauh lebih lambat dari nominal 50-100MB / s) bahkan ketika membaca hanya satu file.

Pertanyaan

Dapatkah sesuatu dilakukan untuk mendapatkan total throughput yang cukup tinggi ketika membaca beberapa file besar secara bersamaan?

Stéphane Gourichon
sumber

Jawaban:

2

Jawaban cepat

  • (1) Cari tahu apa perangkat blok yang benar (misalnya dengan mount).
  • (2) Dapatkan izin root.
  • (3) Tune read_ahead_kbuntuk perangkat.

Dalam kasus saya , mengeluarkan perintah ini:

echo 100000 > /sys/block/sdb/queue/read_ahead_kb

membawa kembali kinerja dan bantuan mekanis dalam hitungan detik.

Apa artinya perubahan parameter ini secara konkret?

TL; DR: ini menyebabkan kernel membaca file besar dalam sekali jalan, yang berarti hanya satu gerakan mekanik bolak-balik, bukan banyak, memecahkan masalah.

Lebih tepatnya, parameter ini memberi tahu kernel bahwa ketika membuka file, Anda mengizinkannya untuk membaca terlebih dahulu banyak data (dalam hal ini, hingga 100MB, dari 128kB default) bahkan sebelum mengetahui apakah proses yang meminta baca akan sebenarnya membutuhkan data sebanyak itu. Akibatnya, dengan contoh proses membuka file 30MB (foto mentah biasa) sementara proses lain sudah membaca sebanyak mungkin file lain, maka alih-alih memiliki kepala mekanik bergerak bolak-balik setidaknya (30000 / 128) = 234 kali dijamin, kernel tahu Anda mengizinkannya untuk membaca semua file sekaligus, membuat hanya satu gerakan mekanik bolak-balik.

Kelemahannya adalah, jika Anda hanya memerlukan sebagian file (mis. Thumbnail 100kB dari file 30MB), kernel mungkin (atau mungkin memutuskan untuk tidak) membaca terlalu banyak data. Juga, data yang sedang dibaca akan menempati beberapa halaman RAM yang meningkatkan tekanan memori. Linux dibuat untuk tujuan umum, termasuk server dengan banyak aktivitas paralel dan tekanan memori, Linux tentu memiliki sejumlah heuristik untuk menebak apa yang harus dilakukan. Kebenarannya ada dalam kode sumber kernel.

Mengapa ini bernilai?

Nilai default adalah 128. Saya mengamati beberapa efek meningkatkannya ke nilai lain terlebih dahulu, seperti 4096, dan puas pada 100000, tapi saya kira (1) sebagian besar efek diperoleh dengan peningkatan awal, (2) efek paling buruk (jika tergantung pada situasinya, seperti tekanan memori) sebanding dengan nilai dan (3) mungkin ada beberapa nilai di atas yang meningkat sebenarnya tidak mengubah apa pun.

Tetapi bagaimana dengan situasi Anda ?

Detail

Atau Anda mungkin menggunakan sumbernya, luke:

Stéphane Gourichon
sumber
0

Spoiler: Akan ada jawaban YA di bagian bawah posting

Jawaban singkat:
TIDAK.

Jawaban berukuran sedang:
TIDAK, karena
ada 2 proses yang ingin mengakses satu ressource (hard disk) secara bersamaan. Setiap proses akan membaca data yang berbeda, sehingga kepala perlu melompat ke tempat di mana proses membutuhkan data dari platter. Lompatan ini membutuhkan banyak waktu dan mengurangi jumlah total hard disk Anda!

Jawaban panjang,
karena Anda tampaknya kurang memahami (dasar) prinsip kerja hard disk:
TIDAK, karena
piringan hard disk Anda yang berputar berperilaku seperti buku.

Bayangkan Anda memiliki buku dengan halaman kosong saja. Itu hard disk Anda ketika Anda membelinya. Tidak ada data yang tersimpan di dalamnya.
Kemudian Anda memasukkannya ke komputer Anda (katakanlah sebagai drive ke-2, jadi kami tidak harus berurusan dengan sistem operasi di sini).
Ketika Anda menulis dokumen teks panjang (disebut 'teks A') dan menyimpannya di disk, maka itu seperti menulis 10 halaman pertama (halaman 1 hingga 10) di buku Anda. Kemudian Anda menyalin gambar jpg ke disk, itu seperti membuat gambar rumah Anda di 5 halaman berikutnya dalam buku Anda (hlm. 11-15).
Daftar isi buku Anda sekarang memiliki 2 entri:

  • teks A: hal. 1-10
  • foto rumah: p. 11-15

Semua data pada hard disk Anda dapat dihapus lagi, itu sebabnya Anda telah menulis dan menggambar semuanya dengan pensil, dan bukan bolpoin.
Sekarang Anda menulis daftar belanja ke dalam buku Anda: hlm. 16-17.
Selanjutnya, Anda tidak suka atau membutuhkan gambar itu lagi dan ingin menghapusnya, jadi Anda menghapusnya dengan karet. Halaman 11-15 kosong.
TOC Anda terlihat seperti:

  • teks A: hal. 1-10
  • daftar belanja: hal. 16-17

Sekarang Anda ingin menggambar supermarket lokal, yang lebih besar dari rumah Anda. Jadi kamu butuh 12 halaman. Anda bisa mulai di halaman 11, yang berarti Anda tidak memiliki cukup halaman berturut-turut dan Anda perlu melanjutkan di 18, atau Anda bisa mulai di 18 dan memiliki cukup ruang untuk menggambarnya sekaligus.
Sebagian besar atau semua sistem operasi cukup pintar untuk memilih sepotong ruang kosong yang cukup besar untuk seluruh data, tetapi jika tidak ada ruang kosong yang cukup besar, ia harus membagi file menjadi potongan-potongan kecil yang sesuai dengan yang ada secara gratis area. Ini disebut Fragmentasi .
Mari kita bayangkan Anda juga perlu melakukan itu. TOC Anda terlihat seperti:

  • teks A: hal. 1-10
  • gambar supermarket, fragmen 1 dari 2: p. 11-15
  • daftar belanja: hal. 16-17
  • gambar supermarket, fragmen 2 dari 2: p. 18-24

Sekarang kita mulai MEMBACA buku itu.
Anda ingin mengetahui barang-barang di daftar belanja Anda. TOC memberitahu Anda untuk pergi ke halaman 16. Anda mulai membaca sampai Anda mencapai bagian bawah hal.17. Selesai.
Berikutnya: Anda ingin melihat bagaimana supermarket itu terlihat seperti tempat Anda ingin berbelanja. TOC memberitahu Anda untuk pergi ke hal.11 (Anda ada di halaman.18 (= akhir halaman.17) dan harus menelusuri 7 halaman kembali. Pada hard disk kepala baca-tulis perlu melakukan lompatan. Kemudian Anda mulai membaca sampai Anda mencapai akhir hal.15, kemudian Anda menjelajah ke hal.18 (kepala melompat lagi) dan melanjutkan.

Menjelajahi sebuah buku membutuhkan waktu lebih sedikit daripada membaca, tetapi pada hard disk hampir sebaliknya. Head tidak bisa hanya pindah ke track / silinder berikutnya, tetapi harus 'mencari' silinder yang benar (akselerasi, gerakan, deselerasi, waktu penyelesaian). Lihat Wikipedia . Jadi karena fragmentasi, bacaan Anda membutuhkan waktu lebih lama daripada jika file itu disimpan secara berurutan.

Dan sekarang, kita BACA DENGAN 2 ORANG :
Anda ingin melihat gambar supermarket dan saya ingin membaca teks
Anda A. Anda menjelajah ke halaman 11 dan mulai membaca.
Ketika Anda telah membaca hal.11, saya menjelajah ke hal.1 dan mulai membaca.
Ketika saya sudah membaca. hal.1, Anda menjelajah ke hal.12 dan melanjutkan membaca.
Ketika Anda sudah membaca. hal.12, saya telusuri ke hal.2 dan melanjutkan membaca.
...
Anda dapat membayangkan bahwa butuh waktu lebih lama untuk membaca halaman hanya karena banyak penjelajahan yang begitu lama.
Sama dengan hard disk Anda. Anda tidak dapat berbuat apa-apa tentang hal itu tetapi menghindari akses simultan karena ini selalu membuatnya lebih lambat.

Sekarang, akhirnya, jawaban
YA: YA: Beli SSD.
Ini adalah disk elektronik dan beroperasi seperti RAM, sehingga Anda hampir tidak memiliki waktu mencari dan throughput total selalu dekat dengan throughput maksimum yang mungkin (jika tidak ada hambatan lain di tempat lain).

Tobias Knauss
sumber