Các tệp sử dụng nén NTFS được giải nén vào đĩa hoặc vào bộ nhớ?


14

Làm thế nào để giải nén NTFS hoạt động trong Windows? Theo Microsoft, giải nén NTFS được thực hiện bằng cách mở rộng tệp, sau đó sử dụng tệp. Điều đó nghe có vẻ đúng, nhưng câu hỏi của tôi là làm thế nào quá trình này xảy ra về mặt kỹ thuật.

Windows có tải tập tin nén vào bộ nhớ, mở rộng nó trong bộ nhớ và đọc từ bộ nhớ không? Hoặc nó tải tập tin nén vào bộ nhớ, mở rộng nó vào đĩa hoặc trong bộ nhớ, ghi vào đĩa, sau đó đọc?

Tôi đang cố gắng tìm hiểu xem có lẽ tôi có thể cải thiện hiệu suất của máy tính hay không bằng cách sử dụng nén NTFS. Bằng cách đó, ổ đĩa chậm hoặc SSD không thể xử lý nhiều thao tác ghi sẽ luôn có ít dữ liệu để ghi và đọc và bộ xử lý mạnh mẽ của tôi không hoạt động hầu hết thời gian có thể giải nén các tệp, cải thiện tốc độ lưu trữ và sức khỏe của tôi .


1
Tôi đã chỉnh sửa câu hỏi của bạn để tập trung hơn vào việc các tập tin được giải nén vào bộ nhớ hay đĩa. Theo cách đó, nó sẽ ít có khả năng bị đóng lại như là một bản sao của câu hỏi khác này , nó chạm nhiều hơn vào các khía cạnh khác.
Ben N

Câu trả lời:


19

Windows giải nén tập tin vào bộ nhớ. Làm điều đó vào đĩa sẽ hoàn toàn xóa sạch mọi cải tiến tốc độ và sẽ gây ra nhiều việc ghi đĩa không cần thiết. Xem phần cuối của bài viết blog này của Microsoft về các tệp thưa và nén NTFS :

  1. NTFS xác định đơn vị nén nào đang được truy cập.
  2. Toàn bộ phạm vi được phân bổ của đơn vị nén được đọc.
  3. Nếu thiết bị không được nén, thì chúng ta bỏ qua bước 5. Nếu không, NTFS sẽ cố gắng dự trữ (nhưng không phân bổ) không gian cần thiết để ghi CU được giải nén trở lại vào đĩa. Nếu không đủ dung lượng trống trên đĩa, thì ứng dụng có thể nhận được ERROR_DISK_FULL trong quá trình đọc.
  4. CU sẽ được giải nén trong bộ nhớ .
  5. Phạm vi byte được giải nén sẽ được ánh xạ vào bộ đệm và trở lại ứng dụng yêu cầu.
  6. ...

Tất nhiên, nếu bạn thiếu bộ nhớ, bộ nhớ được sử dụng bởi quá trình giải nén có thể khiến bộ nhớ khác bị xóa và ghi vào đĩa trong tệp trang. May mắn thay, chỉ các đoạn có chứa các phần mà chương trình của bạn thực sự đọc sẽ được giải nén; NTFS không phải giải nén toàn bộ nếu bạn chỉ cần một vài byte.

Nếu SSD của bạn nhanh, có lẽ bạn sẽ không được cải thiện tốc độ từ nén NTFS. Có thể hình dung rằng thời gian bộ xử lý của bạn dành cho việc giải nén dữ liệu cộng với thời gian mà đĩa của bạn dành để đọc dữ liệu nén có thể tăng thêm nhiều hơn thời gian mà SSD của bạn dành để đọc dữ liệu không nén. Nó cũng phụ thuộc vào kích thước của các tập tin bạn làm việc với. Kích thước tối thiểu của tệp có thể nén nằm trong khoảng từ 8 KB đến 64 KB, tùy thuộc vào kích thước cụm của bạn. Bất kỳ tệp nào có kích thước nhỏ hơn kích thước đó sẽ không được nén, nhưng một lượng nhỏ sổ sách sẽ được thêm vào.

Nếu bạn thực hiện nhiều thao tác ghi vào các tệp nén, bạn có thể thấy rất nhiều phương sai về tốc độ do thuật toán nén được sử dụng (LZ).

Đọc thêm: Nén NTFS ảnh hưởng đến hiệu suất như thế nào?


1
> nếu bạn thiếu bộ nhớ, dữ liệu giải nén có thể được phân loại và ghi vào đĩa trong tệp trang [cần dẫn nguồn] - một thuật toán thông minh sẽ đơn giản loại bỏ dữ liệu giải nén và thực hiện lại giải nén trong lần truy cập tiếp theo, với giả định (de) nén là các lệnh có cường độ nhanh hơn so với phân trang. Trên thực tế, đó đã là những gì xảy ra với bộ đệm trang - và tôi hy vọng rằng Windows sẽ đơn giản đưa dữ liệu được giải nén này vào cùng bộ đệm đó. (Trong Windows, tất cả các tệp r / w đều đi qua bộ đệm của trang, ngay cả khi nó ghi lại.)
Bob

Thật vậy, đó có lẽ là những gì nó làm. Tôi đã điều chỉnh một phần câu trả lời, cảm ơn.
Ben N

"Phạm vi byte được giải nén sẽ được ánh xạ vào bộ đệm " Bạn có biết định nghĩa của bộ đệm ở đây là gì không? Chỉ tò mò thôi. ----- "Nếu không, NTFS sẽ cố gắng dành dung lượng cần thiết để ghi CU được giải nén trở lại vào đĩa." Chúng ta có biết lý do chính xác cho việc này không? Có phải Microsoft giả định ở đây rằng việc sửa đổi tệp sẽ không thêm kích thước sẽ khiến tổng kích thước được nén vượt quá kích thước chưa nén ban đầu? Có vẻ như một giả định sucky.
CausingUnderflowsEverywhere 16/07/2016

Vì vậy, tóm lại, chúng tôi đang xem xét: Đọc từ đĩa, -> đọc MFT để kiểm tra đủ dung lượng để ghi giải nén, -> giải nén trong bộ nhớ, -> ném nó vào bộ đệm của ứng dụng yêu cầu? chúng ta đang nói về byte riêng của ứng dụng? chỉ tò mò thôi. ---------- Đây có phải là những gì chúng ta đang xem xét ở đây?
CausingUnderflowsEverywhere 16/07/2016

1
@CausingUnderflowsEverywhere Bộ đệm đó là bộ đệm IO , khiến cho nhiều lần đọc sẽ không cần phải được phục vụ bởi đĩa. NTFS không hy vọng rằng dữ liệu mới sẽ phù hợp với các CU hiện có, nhưng nó đảm bảo rằng có không gian nếu không có. Theo hiểu biết của tôi rằng bộ đệm IO không dành riêng cho một ứng dụng, mặc dù dữ liệu sẽ kết thúc trong bộ nhớ riêng của chương trình khi được yêu cầu.
Ben N
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.