全部產品
Search
文件中心

Object Storage Service:1.91.2版本

更新時間:Nov 20, 2024

本文為您介紹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