本文為您介紹ossfs 1.91.2版本更新內容。
新增功能
直讀模式
ossfs讀檔案時,預設從雲上下載的資料會先寫到磁碟,再從磁碟讀取返回給使用者。由於ossfs的磁碟寫操作均為非同步寫,因此下載的資料會先寫到記憶體page cache,作業系統非同步將髒頁刷到磁碟上。使用者讀取時,如果記憶體快取命中則直接返回。
ossfs讀檔案時預設會將預取的資料全部保留在磁碟上,磁碟空間到達上限才會淘汰。
當記憶體足夠大時,所有的資料均緩衝在記憶體page cache中,不受到磁碟頻寬的限制,僅受機器的網路頻寬節流設定。
當記憶體不足以緩衝整個檔案時,下載的資料需要落盤,讀取資料也需要從磁碟讀,因此讀效能同時會受到磁碟頻寬和網路頻寬節流設定。一般磁碟頻寬是主要效能制約。
預設模式下,當檔案較大時,ossfs讀效能受到磁碟效能的制約,因此新增直讀模式。
直讀模式下,ossfs從雲上下載的資料會存放在記憶體buffer中,讀取時資料直接從記憶體buffer返回,整個流程並不涉及磁碟,從而可以充分利用網路頻寬,提升順序讀效能。
直讀模式下,ossfs以chunk(預設4 MB,可通過direct_read_chunk_size參數設定)為單位管理下載的資料,會在記憶體中保留
[當前chunk - 1, 當前chunk + direct_read_prefetch_chunks]區間內的資料,如果下一次讀的位移量超過這個區間,ossfs會丟棄已經下載的資料,並從新的位移量處開始重新預取。
直讀模式僅適用於順序讀(唯讀)情境,對於其他情境:
隨機讀:ossfs只會保留當前讀位移量視窗內的資料,如果隨機讀的位移量超過這個區間,則會造成資料被多次下載、釋放,導致網路資源浪費和效能下降。因此大量隨機讀操作的情境不適合開啟直讀模式。
寫:資料寫入仍然會先寫入本地磁碟。為了保證效能與資料一致性,如果當前檔案直讀過程中有寫請求,該檔案將自動回退到預設的讀模式,即下載到磁碟的邏輯。針對某一個檔案的寫不會導致其他檔案退出直讀模式。
直讀模式相關配置請參見下表:
參數 | 說明 | 預設值 |
direct_read | 是否開啟直讀模式。直接通過-odirect_read開啟。 | disabled |
direct_read_chunk_size | 每個預取任務下載資料的大小,單位為MB。 | 4 |
direct_read_prefetch_chunks | 預取的chunk數量。 | 32 |
direct_read_prefetch_limit | 所有檔案預取資料總量上限,單位為MB。 | 1024 |
direct_read_prefetch_thread | 預取線程數量。 | 64 |
效能測試
使用ossfs將遠程Bucket掛載到本地檔案系統,進行了順序讀取檔案的效能測試。測試結果如下:
機器規格
記憶體:32GB
磁碟頻寬:130MB/s
內網頻寬:750MB/s
掛載命令
預設模式ossfs掛載命令:
ossfs [bucket name] [mountpoint] -ourl=[endpoint] -oparallel_count=32 -omultipart_size=16直讀模式ossfs掛載命令:
ossfs [bucket name] [mountpoint] -ourl=[endpoint] -odirect_read -odirect_read_chunk_size=8 -odirect_read_prefetch_chunks=64
測試指令碼
dd if=testfile of=/dev/null bs=1M status=progress測試結果:
檔案大小
預設模式
直讀模式
1 GB
646MB/s
592MB/s
5 GB
630MB/s
611MB/s
10 GB
260MB/s
574MB/s