NTFS sıkıştırmasını kullanan dosyalar diske veya belleğe açılıyor mu?


14

NTFS dekompresyonu Windows'ta nasıl çalışır? Microsoft'a göre, NTFS sıkıştırması dosyayı genişletip sonra kullanarak yapılır. Kulağa doğru geliyor, ama sorum bu sürecin teknik olarak nasıl gerçekleştiğidir.

Windows sıkıştırılmış dosyayı belleğe yükler, bellekte genişletir ve bellekten okur mu? Yoksa sıkıştırılmış dosyayı belleğe yüklüyor, diske mi yoksa belleğe mi genişletiyor, diske mi yazıyor ve okuyor mu?

Belki de NTFS sıkıştırması kullanarak bilgisayarımın performansını artırabilir miyim anlamaya çalışıyorum. Bu şekilde, birçok yazma işleminin her zaman yazmak ve okumak için daha az veriye sahip olamayacağı yavaş disk sürücüsü veya SSD ve çoğu zaman boşta duran güçlü işlemcim dosyaları açabilir, depolama hızımı ve sağlığımı iyileştirebilir .


1
Sorunuzu, dosyaların belleğe mi yoksa diske mi açıldığına daha fazla odaklanmak için düzenledim. Bu şekilde, diğer yönlere daha fazla değinen bu diğer sorunun bir kopyası olarak kapatılması çok daha az olası olacaktır .
Ben N

Yanıtlar:


19

Windows dosyaları belleğe açar. Diskin üzerine takılması, herhangi bir hız iyileştirmesini tamamen ortadan kaldıracak ve çok fazla gereksiz disk yazımına neden olacaktır. NTFS seyrek dosyaları ve sıkıştırma hakkındaki bu Microsoft blog makalesinin sonuna bakın :

  1. NTFS, hangi sıkıştırma birimine erişildiğini belirler.
  2. Sıkıştırma biriminin ayrılan tüm aralığı okunur.
  3. Ünite sıkıştırılmamışsa, 5. adıma atlarız. Aksi takdirde, NTFS sıkıştırılmış CU'yu diske geri yazmak için gereken alanı ayırmaya çalışır (ancak ayırmaz). Diskte yeterli boş alan yoksa, uygulama okuma sırasında ERROR_DISK_FULL alabilir.
  4. CU hafızada açılır .
  5. Açılmış bayt aralığı önbellekte eşlenir ve istekte bulunan uygulamaya geri gönderilir.
  6. ...

Tabii ki, hafızanız yetersizse, dekompresyon işlemi tarafından kullanılan hafıza başka bir belleğin sayfalanmasına ve sayfa dosyasında diske yazılmasına neden olabilir. Neyse ki, yalnızca programlarınızın gerçekten okuduğu bölümleri içeren parçalar açılır. Yalnızca birkaç bayta ihtiyacınız varsa NTFS'nin her şeyi açması gerekmez.

SSD'niz hızlıysa, muhtemelen NTFS sıkıştırmasından hız iyileştirmeleri alamayacaksınız. İşlemcinizin sıkıştırılmış verileri harcadığı sürenin yanı sıra diskinizin sıkıştırılmış verileri okumak için harcadığı sürenin SSD'nizin sıkıştırılmamış verileri okuma süresinden daha fazla olması düşünülebilir. Ayrıca, üzerinde çalıştığınız dosyaların boyutuna da bağlıdır. Sıkıştırılabilir bir dosyanın minimum boyutu, küme boyutunuza bağlı olarak 8 KB ile 64 KB arasında değişir. Bu boyuttan küçük dosyalar hiç sıkıştırılmayacak, ancak az miktarda defter tutma eklenecektir.

Sıkıştırılmış dosyalara çok fazla yazı yazıyorsanız, kullanılan sıkıştırma algoritması (LZ) nedeniyle hızda çok fazla değişiklik görebilirsiniz.

İlave değerler: NTFS sıkıştırması performansı nasıl etkiler?


1
> bellek yetersizse, sıkıştırılmış veriler sayfa dosyasında disk içine yazılabilir ve diske yazılabilir [alıntı gerekli] - akıllı bir algoritma sıkıştırılmış verileri dışarı atar ve bir sonraki erişimde dekompresyonu tekrar gerçekleştirir. (de) sıkıştırma varsayımı, çağrıdan daha büyük büyüklük sıralarıdır. Aslında, sayfa önbelleğinde zaten olan şey budur - ve Windows'un bu sıkıştırılmış verileri aynı önbelleğe koymasını beklerdim. (Windows'da, tüm dosya r / w, yazma sırasında bile sayfa önbelleğinden geçer.)
Bob

Gerçekten de, muhtemelen böyle yapar. Cevabın bu kısmını ayarladım, teşekkürler.
Ben N

"Sıkıştırılmış bayt aralığı önbelleğe eşlenir " Burada önbellek tanımının ne olduğunu biliyor musunuz? Sadece merak. ----- "Aksi takdirde NTFS, sıkıştırılmış CU'yu diske geri yazmak için gereken alanı ayırmaya çalışır." Bunun kesin nedenini biliyor muyuz? Microsoft burada, dosyada yapılan değişikliğin toplam sıkıştırılmış boyutun orijinal sıkıştırılmamış boyutu aşmasına neden olacak boyut eklemeyeceğini mi varsayıyor? Berbat bir varsayım gibi görünüyor.
CausingUnderflowsEverywhere

Özetle bakıyoruz: Diskten oku, -> MFP'yi, sıkıştırılmamış yazmak için yeterli alan olup olmadığını kontrol edin, -> bellekte sıkıştırmayı açın, -> istekte bulunan uygulamanın önbelleğine atmak mı istiyorsunuz? Uygulamanın özel baytlarından mı bahsediyoruz? sadece merak. ---------- Burada baktığımız şey bu mu?
CausingUnderflowsEverywhere

1
@CausingUnderflowsEverywhere Bu önbellek, IO önbelleğidir ; NTFS, yeni verilerin mevcut CU'lara sığacağını umuyor, ancak yoksa boş alan olmasını sağlıyor. IO önbelleğinin bir uygulamaya özgü olmadığını anlıyorum, ancak veriler istendiğinde programın özel belleğinde yer alacaktır.
Ben N
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.