天天看點

焱融 YRCloudFile 在海量小檔案場景訓練加速優化政策

作者:焱融科技

前言

焱融檔案存儲 YRCloudFile 作為一款通用型的高性能分布式檔案存儲系統,廣泛适用于 AI/自動駕駛、 HPC 、量化分析、 視效渲染以及大資料等場景,這些場景有的需要具備大檔案的極限帶寬,有的需要大檔案的高 IOPS,有的則需要支撐海量小檔案,而這些需求會涉及到很多的設計決策和優化。

今天,我們将探讨在 AI 訓練場景中如何進行海量小檔案的性能優化,由于訓練場景中的檔案通路都是以隻讀方式打開的,是以本文将着重介紹隻讀小檔案的優化部分。

檔案讀寫的流程

首先,我們先簡單了解下讀檔案所需的操作流程。以 cat 一個小檔案為例:首先,讀檔案之前需要通過 lookup 檢視檔案是否存在,确定存在則需要通過 open 打開檔案,通過 read 來讀取檔案内容,讀取完檔案内容後再通過 close關閉檔案。對于網絡檔案系統如:YRCloudFile, NFS 等,還有 revalidate 和 stat 來重新整理 inode。注意,lookup 僅在檔案系統第一次打開檔案時調用。我們可以通過 strace 來驗證以上流程:

焱融 YRCloudFile 在海量小檔案場景訓練加速優化政策

上圖中的操作 fadvise 和 mmap 是 cat 獨有的操作,這裡無需深入了解。此外,關于 lookup 和 revalidate,這兩個操作之是以沒有出現在上圖中是因為它們隐藏在檔案系統内部,并沒有通過系統調用暴露出來。

小檔案的中繼資料瓶頸

在小檔案操作中,中繼資料操作占據了很大的比重,甚至可以達到 70%-80% 的比重,而真正的業務讀寫,僅僅占了其中很小一部分,這時中繼資料性能成為性能瓶頸。

通過以上讨論我們了解到讀取檔案所需的操作有:lookup、open、read、close、stat、revalidate,每次操作都伴随着一次網絡開銷。其中 lookup 僅在檔案系統第一次讀取檔案時調用,對于多次讀取檔案的開銷基本可以忽略,為易于叙述,以下暫不讨論 lookup。而 open、close、stat、revalidate 都是中繼資料操作,并且隻有一次調用,而隻有 read 是業務真正所需的資料操作,檔案越大調用次數越多。我們可以通過推算得知,檔案越大,read 次數越多,資料操作占比就越高,中繼資料操作占比就越低,反之亦然。接下來,我們通過分别讀取大小檔案場景,再進一步了解:

首先,先讨論讀取大檔案的場景。如讀取一個 100M 的檔案,每次讀取 1M 資料,那麼就需要 100 次read 調用。而對應的中繼資料操作有 open、close、stat、revalidate 共4個。總操作次數有 104 次,那麼可以算出,資料操作占比 100/104 * 100%= 96%,而中繼資料操作占比 4/104 * 100%=4%。

在讀取小檔案的場景中,如讀取一個 1M 的檔案,每次讀取 1M 資料,隻需要一次 read 調用。對應的中繼資料操作同樣有 open、close、stat、revalidate 共4個。總操作次數有 5 次,同樣可以算出,資料操作占比為 1/5 * 100%=20%。而中繼資料操作占比為 4/5 * 100%=80%。

通過上述分析清晰看到,對于越小的檔案,中繼資料操作占比越高,中繼資料性能成為嚴重限制 ops 性能的瓶頸。對于其優化,我們需要降低中繼資料操作占比,進而提高 ops。

技術解決方案

基于以上讨論,我們了解到在處理小檔案時,中繼資料性能方面存在着嚴重的瓶頸。這是因為對于每個小檔案,系統都需要頻繁讀取并處理其對應的中繼資料資訊,包括 open、close、stat 以及 revalidate 等等,這些操作會占用大量的網絡和磁盤資源。因為我們需要針對這些問題進行優化。

首先,為了支撐對中繼資料通路路徑的低延遲和高 ops 能力,焱融分布式檔案存儲 YRCloudFile 采用的 io 架構可提供百萬級的 iops 能力。由于中繼資料需要保證 posix 語義,是以性能上無法和普通讀寫 io 一樣,但同樣可以提供數十萬的互動能力。

其次,依賴用戶端緩存機制,焱融分布式檔案存儲 YRCloudFile 提供了基于記憶體緩存的中繼資料管理技術,在保證語義的前提下,能安全的命中緩存,減少跨網絡和磁盤通路開銷。

再次,我們實作的 lazy size,lazy close,batch commit,metadata readhead 機制,能同時保證在檔案系統語義的前提下,将部分邏輯 offload 到用戶端,這樣的好處是能夠很好的降低中繼資料服務的壓力,并且叢集的中繼資料性能得到很大的提升,包括在延遲和 ops 等方面。

綜上,焱融分布式檔案存儲 YRCloudFile 通過一系列技術操作優化小檔案的中繼資料性能,包括基于記憶體緩存的中繼資料管理、輕量級 open、延遲 close 以及批量 close 等。這些技術的應用,可以顯著提高焱融分布式檔案存儲 YRCloudFile 在處理小檔案時的性能表現,進而更好地滿足使用者的需求。

優化前後性能對比

接下來,我們将在具體的 vdbench 測試中來看下焱融分布式檔案存儲 YRCloudFile 的優化效果。叢集配置多副本模式,其中 3 組 mds,3 組 oss,mds 和 oss 均由 nvme ssd 建構。vdbench 腳本為:

hd=default,vdbench=/root/vdbench50406,shell=ssh,user=root
hd=hd01,system=10.16.11.141

fsd=fsd1_01,anchor=/mnt/yrfs/vdbench/4k-01/,depth=1,width=5,files=1000,size=4k,openflags=o_direct

fwd=fwd1_01,fsd=fsd2_01,host=hd01,operation=read,fileio=random,fileselect=random

rd=randr_4k,fwd=fwd5_*,xfersize=4k,threads=64,fwdrate=max,format=restart,elapsed=30,interval=1,pause=1m           

優化前

Miscellaneous statistics:
(These statistics do not include activity between the last reported interval and shutdown.)
READ_OPENS          Files opened for read activity:             540,793     95,986/sec
FILE_BUSY           File busy:                                   5,129         570/sec
FILE_CLOSES         Close requests:                             540,793     95,986/sec           

優化後

Miscellaneous statistics:
(These statistics do not include activity between the last reported interval and shutdown.)
READ_OPENS          Files opened for read activity:           4,589,603    653,742/sec
FILE_BUSY           File busy:                                   56,129      1,870/sec
FILE_CLOSES         Close requests:                           4,589,603    653,742/sec           

通過上述資料,可以看到焱融分布式檔案存儲 YRCloudFile 顯著提高了在處理小檔案時的性能表現,性能提高 6 倍以上,以上是基于大量的測試和評估所得出的結論。

總結

在這篇文章,我們探讨了焱融分布式檔案存儲 YRCloudFile 在隻讀小檔案場景下的優化。我們首先回顧了檔案的基本讀寫流程,分析了其中小檔案存在的問題,進而設計了一系列的優化方案來解決 AI 訓練場景下隻讀小檔案的性能瓶頸。焱融分布式檔案存儲 YRCloudFile 的優化技術可以為業務應用尤其是 AI 訓練場景下提供更快速、更高效、更可靠的服務,進而提高使用者的體驗和滿意度,同時,也為未來的技術發展提供了借鑒和啟示。