Cloud Storage FUSE 提供四種選用快取功能,有助於提升資料擷取效能:
檔案快取總覽
Cloud Storage FUSE 檔案快取是一種以用戶端為基礎的讀取快取,可從您選擇的更快速快取儲存空間提供重複檔案讀取服務。
檔案快取的優點
提升效能:檔案快取可直接從快取媒體提供讀取服務,進而縮短延遲時間並提升處理量。從快取提供的話,小型隨機 I/O 作業速度可以大幅提升。
使用現有容量:檔案快取可使用快取目錄的現有已配置機器容量,不必支付額外儲存空間費用。這包括 Cloud GPU 機器類型 (例如
a2-ultragpu
、a3-highgpu
、永久磁碟 (這是每個 VM 使用的開機磁碟) 或記憶體內/tmpfs
) 隨附的本機 SSD。降低費用:快取命中會在本機提供,不會產生 Cloud Storage 作業或網路費用。
改善 AI 和 ML 訓練的總持有成本:檔案快取功能可加快資料載入速度,進而提高 Cloud GPU 和 Cloud TPU 的使用率,縮短訓練時間,並為 AI 和 ML 訓練工作負載提供更高的性價比。
並行下載
啟用檔案快取功能後,系統會自動啟用並行下載功能。平行下載可加快超過 1 GB 的大型檔案 (包括首次讀取) 的讀取效能,使用多個 worker 以檔案快取目錄做為預先讀取緩衝區,平行下載檔案。建議您使用平行下載功能,針對提供、查核點還原作業和大型物件訓練作業。如要進一步瞭解平行下載功能,請參閱「平行下載」。
隨機與部分讀取
如果第一個檔案讀取作業從檔案開頭的偏移量 0
開始,Cloud Storage FUSE 檔案快取會擷取並將整個檔案載入快取,即使您只讀取小範圍的子集也一樣。這可讓後續針對相同物件的隨機或部分讀取作業,直接從快取中取得資料。
如果檔案的第一個讀取作業是從偏移量 0
以外的任何位置開始,Cloud Storage FUSE 預設不會觸發非同步的完整檔案擷取作業。如要變更這項行為,讓 Cloud Storage FUSE 在初始隨機讀取時將檔案取入快取,請將 cache-file-for-range-read
標記設為 true
。如果在同一個物件上執行許多不同的隨機或部分讀取作業,建議您啟用 cache-file-for-range-read
標記。
驅逐
快取中繼資料和資料的淘汰作業會根據最久未使用 (LRU) 演算法執行,當每個 max-size-mb
限制設定的空間閾值達到時,就會開始淘汰。如果項目因 TTL 而到期,系統會先向 Cloud Storage 發出 Get 中繼資料呼叫,並受網路延遲影響。由於資料和中繼資料是分開管理,因此您可能會發現某個實體遭到淘汰或失效,而另一個實體則沒有。
持續性
在卸載和重新啟動時,Cloud Storage FUSE 快取不會保留。就檔案快取而言,雖然從快取中提供檔案所需的中繼資料項目會在卸載和重新啟動時遭到淘汰,但檔案快取中的資料可能仍會留在檔案目錄中。您應在卸載或重新啟動後,刪除檔案快取目錄中的資料。
安全性
啟用快取功能後,Cloud Storage FUSE 會使用您使用 cache-dir
欄位指定的快取目錄做為快取的基礎目錄,以未加密的格式儲存 Cloud Storage 值區中的檔案。任何可存取此快取目錄的使用者或程序,都可以存取這些檔案。建議您限制存取這個目錄的權限。
直接或多次存取檔案快取
使用 Cloud Storage FUSE 以外的程序存取或修改快取目錄中的檔案,可能會導致資料毀損。Cloud Storage FUSE 快取是特定於每個 Cloud Storage FUSE 執行程序,不會在同一或不同機器上執行的不同 Cloud Storage FUSE 程序之間進行感知。因此,我們不建議為不同的 Cloud Storage FUSE 程序使用相同的快取目錄。
如果需要在同一台電腦上執行多個 Cloud Storage FUSE 程序,每個 Cloud Storage FUSE 程序都應取得專屬的快取目錄,或使用下列任一方法,確保資料不會遭到損毀:
使用共用快取掛載所有桶:使用動態掛載功能,在單一程序中使用共用快取掛載您可存取的所有桶。如需更多資訊,請參閱「Cloud Storage FUSE 動態掛載」。
啟用特定值區的快取功能:只在使用靜態掛載的特定值區啟用快取功能。詳情請參閱「Cloud Storage FUSE 靜態掛載」。
只快取特定資料夾或目錄:只掛載及快取特定值區層級資料夾,而非掛載整個值區。詳情請參閱「在值區中掛載目錄」。
統計資料快取總覽
Cloud Storage FUSE 統計快取是物件中繼資料的快取,可改善檔案屬性 (例如大小、修改時間或權限) 特定作業的效能。使用統計資料快取時,系統會使用快取資料執行作業,而非將統計資料物件要求傳送至 Cloud Storage,藉此縮短延遲時間。如要進一步瞭解統計資料快取,請參閱 GitHub 上的 Semantics 說明文件。
統計資料快取預設為啟用狀態,可使用 Cloud Storage FUSE 設定檔進行設定。快取的大小上限由 stat-cache-max-size-mb
欄位控制,其預設值為 32
(32 MB)。快取的 TTL 是由 ttl-secs
欄位控制,其預設值為 60
(60 秒)。
Cloud Storage FUSE 也提供負面統計資料快取功能,可讓您為不存在的檔案或負面結果設定統計資料快取項目的 TTL。負面統計資料快取的 TTL 是由 negative-ttl-secs
欄位控制,其預設值為 5
(5 秒)。
最佳做法
如果工作負載涉及的檔案數量不超過 20,000 個,建議您為 stat-cache-max-size-mb
欄位使用預設值 32
,以便快取統計資料。如果工作負載超過 20,000 個檔案,請每增加 6,000 個檔案,就將 stat-cache-max-size-mb
值增加 10,大約為每個檔案 1,500 位元組。
stat-cache-max-size-mb
是掛載層級限制,實際記憶體用量可能低於您指定的值。或者,您也可以將 stat-cache-max-size-mb
設為 -1
,讓統計資料快取使用所需的記憶體。
類型快取總覽
Cloud Storage FUSE 類型快取是一種中繼資料快取,可加快針對檔案或目錄存在狀態的中繼資料作業效能。使用類型快取可減少向 Cloud Storage 提出的檢查檔案或目錄是否存在的請求次數,進而縮短延遲時間,因為這些資訊會儲存在本機。如要進一步瞭解類型快取,請參閱 GitHub 上的語意說明文件。
系統預設會啟用類型快取,並可使用 Cloud Storage FUSE 設定檔進行設定。快取的大小上限由 type-cache-max-size-mb
欄位控制,其預設值為 4
(4 MB)。快取的 TTL 是由 ttl-secs
欄位控制,其預設值為 60
(60 秒)。
最佳做法
針對類型快取,如果您要掛載的儲存桶中單一目錄內的檔案數量上限為 20,000 個以下,建議您為 type-cache-max-size-mb
欄位使用 4
的預設值。如果您要掛載的單一目錄內的檔案數量上限超過 20,000 個,請每增加 5,000 個檔案,就將 type-cache-max-size-mb
值增加 1
,每個檔案約為 200 位元。
type-cache-max-size-mb
是掛載層級限制,實際記憶體用量可能會低於指定的值。或者,您也可以將 type-cache-max-size-mb
值設為 -1
,讓類型快取使用所需的記憶體。
清單快取總覽
Cloud Storage FUSE 清單快取適用於目錄和檔案清單 (或 ls
) 回應,可提高清單作業速度。對於在執行過程中重複整個目錄清單的工作負載 (例如 AI/ML 訓練執行作業),清單快取特別實用。
清單快取會儲存在頁面快取的記憶體中,而頁面快取會根據記憶體可用性由核心控制,這與統計資料和類型快取不同,後者會儲存在電腦的記憶體中,並由 Cloud Storage FUSE 控制。
啟用清單快取功能
清單快取功能預設為停用。您可以使用 kernel-list-cache-ttl-secs
欄位搭配下列其中一個值,啟用清單快取功能:
正值,以秒為單位,代表在核心的頁面快取中保留目錄清單回應的存留時間 (TTL)。
值為
-1
,可略過項目到期,並在可用時從快取中傳回清單回應。
如要啟用及設定清單快取功能,請參閱 Cloud Storage FUSE 設定檔。
設定快取撤銷
以下各節將說明如何為所有快取類型設定快取無效化。
檔案、統計資料和類型快取無效
針對檔案、統計資料和類型快取,ttl-secs
欄位會以秒為單位指定 TTL,也就是從快取的中繼資料從 Cloud Storage 擷取到到期並需要重新整理的時間長度。
您可以在 Cloud Storage FUSE 設定檔中設定 ttl-secs
。
ttl-secs
欄位的預設值為 60
。如果您指定的 ttl-secs
值大於 0
,檔案快取的中繼資料只會在您指定的時間內有效。針對檔案快取,建議您根據重複讀取作業之間的預期時間,增加 ttl-secs
值,同時平衡一致性需求。根據資料變更的重要性和頻率,建議您將 ttl-secs
值設為工作負載允許的最高值。當中繼資料項目無效時,後續的讀取作業會從 Cloud Storage 查詢。
除了接受以秒為單位的值,代表快取中繼資料到期並需要重新整理前,系統會保留該值的秒數,您也可以使用下列值來指定檔案的讀取方式:
0
的ttl-secs
值:透過向 Cloud Storage 發出GET
中繼資料呼叫,確保讀取的檔案含有最新資料,以便檢查所提供的檔案,確保快取一致。如果快取中的檔案為最新版本,系統會直接從快取提供該檔案。指定0
以外的值可能會導致效能降低,因為系統一律必須先呼叫 Cloud Storage 來檢查中繼資料。如果檔案位於快取中且未變更,系統會在GET
中繼資料呼叫後,從快取中一致提供檔案。ttl-secs
的-1
值:確保檔案一律從快取中讀取 (如果有),而不會檢查一致性。未檢查一致性的檔案提供服務可能會提供不一致的資料,因此應僅暫時用於在工作中執行且資料不會變更的工作負載。舉例來說,使用-1
的值可用於機器學習訓練,在這種情況下,系統會在多個訓練週期中讀取相同的資料,且資料不會有所變動。
列出快取撤銷
您可以使用 kernel-list-cache-ttl-secs
欄位指定大於 0
的值,藉此設定清單快取無效。目錄清單回應會保留在核心的頁面快取中,並在您指定的時間內保持有效。根據預設,清單快取功能會停用,並設為 0
的值。指定 -1
值時,Cloud Storage FUSE 會停用清單快取過期功能,並在快取可用時傳回清單回應。
讀取快取資料的路徑
Cloud Storage FUSE 快取會在重複讀取內容擷取至快取後,加快讀取速度。首次讀取和快取遺漏都會直接傳送至 Cloud Storage,並受到 Cloud Storage 的一般網路延遲影響。如要改善首次讀取效能,請參閱「改善首次讀取」一文。
注意事項
啟用檔案快取、統計資料快取、類型快取或清單快取功能可提升效能,但會降低一致性,這通常會發生在您使用多個變動率高的用戶端存取相同的 bucket 時。為降低對一致性的影響,建議您將 bucket 掛載為唯讀。如要進一步瞭解快取行為,請參閱 GitHub 上的 Cloud Storage FUSE 語意說明文件。
如果檔案快取項目的 TTL 尚未到期,且檔案位於快取中,則整個作業會從本機用戶端快取中提供,不會向 Cloud Storage 發出任何要求。
如果檔案快取項目已根據 TTL 到期,系統會先向 Cloud Storage 發出取得中繼資料的呼叫,如果檔案不在快取中,系統會從 Cloud Storage 擷取檔案。這兩項作業都會受到網路延遲影響。如果中繼資料項目已失效,但檔案位於快取中,且其物件世代沒有變更,則只有在發出 Get 中繼資料呼叫後,系統才會從快取中提供檔案,以便檢查資料是否有效。
如果 Cloud Storage FUSE 用戶端修改快取檔案或其中繼資料,則該檔案會立即失效,並確保在同一個用戶端的後續讀取作業中維持一致性。不過,如果不同的用戶端存取相同的檔案或其中繼資料,且其項目已快取,則會讀取檔案或中繼資料的快取版本,而非更新版本,直到該特定用戶端的 TTL 設定使檔案失效為止。
為避免快取衝突,請確保整個資料集可容納在快取容量內。此外,請考量快取媒體可提供的最大容量和效能。如果您達到已配置快取的效能上限、容量上限,或兩者皆達到上限,建議您直接從 Cloud Storage 讀取資料,因為 Cloud Storage 的限制比 Cloud Storage FUSE 高出許多。
後續步驟
瞭解如何使用及設定檔案快取功能。
進一步瞭解如何改善讀寫效能。