效能注意事項

本頁提供相關指引,說明如何設定 Parallelstore 環境,以獲得最佳效能。

一般建議

  • ls 移除所有別名,以提升預設成效。 在許多系統上,這個別名會設為 ls -color=auto,但使用預設的 Parallelstore 設定時,速度會慢很多。

  • 如果清單作業的效能緩慢,請考慮為 dfuse 掛接啟用快取。

攔截程式庫

應用程式使用 libc 時,可透過 libioil 程式庫提升 DFuse 的讀寫作業效能。這個程式庫會攔截應用程式的 POSIX 讀取和寫入呼叫,略過核心,直接在使用者空間中提供服務。詳情請參閱攔截程式庫

在大多數情況下,建議您在每個程序或每個應用程式的叫用上使用攔截程式庫。

您可能不想或不需要使用攔截程式庫的情況包括:

  • 只有使用 libc 建構的應用程式才能使用攔截程式庫。
  • 如果您有需要快取的工作負載 (例如重複存取相同檔案),建議不要使用攔截程式庫。
  • 如果工作負載需要大量中繼資料,例如處理許多小型檔案或非常龐大的目錄清單,攔截程式庫可能無法提升效能。

您可以在 Shell 環境中將 LD_PRELOAD 呼叫設為環境變數,但有時可能會造成問題。建議您改為在每個指令中指定。

或者,您也可以在編譯時使用 -lioil 標記,將攔截程式庫連結至應用程式。

dfuse 快取

dfuse 預設會啟用快取功能。

掛接 Parallelstore 執行個體時,dfuse 會使用兩個與快取相關的標記:

  • --disable-wb-cache 使用直寫式快取,而非回寫式快取。
  • --disable-caching 會停用所有快取。

以下是快取和效能方面的建議:

  • 如果您使用攔截程式庫,系統會略過回寫快取。建議您在使用攔截程式庫時指定 --disable-wb-cache
  • 如果工作負載涉及一次讀取多個檔案,請停用快取。
  • 如果工作負載涉及多個用戶端修改檔案,且更新內容必須立即提供給其他用戶端,您就必須停用快取。
  • 如果工作負載是重複讀取相同檔案,快取功能可以提升效能。如果檔案符合用戶的記憶體容量,這種情況就更加明顯。dfuse 會使用 Linux 頁面快取進行快取。
  • 如果工作負載包含對大型檔案的小型 I/O,除了啟用快取外,增加 dfuse 預先讀取可能也有幫助。如要增加 dfuse 預先讀取量,請在掛接 dfuse 後執行下列指令:

    echo 4096 > /sys/class/bdi/\$(mountpoint -d /mnt)/read_ahead_kb
    echo 100 > /sys/class/bdi/\$(mountpoint -d /mnt)/max_ratio
    

如果工作負載涉及上述多種情境,您可以將同一個 Parallelstore 執行個體掛接至多個掛接點,並使用不同的快取設定。

執行緒數量和事件佇列數量

掛接 Parallelstore 執行個體時,建議為 --thread-count--eq-count 設定下列值:

  • 執行緒計數值不得超過 vCPU 核心數。
  • 建議執行緒計數值上限介於 16 到 20 之間。無論可用核心數量為何,超過這個數字後,效能幾乎不會提升。
  • 事件佇列值應為執行緒計數值的一半。

如果工作負載涉及大量的小型檔案作業和大量的中繼資料存取,您可以嘗試將數字調高至超過這些建議值。

檔案拆分設定

檔案條紋化是一種資料儲存技術,可將檔案分割成區塊或條紋,並分散到多個儲存目標。檔案條帶化可讓執行個體支援多個儲存空間目標,並允許平行讀取和寫入,進而提升效能。

建立 Parallelstore 執行個體時,您可以指定下列三種檔案條紋設定之一:

  • 下限
  • 平衡
  • 上限

這些設定可能會對 Parallelstore 成效造成重大影響。 對於大多數工作負載,我們建議使用「平衡」設定,這應該是大多數工作負載的合理折衷方案。如果平衡設定的效能不符需求:

  • 如果工作負載包含許多小型檔案,特別是平均檔案大小小於 256 KB 時,建議使用最低設定,以提升效能。

  • 如果工作負載包含非常大的檔案 (通常超過 8 GB),且多個用戶端共用存取權,建議將設定調到最高,以提升效能。

如要進行進階調整,daos 工具可提供個別檔案或目錄設定。實驗進階調整功能會帶來效能相關風險,因此一般不建議使用。詳情請參閱「瞭解 DAOS 中的資料冗餘和分片」。

目錄條紋設定

建立 Parallelstore 執行個體時,您可以指定下列三種目錄條紋設定之一:

  • 下限
  • 平衡
  • 上限

對於大多數工作負載,我們建議使用最高設定。

如果工作負載涉及大量列出大型目錄,平衡或最低設定可提升清單效能。不過,其他作業 (尤其是檔案建立作業) 的效能可能會受到影響。

多使用者

使用 dfuse 工具掛接 Parallelstore 執行個體時,建議您指定 --multi-user 旗標。這個標記會告知核心,讓用戶端上的所有使用者都能存取檔案系統,而不只是執行 DFuse 程序的使用者。DFuse 隨即會顯示為一般多使用者檔案系統,並啟用標準 chownchgrp 呼叫。所有檔案系統項目都由建立者擁有,這與 POSIX 檔案系統的正常情況相同,

指定 --multi-user 旗標時,您也必須以根身分更新 /etc/fuse.conf,方法是加入下列指令列:

user_allow_other

將執行個體掛接為多使用者時,似乎不會影響效能。

刪除編碼設定

清除編碼設為 2+1。這項設定無法變更。凡是不使用 EC2+1 的 I/O 都會遭到拒絕。

Google Kubernetes Engine Sidecar 容器資源分配

在大多數情況下,Google Kubernetes Engine 和 Parallelstore 的效能不佳,是因為分配給 Parallelstore Sidecar 容器的 CPU 或記憶體不足。如要妥善分配資源,請參考下列建議:

  • 請詳閱「為 Sidecar 容器設定資源」一文中的注意事項。您將瞭解為何可能需要增加資源分配量,以及如何使用 Pod 註解設定 Sidecar 容器資源分配量。

  • 您可以使用 0 值,關閉標準叢集上的任何資源限制或要求。舉例來說,如果設定 gke-parallelstore/cpu-limit: 0gke-parallelstore/memory-limit: 0,側車容器的 CPU 和記憶體限制會是空白,並使用預設要求。如果您不確定工作負載需要多少 dfuse 資源,並希望 dfuse 使用節點上的所有可用資源,這項設定就非常實用。根據工作負載指標判斷 dfuse 需要多少資源後,即可設定適當的限制。

  • 在 Autopilot 叢集上,您無法使用值 0 取消設定 Sidecar 容器的資源限制和要求。您必須在 Autopilot 叢集上,為 Sidecar 容器明確設定較大的資源限制,並依據 Google Cloud 指標決定是否需要提高資源限制。