SSD 上的 NTFS 壓縮 - 起伏

SSD 上的 NTFS 壓縮 - 起伏

這個話題討論了 HDD 上的 NTFS 壓縮作為提高磁碟存取效能的一種方法,並得出結論,它通常在這方面表現不佳。但我一直將壓縮視為節省空間的一種方式,並從中了解了它的有效性。現在我有一個 SSD,其空間昂貴且效能損失(例如,讀取/寫入 2 個叢集而不是 1 個叢集)要低得多。

另一方面,由於 SSD 比 HDD 快得多,我預計更高的吞吐量將導致更高的 CPU 使用率。這會成為一個問題嗎?對此事還有其他想法嗎?

我喜歡節省空間的效果,雖然不是很大,但確實存在。不過,如果性能是一個問題,我寧願將其關閉:

在此輸入影像描述

答案1

微軟不久前在部落格中寫過這個:

NTFS 透過將資料流劃分為 CU 來壓縮檔案(這類似於稀疏檔案的工作方式)。當建立或變更流內容時,資料流中的每個 CU 都會被單獨壓縮。如果壓縮導致減少一個或多個簇,則壓縮單元將以壓縮格式寫入磁碟。然後,將稀疏 VCN 範圍附加到壓縮 VCN 範圍的末端以進行對齊(如下例所示)。如果資料壓縮程度不足以將大小減少一簇,則整個 CU 將以未壓縮的形式寫入磁碟。

這種設計使得隨機存取速度非常快,因為只需要解壓縮一個 CU 即可存取檔案中的任何單一 VCN。不幸的是,大的順序存取會相對較慢,因為需要解壓縮許多 CU 來執行順序操作(例如備份)。

並且在一個知識庫文章寫了這個:

雖然 NTFS 檔案系統壓縮可以節省磁碟空間,但壓縮資料會對效能產生不利影響。NTFS 壓縮具有以下效能特性。當您將壓縮的 NTFS 文件複製或移動到其他資料夾時,NTFS 會解壓縮該文件,將文件複製或移動到新位置,然後重新壓縮該文件。即使在同一台電腦上的資料夾之間複製或移動文件,也會發生此行為。壓縮檔案在透過網路複製之前也會擴展,因此 NTFS 壓縮不會節省網路頻寬。

因為 NTFS 壓縮是處理器密集型,效能成本在通常受處理器限制的伺服器上更為明顯。具有大量寫入流量的重負載伺服器不適合進行資料壓縮。但是,對於唯讀、主要讀取或輕負載的伺服器,您可能不會遇到明顯的效能下降。

如果您執行的程式使用交易日誌記錄並且不斷寫入資料庫或日誌,請將程式配置為將其檔案儲存在未壓縮的磁碟區上。如果程式透過壓縮檔案中的映射部分修改數據,則程式產生「髒」頁的速度可能比映射寫入器寫入它們的速度快。由於此問題,Microsoft 訊息佇列(也稱為 MSMQ)等程式無法使用 NTFS 壓縮。

由於使用者主資料夾和漫遊設定檔使用大量讀取和寫入操作,因此 Microsoft 建議您將使用者主資料夾和漫遊設定檔放置在父資料夾或磁碟區根上沒有 NTFS 壓縮的磁碟區上。


概括:

只壓縮永遠不會改變的小檔案(只讀取而不寫入),因為讀取速度很快,但寫入需要解壓縮和新的壓縮,這會佔用CPU 功率,並且儲存類型並不那麼重要。

答案2

由於克勞迪奧詳細說了很多事情,我將恢復他的觀點,這也是我的,在嘗試他所說的話之後,我看到了相同的效果。

對於 SSD,不得使用 NTFS 壓縮。

現在我將列舉這樣的肯定的一些動機:

動機 N°1:它會更快殺死 SSD,因為它會進行兩次寫入; NTFS 壓縮始終在開始壓縮之前將未壓縮的資料寫入 RAM,然後僅在獲得至少 4KiB 的增益時才重新寫入壓縮資料。

動機N°2:在SSD 上使用NTFS 4KiB 叢集會損失50% 的SSD 速度,檢查任何基準測試都會發現128KiB 區塊使SSD 比使用4KiB 區塊快兩倍,並且NTFS 壓縮只能在4KiB 叢集NTFS 分割區上使用。

動機N°3:有些容器(如PISMO File Mount)可以建立一個被視為動態壓縮和/或加密的容器,此類容器在RAM 上進行壓縮,並且在重寫之前不會將未壓縮的資料傳送到磁碟在壓縮形式上,PISMO比NTFS獲得更好的壓縮比。

還有更多動機,但這是最重要的動機。

另一點是速度,任何壓縮都是在CPU上完成的,所以如果你沒有一個非常快的CPU(在NTFS上使用單線程,而在某些容器上使用多線程)將會看到非常慢的讀/寫當壓縮時;最糟糕的是,你可以擁有一個非常快的 CPU,但如果它用於其他事情(如渲染、轉碼等),則沒有 CPU 可供壓縮,因此你的效能也會很差。

NTFS 壓縮只適用於傳統的慢速磁碟,當您的CPU 沒有太多使用時,但它需要在每次寫入後(在檔案層級)進行良好的碎片整理,因為每個64KiB 區塊(壓縮或未壓縮)都寫入64KiB 位置的倍數;打包此類碎片的唯一方法是在壓縮(或寫入壓縮資料夾)後對此類檔案進行碎片整理。

PD:請注意,我們談論的是真實硬體上的 Windows,而不是虛擬機內的 Windows,重要的是誰寫入實體介質,其他介質可能具有快取層,可以減輕影響並大大改善情況。

答案3

我看到其他人的評論,我認為人們經常忘記 NTFS 檔案/資料夾壓縮在 SSD 上具有巨大優勢的最有用場景:現代開發工具。我的大學授權的 Matlab在其(一般使用者唯讀)安裝資料夾中包含以下資料量:

28.5 GB 資料 30.6 GB 磁碟大小 包含 729.246 個檔案和 15.000 個資料夾(!!!)

這是在我的帶有 500 GB SSD 的筆記型電腦上,其中 Windows 分割區是 200 GB。

我知道 Matlab 在這方面有點極端,但許多開發工具都有類似的屬性:大量小型、高度可壓縮的文字檔案(標頭、程式碼、XML 檔案)。我在安裝之前正在壓縮 Matlab英特爾 Quartus FPGA開發工具,以及八度已經壓縮如下:

1.55 GB 磁碟上的資料大小:839 GB 包含 34.362 個檔案 1.955 個資料夾

這些東西只寫一次,在專案建構過程中會被讀取無數次。花費是完全有意義的一些CPU 能力可解壓縮,並節省約一半的寶貴 SSD 空間。

答案4

您需要進行兩次基準測試才能知道。壓縮的。未壓縮。忘記 SSD 上的磨損。您需要快速的 SSD 和 CPU,以免出現瓶頸。

如今,512GB 的 SSD 售價為 50 美元。到目前為止,對我來說最快的磁碟存取是盡可能使用 Linux 和 LIFO 磁碟佇列機制。而不是CFQ。

我的筆記型電腦上安裝了 12GB 內存,Windows 10 創建了無限的磁碟活動。之後 Linux mint 載入並且磁碟存取幾乎為零。除非你主動發起。 Windows 有一種方法可以讓自己在沒有可見任務的情況下保持忙碌。

相關內容