問題目錄
- 如何提升Linux操作系統單客戶端訪問NFS文件系統的性能?
- 文件系統的讀寫速度與什么相關?
- 文件系統的性能指標有哪些?
- 如何提升Linux操作系統上訪問NAS的性能?
- 為什么執行ls命令時,會卡頓或無響應?
- 為什么在目錄下并發創建文件,每秒創建的文件數量達不到IOPS標稱的值?
- 如何解決向多臺云主機中掛載的NFS文件系統中寫入數據延遲問題?
如何提升Linux操作系統單客戶端訪問NFS文件系統的性能?
nconnect參數用于指定 NFS 客戶端與服務端建立的連接數。通過調整這個參數,可以讓客戶端和服務端上之間建立多個TCP連接來進行數據傳輸和交互,從而提高訪問性能。
- 操作場景
1)當客戶端與服務端之間網絡延遲較高的場景下,且需要較高帶寬或IOPS時,建議使用此功能。
2)使用此參數后,對于低并發、小IO數據塊等場景會有一定延遲增加,不建議使用此功能。
3)使用此參數可以提高訪問性能,但受限于實際網絡、CPU等資源情況。對于低帶寬網絡增加連接數可能無法提高訪問性能,不建議使用此功能。
- 前提條件
Linux 內核版本為5.3及以上版本。
- 操作步驟
在掛載NFS文件系統的命令中,增加nconnect參數,建議設置nconnect=4:
IPv4掛載命令:
mount -t nfs -o vers=3,proto=tcp,async,nolock,noatime,nodiratime,noresvport,nconnect=4,wsize=1048576,rsize=1048576,timeo=600 掛載地址 本地掛載路徑
IPv6掛載命令:
mount -t nfs -o vers=3,proto=tcp6,async,nolock,noatime,nodiratime,noresvport,nconnect=4,wsize=1048576,rsize=1048576,timeo=600 掛載地址 本地掛載路徑
文件系統的讀寫速度與什么相關?
讀寫速度同時受帶寬及IOPS的影響,對于大文件的業務,受帶寬影響較大。對于小文件業務,受IOPS影響較大。單個文件系統的讀寫性能上限與文件系統類型及大小相關,請參見產品規格-彈性文件服務。
文件系統的性能指標有哪些?
文件系統有三個性能指標:IOPS,帶寬,時延。
- IOPS (Input/Output Per Second)即每秒的IO操作次數(或讀寫次數)。對于小文件讀寫頻繁的場景,主要關注IOPS指標。
- 帶寬是指單位時間內最大的數據傳輸流量,對于主要訪問大文件的場景,更多需要考慮該指標。
- 時延是指一次讀/寫所花費的時間,由于大IO可能包含多次讀/寫,一般指標采用的是小IO的平均時延。該指標受網絡狀態及文件系統繁忙程度影響較大。
如何提升Linux操作系統上訪問NAS的性能?
NFS客戶端對同時發起的NFS請求數量進行了控制,默認為2,嚴重影響性能。修改sunrpc.tcp_slot_table_entries可以提升單機訪問NAS的吞吐,建議您將該參數值修改為128:
echo "options sunrpc tcp_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
echo "options sunrpc tcp_max_slot_table_entries=128" >>? /etc/modprobe.d/sunrpc.conf
sysctl -w sunrpc.tcp_slot_table_entries=128
以上指令需在首次掛載前執行,之后永久生效。
說明并發NFS請求數量的提升,可能導致單個IO的延遲增加,請根據業務需求自行調節。
為什么執行ls命令時,會卡頓或無響應?
默認情況下,ls會遍歷目錄下的所有文件,獲取文件的元數據信息并展現給用戶,如果目錄過大如包含10萬個文件,可能需要發出10萬個讀指令,需要耗費很長的時間。
解決方案:
- 避免單個目錄包含過多的文件,建議單目錄下文件數量不超過1萬個。
- 執行ls時采用全路徑/usr/bin/ls,不添加--color=auto參數,可避免遍歷目錄下文件,大幅減少讀指令數量。
為什么在目錄下并發創建文件,每秒創建的文件數量達不到IOPS標稱的值?
創建文件涉及到“為新文件分配磁盤空間”和“將新文件加入目錄”至少2個IO指令:
- “為新文件分配磁盤空間”可以并發執行,并發程度受文件系統大小影響,文件系統越大,并發程度越高。
- “將新文件加入目錄”如果修改的是同一目錄,不能并發執行。修改速度受IO時延影響較大,如文件系統時延為1ms,無并發的情況下1秒內能完成1000次IO,單目錄的創建性能就不會超過1000文件/秒。
解決方案:
- 避免單個目錄包含過多的文件,建議單目錄下文件數量不超過1萬個。
- 擴容文件系統,可以提升文件系統的讀寫性能。
如何解決向多臺云主機中掛載的NFS文件系統中寫入數據延遲問題?
問題描述: 云主機1更新了文件A,但是云主機2立即去讀取時,仍然獲取到的是舊的內容。
問題原因: 這涉及兩個原因: 第一個原因是,云主機1在寫入文件A后,并不會立即進行刷新(flush),而是先進行PageCache操作,依賴于應用層調用fsync或者close來進行刷新。 第二個原因是,云主機2存在文件緩存,可能不會立即從服務器獲取最新的內容。例如,在云主機1更新文件A時,云主機2已經緩存了數據,當云主機2再次讀取時,仍然使用了緩存中的舊內容。
解決方案:
方案一:在云主機1更新文件后,一定要執行close或者調用fsync。在云主機2讀取文件之前,重新打開文件,然后再進行讀取。
方案二:關閉云主機1和云主機2的所有緩存。這會導致性能較差,所以請根據實際業務情況選擇適合的方案。
關閉云主機1的緩存:在掛載時,添加noac參數,確保所有寫入立即落盤。掛載命令示例如下:
mount -t nfs -o vers=3,proto=tcp,async,nolock,noatime,noresvport,nodiratime,wsize=1048576,rsize=1048576,timeo=600,noac 掛載地址 本地掛載路徑1
關閉云主機2的緩存:在掛載時,添加actimeo=0參數,忽略所有緩存。掛載命令示例如下:
mount -t nfs -o vers=3,proto=tcp,async,nolock,noatime,noresvport,nodiratime,wsize=1048576,rsize=1048576,timeo=600,actimeo=0 掛載地址 本地掛載路徑2
根據實際情況合理以上方案可要確保云主機1更新文件后,云主機2能立即獲取到最新內容。
使用Windows掛載NFS協議文件系統訪問速度很慢怎么解決?
注意天翼云彈性文件服務不推薦Windows客戶端直接掛載NFS協議文件系統,會出現訪問卡頓、速度慢等問題。建議Windows客戶端只掛載CIFS協議文件系統。
問題原因: 在Windows客戶端直接掛載NFS協議文件系統可能遇到首次訪問文件系統卡頓,之后一段時間流暢的情況,這是由于Windows客戶端未區分NFS協議和CIFS協議,重連時會去掃描CIFS的445端口,被拒絕后才會去連接NFS端口,導致先訪問然后變流暢。如果超過15分鐘沒有IO,下次重連會再次卡頓。
解決方案: 通過在客戶端設置禁用CIFS可規避本問題,參考微軟官方說明: