本頁面說明如何調整 NetApp Volumes 的 Linux NFS 用戶端並行。
並行是指用戶端與磁碟區之間一次可進行的未完成 NFS 作業數量。調整並行作業有助於配合伺服器限制,避免佇列深度過大而導致效能下降。
在 Linux 上,並行作業是由時段表項目 (NFSv3) 或 NFSv4.1 工作階段時段控制,而非掛接選項。請先設定這些項目,再掛接 NFS 檔案系統,或在變更後重新掛接。
如要瞭解掛接選項 (例如 nconnect),請參閱「Linux NFS 掛接選項」。如要進一步瞭解設定順序,請參閱「最佳化 Linux NFS 用戶端」。
術語
以下重要詞彙與 Linux NFS 並行相關:
RPC 時段表:用戶端 (NFSv3) 待處理 NFS RPC 作業的每個 TCP 連線限制。
工作階段時段:用戶端與伺服器之間工作階段的待處理指令 NFSv4.1 限制。
儲存空間端點:用戶端掛接的單一磁碟區 IP 位址。
nconnect:掛接選項,可開啟多個連線至相同端點的 TCP 連線,並將每個連線的並行數相乘。
Linux 參數
下表列出用於設定各通訊協定版本 NFS 並行作業的參數和設定檔:
| 通訊協定 | 參數 | 設定 |
|---|---|---|
| NFSv3 | sunrpc.tcp_max_slot_table_entries |
/etc/sysctl.conf、sysctl -p |
| NFSv3 | sunrpc.tcp_slot_table_entries |
部分發行版本;請參閱發行版本說明文件 |
| NFSv4.1 | max_session_slots |
/etc/modprobe.d/ (例如 nfsclient.conf),然後重新啟動 |
NFSv3
以下各節說明 NFSv3 用戶端和伺服器限制、nconnect對並行作業的影響、如何估算並行作業需求,以及如何設定時段限制。
用戶端和伺服器限制
NFSv3 不會協商用戶端與伺服器之間的並行作業,雙方都會套用自己的限制。
NetApp Volumes NFSv3 伺服器:每個 TCP 連線最多 128 個執行環境。
新版 Linux 用戶端 (預設):
sunrpc.tcp_max_slot_table_entries = 65536。
預設用戶端時段數超出伺服器限制是不必要的。 如果用戶端傳送的待處理作業數量超出伺服器能有效處理的範圍,伺服器可能會縮減 TCP 視窗,進而影響效能。
建議:每個連線將 sunrpc.tcp_max_slot_table_entries 設為 128 以下。對於有許多用戶端和連線的環境,請將每個儲存端點的未完成運算單元總用量維持在 10,000 以下。
nconnect 對 NFSv3 並行的影響
單一用戶端的約略並行上限計算方式如下:
(sunrpc.tcp_max_slot_table_entries per connection) x (nconnect value)
並行值上限為每個連線的伺服器數 (128),以及您的工作負載需求。
範例 1:預設時段,沒有 nconnect
一個 TCP 連線。
用戶端最多可嘗試 65,536 項未完成的作業,但伺服器每個連線最多接受 128 項作業。
受限於伺服器 128 個並行作業的上限,實際並行作業數會受到限制。
範例 2:128 個時段,沒有 nconnect
sunrpc.tcp_max_slot_table_entries=128單一連線。
用戶端和伺服器會對齊 128 項待處理作業。
範例 3:100 個時段,nconnect=8
八個 TCP 連線。
每個連線最多可有 100 項待處理作業。
每個用戶端最多可有 800 項待處理作業 (8 x 100),但每個連線的伺服器上限為 128。
範例 4:多個用戶端 (EDA 樣式)
250 個用戶端,每個用戶端都有
sunrpc.tcp_max_slot_table_entries=8和沒有nconnect。每個用戶端在每個連線中最多可有八項待處理作業。
用戶端總計:一個大量 IP 最多可有 2,000 項待處理作業 (250 x 8),符合 10,000 個運算單元的端點指南。
水平擴展用戶端時,請使用較低的每個用戶端運算單元值。請在個別高輸送量用戶端上使用 nconnect,而非做為農場範圍內時段規劃的替代方案。
使用 Little 定律估算所需並行數
請使用下列公式估算工作負載所需的並行數:
並行 = (作業率) x (延遲時間,以秒為單位)
範例:多個用戶端,一個端點
以 256 KiB 的平均 I/O 和 10 毫秒的延遲時間為目標,達到 4,000 MiBps:
作業率:約 16,000 IOPS。
並行:大約 16,000 x 0.010 = 160。
1,250 個用戶端:如果平均分配,每個用戶端約有 0.13 個時段 (160 / 1,250)。每個用戶端使用小型整數 (例如 2、4 或 8),以維持 10,000 個時段上限以下的空間。
設定 sunrpc.tcp_max_slot_table_entries (NFSv3)
在許多 Linux 發行版中,systemd-sysctl 會在載入 sunrpc 核心模組前執行。開機時,系統會忽略 /etc/sysctl.conf 或 /etc/sysctl.d/ 中的 sunrpc.* 項目。如果沒有使用下列其中一種持續性方法,開機後執行 sysctl -p 只會生效到下次重新啟動為止。
方法 1:如果測試結果顯示低於 128 的值就足夠,請使用該值。除非發布說明文件另有規定,否則請將 tcp_slot_table_entries 和 tcp_max_slot_table_entries 設為相同的值。
變更這些設定後,請掛接或重新掛接 NFS 檔案系統。設定生效後建立的 RPC 傳輸作業,都會套用時段設定。
方法 2 (建議):/etc/modprobe.d/ 中的模組選項
首次使用 NFS 時,系統會在開機後載入 sunrpc,並套用模組參數。這些設定會在重新啟動後保留,因此不需要在開機時設定 sysctl。
建立
/etc/modprobe.d/sunrpc.conf:options sunrpc tcp_slot_table_entries=128 tcp_max_slot_table_entries=128
如果發行版本在 modprobe 變更後需要重建 initramfs,請重建 initramfs。當模組位於 initramfs 中時,RHEL 通常會需要重建。詳情請參閱 Linux 供應商說明文件。
只有在沒有作用中的 NFS 掛接,且執行手冊允許的情況下,才能重新啟動或卸載並重新載入
sunrpc。確認已載入
sunrpc,並已設定預期值:cat /proc/sys/sunrpc/tcp_slot_table_entries cat /proc/sys/sunrpc/tcp_max_slot_table_entries
掛接或重新掛接 NetApp Volumes 匯出內容。
NFSv4.1
以下各節說明 NFSv4.1 工作階段的協商方式、提供效能最佳化範例,並說明如何設定工作階段運算單元限制。
工作階段協議
NFSv4.1 會在用戶端和伺服器之間建立工作階段。用戶端和伺服器會選取兩個支援值中較低者,藉此交涉未完成指令的數量上限 (max_reqs)。
NetApp Volumes NFSv4.1 伺服器:每個工作階段 180 個指令。
Linux 用戶端預設值:64 (
max_session_slots)。協商的工作階段:用戶端和伺服器值的最小值,通常為 64 (預設用戶端)。
每個伺服器的 TCP 連線最多可支援 128 個未完成的 NFS 指令。預設有 64 個工作階段時段和單一連線,因此並行作業最多只能有 64 個。如要透過連線使用更多工作階段時段,請僅針對非 Kerberos 掛接使用 nconnect=2 以上版本。如要進一步瞭解掛接選項,請參閱「Linux NFS 掛接選項」。
範例 1:預設 64 個工作階段時段,沒有 nconnect
單一連線。
每個工作階段最多可有 64 個待處理指令。
範例 2:64 個工作階段時段,nconnect=2
工作階段的總時段數仍為 64 個,會分成兩個連線,每個連線約 32 個時段。
這項設定可降低每個連線的佇列深度,進而縮短延遲時間,同時不會增加總並行數。
範例 3:max_session_slots=180,沒有 nconnect
每個工作階段最多可執行 180 個指令,且每個連線最多只能有 128 個待處理作業。
有效限制為 128。
示例 4:max_session_slots=180, nconnect=2
工作階段最多可透過兩個連線使用 180 個指令,或每個連線約 90 個指令。
如要在工作階段層級超過單一連線 128 的上限,就必須進行這項設定。
如要在 NetApp Volumes 上達到最大 NFSv4.1 並行,且不使用 Kerberos,請設定 max_session_slots=180 並使用 nconnect=2 以上版本。請使用工作負載測試這項設定。
設定 NFSv4.1 的工作階段時段上限
建立
/etc/modprobe.d/nfsclient.conf:options nfs max_session_slots=180
重新啟動用戶端。
至少有一個 NFSv4.1 掛接點後,請驗證設定:
systool -v -m nfs
確認輸出內容中顯示
max_session_slots。
這些變更需要重新啟動標準 Linux NFS 用戶端封裝。請據此規劃維護作業。
多重用戶端和大容量磁碟區
多個 VM,一個磁碟區 IP:減少每個用戶端的
sunrpc.tcp_max_slot_table_entries。大容量,且有多個 IP 位址:每個用戶端到 IP 的連線都有配額限制。盡可能將用戶端分散至各端點。詳情請參閱「連線至多個儲存空間端點的大容量磁碟區」。