Apakah file yang menggunakan kompresi NTFS didekompresi ke disk atau ke dalam memori?


14

Bagaimana cara kerja dekompresi NTFS di Windows? Menurut Microsoft, dekompresi NTFS dilakukan dengan memperluas file, lalu menggunakannya. Kedengarannya benar, tetapi pertanyaan saya adalah bagaimana proses ini terjadi secara teknis.

Apakah Windows memuat file yang dikompresi ke dalam memori, memperluasnya dalam memori, dan membaca dari memori? Atau apakah itu memuat file yang dikompresi ke dalam memori, memperluasnya ke disk atau dalam memori, menulis ke disk, dan kemudian membaca?

Saya mencoba mencari tahu apakah mungkin saya dapat meningkatkan kinerja komputer saya dengan menggunakan kompresi NTFS. Dengan begitu, hard disk atau SSD yang lambat yang tidak dapat menangani banyak operasi penulisan akan selalu memiliki lebih sedikit data untuk ditulis dan dibaca, dan prosesor kuat saya yang tidak bekerja sebagian besar waktu dapat mendekompres file, meningkatkan kecepatan penyimpanan dan kesehatan saya. .


1
Saya mengedit pertanyaan Anda untuk lebih fokus pada apakah file didekompresi ke memori atau disk. Dengan begitu, kemungkinan besar akan ditutup sebagai duplikat dari pertanyaan lain ini , yang lebih menyentuh pada aspek-aspek lain.
Ben N

Jawaban:


19

Windows mendekompres file ke dalam memori. Melakukannya ke disk akan sepenuhnya menghapus peningkatan kecepatan dan akan menyebabkan banyak penulisan disk yang tidak perlu. Lihat akhir artikel blog Microsoft ini tentang file jarang dan kompresi NTFS :

  1. NTFS menentukan unit kompresi mana yang sedang diakses.
  2. Seluruh rentang yang dialokasikan unit kompresi dibaca.
  3. Jika unit tidak dikompresi, maka kita lewati ke langkah 5. Jika tidak, NTFS akan berusaha untuk memesan (tetapi tidak mengalokasikan) ruang yang diperlukan untuk menulis CU yang terkompresi kembali ke disk. Jika ruang kosong tidak cukup pada disk, maka aplikasi mungkin mendapatkan ERROR_DISK_FULL selama membaca.
  4. CU akan didekompresi dalam memori .
  5. Rentang byte yang dikompresi akan dipetakan ke dalam cache dan dikembalikan ke aplikasi yang meminta.
  6. ...

Tentu saja, jika Anda kehabisan memori, memori yang digunakan oleh proses dekompresi dapat menyebabkan memori lain dikeluarkan dan ditulis ke disk dalam file halaman. Untungnya, hanya potongan yang berisi bagian yang benar-benar dibaca program Anda akan didekompresi; NTFS tidak perlu mendekompres semuanya jika Anda hanya perlu beberapa byte.

Jika SSD Anda cepat, Anda mungkin tidak akan mendapatkan peningkatan kecepatan dari kompresi NTFS. Bisa dibayangkan bahwa waktu yang dihabiskan prosesor Anda untuk mendekompresi data plus waktu yang dihabiskan disk Anda untuk membaca data yang dikompresi dapat menambah lebih dari waktu yang diperlukan SSD Anda untuk membaca data yang tidak terkompresi. Ini juga tergantung pada ukuran file yang Anda kerjakan. Ukuran minimum file yang dapat dikompresi berkisar dari 8 KB hingga 64 KB, tergantung pada ukuran cluster Anda. File apa pun yang kurang dari ukuran itu tidak akan dikompresi sama sekali, tetapi sejumlah kecil pembukuan akan ditambahkan.

Jika Anda banyak menulis ke file terkompresi, Anda bisa melihat banyak variasi dalam kecepatan karena algoritma kompresi yang digunakan (LZ).

Bacaan lebih lanjut: Bagaimana kompresi NTFS mempengaruhi kinerja?


1
> jika Anda kehabisan memori, data yang terkompresi dapat di-paging dan dituliskan ke disk dalam file halaman [rujukan?] - algoritma yang cerdas hanya akan membuang data yang terkompresi dan melakukan dekompresi lagi pada akses berikutnya, dengan asumsi kompresi (de) adalah perintah yang besarnya lebih cepat daripada paging. Bahkan, itulah yang terjadi dengan cache halaman - dan saya berharap bahwa Windows hanya akan menempatkan data yang terkompresi ini ke dalam cache yang sama. (Di Windows, semua file r / w melewati cache halaman, meskipun saat ini sedang write-through.)
Bob

Memang, mungkin itulah yang dilakukannya. Saya telah menyesuaikan bagian dari jawabannya, terima kasih.
Ben N

"Rentang byte yang terkompresi akan dipetakan ke dalam cache " Apakah Anda tahu apa definisi cache di sini? Hanya penasaran. ----- "Jika tidak, NTFS akan berusaha untuk memesan ruang yang diperlukan untuk menulis CU yang telah dikompres kembali ke disk." Apakah kita tahu alasan pasti untuk ini? Apakah Microsoft mengasumsikan di sini bahwa modifikasi pada file tidak akan menambah ukuran yang akan menyebabkan total ukuran terkompresi melampaui ukuran asli yang tidak dikompresi? Sepertinya asumsi yang sial.
Menyebabkan Arus Bawah Di Mana Saja

Jadi dalam ringkasan kita melihat: Baca dari disk, -> baca MFT untuk memeriksa cukup ruang untuk menulis dekompresi, -> dekompresi dalam memori, -> membuangnya ke dalam cache aplikasi yang meminta? apakah kita berbicara tentang byte pribadi aplikasi? hanya penasaran. ---------- Apakah ini yang kita cari di sini?
Menyebabkan Arus Bawah Di Mana Saja

1
@CausingUnderflowsEverywhere Cache itu adalah IO cache , yang membuatnya jadi banyak pembacaan tidak semua perlu diservis oleh disk. NTFS memang berharap bahwa data baru akan sesuai dengan CU yang ada, tetapi memastikan bahwa ada ruang jika tidak. Ini adalah pemahaman saya bahwa IO cache tidak spesifik untuk satu aplikasi, meskipun data akan berakhir di memori pribadi program ketika dipanggil.
Ben N
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.