Saya sedang membaca artikel yang menjelaskan prosedur hibernasi di Microsoft Windows. Poin utama yang saya dapatkan adalah
- Windows membuang seluruh RAM (setelah memprosesnya mungkin) dalam
hiberfil.sys
file. - Selama boot up, file hibernasi dibaca, dan isinya dimuat dalam RAM.
Pertanyaan saya adalah ketika saya biasanya menyalin file ukuran, katakanlah, 1 GB, dibutuhkan sekitar 2 menit untuk menyelesaikan.
Namun, ketika Windows menulis file hibernasi (selama prosedur hibernasi), seluruh proses mungkin memakan waktu 10-15 detik. Mengapa ada perbedaan kecepatan menulis?
Ukuran RAM saya adalah 4 GB. (Saya tidak berbicara tentang teknologi boot cepat.)
Tolak ukur:
- Menyalin file 1 GB dari Disk 1 ke Disk 2 (eksternal): 2,3 menit.
- Hibernasi sistem: 15 detik.
fsutil
.Jawaban:
Ini mungkin jawaban tiga kali lipat.
Satu hal yang mungkin berperan di sini adalah Hybrid Shutdown di Windows yang secara efektif menutup aplikasi Anda, membuat Anda log off dan kemudian melanjutkan untuk hibernasi inti dari sistem operasi. Sudah menyimpan data ini berarti tidak perlu "hibernate" secara potensial.
Hal kedua adalah bahwa hibernasi tidak perlu menyimpan halaman memori yang di-paging ke file swap atau tidak digunakan (ini akan menjadi salah satu alasan untuk secara agresif mengisi file swap dan menyimpan data dalam memori juga) .
Yang ketiga adalah bahwa data file hibernasi juga dikompresi . Gabungkan dengan poin kedua saya dan jika Anda hanya memiliki satu set kecil data untuk diekspor yang berisi data yang sangat kompresibel (executable umumnya dikompresi dengan baik) maka jumlah data yang keluar ke file hibernasi dapat jauh lebih kecil daripada set kerja data. Perhatikan bahwa, sebagaimana dinyatakan dalam komentar, cache file dan data buffer lain yang tidak perlu dapat dengan mudah dibuang tanpa efek buruk untuk mengurangi jumlah data yang akan dibuang di file hibernasi.
Selain itu, hard drive saat ini cukup cepat. Dengan disk yang memiliki penulisan berkelanjutan dalam urutan 100 MB / s Anda akan dapat menulis (tidak terkompresi) RAM 4 GB dalam waktu kurang dari satu menit. Karena hibernasi dapat dilakukan sebagai hal terakhir setelah menangguhkan semua proses pengguna dan sebelum menangguhkan CPU, OS umumnya akan memiliki kecepatan tulis penuh pada disk. Ini adalah satu hal yang tidak dimiliki oleh tolok ukur sederhana Anda, dan menyalin dari disk ke disk berpotensi lebih lambat daripada hanya menulis RAM ke disk.
Gabungkan hal-hal ini dan jumlah data yang akan ditulis ke file hibernasi bisa sangat kecil, berpotensi dari urutan 1 GB dan mungkin akan ditulis ke satu blok terus menerus besar dalam waktu kurang dari 10 detik.
sumber
Pertama, jumlah RAM yang perlu disimpan sangat kecil. Bahkan, hanya set halaman kotor yang dipetakan ("lazeback writeback") yang perlu disiram, dan juga semua halaman pribadi yang telah ditulis ke dan dipindahkan kode yang dapat dieksekusi perlu ditulis.
Kedua, bertentangan dengan Anda menyalin file, membuang set halaman RAM yang perlu disimpan disk adalah menulis berurutan tunggal, berdekatan dari sudut pandang drive. Win32 API bahkan memperlihatkan fungsi tingkat pengguna untuk operasi ini. Kumpulkan write secara langsung didukung oleh perangkat keras dan bekerja secepat disk secara fisik dapat menerima data (controller akan langsung menarik data melalui DMA).
Ada sejumlah prasyarat agar ini berfungsi (seperti penyelarasan, ukuran blok, penjepit), dan itu tidak cocok dengan caching dan tidak ada yang namanya "lazy writeback" (yang merupakan optimasi yang sangat diinginkan dalam operasi normal ).
Itulah alasan mengapa tidak setiap menulisbekerja seperti itu setiap saat. Namun, ketika sistem menyimpan file hibernasi, semua prasyarat dipenuhi secara otomatis (semua data disejajarkan halaman, seukuran halaman, dan disematkan) dan caching menjadi tidak relevan karena komputer akan dimatikan sebentar lagi.
Ketiga, melakukan satu tulisan yang berdekatan sangat menguntungkan baik untuk disk pemintalan dan untuk disk solid state.
File swap dan file hibernasi biasanya merupakan file paling awal yang dibuat dan dicadangkan di disk. Mereka biasanya memiliki satu, paling banyak dua fragmen. Jadi, kecuali sektor rusak dan disk harus merealokasi sektor fisik, penulisan sekuensial logis diterjemahkan menjadi penulisan sekuensial fisik pada disk pemintalan.
Tidak diperlukan operasi baca-modifikasi-tulis pada disk saat sejumlah besar data yang berurutan dan bersebelahan sedang ditulis. Masalah ini kurang diucapkan pada harddisk berputar yang dapat menulis sektor tunggal yang cukup kecil (Asalkan Anda tidak menulis byte tunggal, yang biasanya dicegah dengan cache, perangkat tidak perlu mengambil konten asli dan menulis kembali versi yang dimodifikasi.) .
Namun, ini adalah sesuatu yang sangat terlihat pada SSD di mana setiap penulisan berarti bahwa misalnya blok 512kB (yang merupakan angka biasa, tetapi bisa lebih besar) harus dibaca dan dimodifikasi oleh pengontrol, dan ditulis kembali ke tempat yang berbeda. blok. Meskipun pada prinsipnya Anda dapat menulis (tetapi tidak menimpa) unit yang lebih kecil pada flash disk, Anda hanya dapat menghapus blok besar, begitulah cara kerja perangkat keras. Ini adalah alasan mengapa SSD menjadi jauh lebih baik pada penulisan berurutan besar.
sumber
Itu tidak membuang seluruh RAM pada waktu hibernasi.
Ini sudah memiliki sebagian besar RAM yang sudah diduplikasi pada disk. Ini tidak hanya memungkinkan hibernasi terjadi dengan cepat tetapi juga memungkinkan memori disediakan dengan cepat untuk program baru (sehingga mereka dapat diluncurkan dengan cepat).
Oleh karena itu hanya perlu menulis sebagian kecil dari 4GB dan itu dapat dilakukan dalam 10-15s.
Dari microsoft :
sumber
Selain semua hal di atas, saya pikir ada beberapa faktor lain yang berperan.
Salah satunya adalah bahwa, ketika menyalin file, file tersebut harus dibaca dan ditulis; hybernation hanya membutuhkan file yang akan ditulis. Ini, menurut definisi, sudah ada dalam memori!
Terkait erat dengan ini, ketika membaca file dan menulisnya pada saat yang sama, untuk menghemat memori, prosesnya adalah: membaca sepotong, menulis sepotong, memperbarui direktori (untuk menunjukkan ukuran baru); baca sepotong, tulis sepotong, perbarui direktori.
Setiap kali Anda berpindah dari satu bagian disk ke yang lain (mis. Membaca file a untuk menulis file b, menulis file b untuk menulis direktori, dan menulis direktori untuk membaca potongan berikutnya) disk harus dicari - pindahkan kepala, biarkan kepala menetap, tunggu bagian kanan disk muncul. Ini adalah salah satu kelebihan dari solid state disk - mencari tidak membutuhkan waktu sama sekali. Saat hibernasi, data ditulis end-to-end. File hibernasi (swap) sudah dialokasikan sebelumnya, sehingga direktori tidak perlu diperbarui (Anda tidak mengubah ukuran file hibernasi, hanya isinya).
Dan akhirnya, komputer Anda telah menangguhkan semua tugas lain - ini adalah SATU-SATUNYA yang dilakukannya (saya ragu ini akan membuat banyak perbedaan, tetapi pasti akan membuat beberapa!). Bahkan hal-hal seperti manajemen memori dan pengalihan tugas ditangguhkan.
sumber
Ini mungkin karena RAM memiliki kecepatan input / output yang lebih cepat daripada hard disk, sehingga RAM dapat menampilkan barang-barang di dalamnya secepat hard disk dapat membaca.
Saat menyalin file, Anda juga dibatasi oleh berbagai faktor - kecepatan disk, jika harus membaca masuk dan keluar ke disk yang sama akan memakan waktu lebih lama, kecepatan koneksi terbatas (jika ke drive eksternal), memeriksanya tidak menimpa apa pun, dll
sumber
dd if=/dev/zero of=/tmp/output.img bs=8k count=256k
dan dapatkan1862606848 bytes (1.9 GB) copied, 1.81605 s, 1.0 GB/s
, jadi sepertinya mungkin (saya akan menambahkan bahwa file-file copy windows sepertinya butuh waktu lama).