全部產品
Search
文件中心

Elastic Compute Service:基於ECS執行個體部署3FS

更新時間:Jul 10, 2025

3FS是深度求索(DeepSeek)公司自主研發的高效能分布式儲存系統,專為AI大模型訓練、巨量資料分析及Alibaba Cloud HPC情境最佳化設計。在3FS中,融合現代SSD儲存與RDMA網路技術,突破傳統網路的效能瓶頸。本文介紹如何基於阿里雲自研的雲上彈性RDMA網路部署3FS叢集,實現低延遲與高吞吐資料轉送,支撐AI訓練和大規模資料分析的高效能需求。

部署方案

基於阿里雲高效能彈性RDMA網路eRDMA本地SSD型執行個體規格類型系列i4構建3FS叢集,AC2為叢集提供安全可靠的容器化接入方案。

重要

阿里雲不對3FS提供支援人員,也不承諾3FS自身軟體相關的資料完整性和資料正確性以及軟體功能和軟體效能。如遇問題,請通過GitHub渠道和3FS社區maintainer溝通。

  • 彈性RDMA(Elastic Remote Direct Memory Access,簡稱eRDMA)是阿里雲自研的雲上彈性RDMA網路,底層鏈路複用VPC網路,採用全棧自研的擁塞控制CC(Congestion Control)演算法,享有傳統RDMA網路高吞吐、低延遲特性的同時,可支援秒級的大規模RDMA組網。可相容傳統HPC應用、AI應用以及傳統TCP/IP應用。

    詳細資料,請參見彈性RDMA(eRDMA)

  • 阿里雲本地SSD型執行個體規格類型系列i4,採用PCIe Gen4 NVMe SSD,使用CIPU本地碟虛擬化架構。虛擬化對SSD的讀寫頻寬的衰減幾乎為零,並為客戶提供了IO級的營運監控能力。詳細資料,請參見NVMe SSD本地碟

  • Alibaba Cloud AI Containers(簡稱AC2)是阿里雲官方推出的一系列AI容器鏡像的合集。通過內建不同的硬體加速庫、AI運行時、AI架構等滿足使用者不同情境的部署使用訴求,並通過與阿里雲基礎設施(ECS、ACK、ECI)深度最佳化,提升使用者在阿里雲上的AI效能和體驗。

    AC2 產品鏡像在生產發布過程中實現全鏈路安全可靠,通過自主軟體選型構建,結合 CVE 更新策略和鏡像安全掃描機制,最大程度上保障了 AI 容器鏡像的安全生產。詳細資料,請參見Alibaba Cloud AI Containers

    重要
    • 本文中3FS涉及到的組件均已在AC2鏡像中完成構建,如果您希望完全自主構建,請參見3FS GitHub

    • AC2是免費的鏡像,但使用鏡像時,需要支付其他資源產生的費用,如vCPU、記憶體、儲存、公網頻寬和快照等。

  • 使用AC2需要首先設定Docker運行環境,在容器中啟用eRDMA的實現方式如下。

    在容器環境中使用eRDMA功能時,使用Docker的--device選項將/dev/infiniband/rdma_cm/dev/infiniband/uverbsX兩個字元裝置映射到容器中,這樣容器內的使用者態程式就可以繞過作業系統核心直接存取eRDMA裝置進行資料的收發。

    • /dev/infiniband/rdma_cm:用於eRDMA串連管理的字元裝置。使用者態程式可以通過對這個字元裝置的操作,與eRDMA裝置進行串連的建立、銷毀和管理,包括建立和銷毀串連、發送和接收串連事件等操作。

    • /dev/infiniband/uverbsX:用於使用者空間eRDMA操作的字元裝置。使用者態程式可以通過對這個字元裝置的操作,與eRDMA裝置進行通訊,包括開啟裝置、建立和銷毀eRDMA通訊端點、註冊和登出記憶體緩衝區等操作。

      說明

      /dev/infiniband/uverbsX中的X是裝置的索引號,可能會因系統和配置而異,您可以運行ls /dev/infiniband | grep uverbs命令查看字元裝置名稱。

3FS關鍵節點介紹

3FS關鍵組件及作用如下:

  • 中繼資料服務Metadata Service(Meta):無狀態服務,處理檔案系統的中繼資料請求。底層通過foundation DB實現原子性操作。

  • 資料存放區Storage Service(Storage):在儲存節點上運行,資料分Block Storage於高效能NVMe SSD,採用CRAQ(Chain Replication with Apportioned Queries)鏈式複製協議管理副本,提供write-all-read-any語義。

  • 叢集管理Cluster manager(Mgmtd):管理叢集的配置資訊,儲存節點狀態,負責選舉主節點並對其他組件進行同步更新。

  • 用戶端Client:3FS提供了兩種形態的用戶端,通過FUSE實現標準化訪問和USRBIO實現高效能傳輸,兼顧相容性與效率,成為AI、巨量資料等情境的理想儲存介面。

    • FUSE用戶端:通過使用者態檔案系統介面掛載儲存叢集為本地目錄。提供 POSIX 相容的檔案操作介面(read/write/mkdir),無需修改應用代碼。

    • USRBIO高效能用戶端:通過使用者態I/O棧和RDMA,實現微秒級延遲與超高吞吐,滿足AI/HPC需求。

各個組件通過RDMA網路通訊,繞過核心協議棧,顯著減少 CPU 負載與網路延遲。

部署樣本

本樣本中,以同一VPC、同一可用性區域內的一台通用型執行個體規格類型系列g8i執行個體(ecs.g8i.48xlarge)作為meta節點,部署meta、mgmtd、用戶端及監控等服務,五台本地SSD型執行個體規格類型系列i4執行個體(ecs.i4.32xlarge)作為儲存節點,提供高效能NVMe SSD儲存,每個節點配置eRDMA實現彈性RDMA通訊,完成3FS叢集部署。

說明

為簡化流程,本樣本中將中繼資料服務Meta、叢集管理服務Mgmtd、用戶端及監控組件等集中式部署於單節點。生產環境部署時,建議根據業務規模和高可用性要求,採用多點分布式架構實現服務解耦與資源隔離。

步驟一:準備環境

準備部署3FS相關節點的ECS執行個體,並且通過配置eRDMA使執行個體間具備彈性RDMA通訊的能力。

購買一台ECS執行個體同時作為meta、用戶端節點,購買五台ECS執行個體作為儲存節點,所有節點之間內網互連。各個節點需要開通公網下載AC2鏡像資源。

建立過程中所有執行個體需注意以下配置項,其他參數,請參見自訂購買執行個體

  • 地區:本樣本中選擇杭州地區。

  • 執行個體規格:選擇支援eRDMA的執行個體規格:

  • 執行個體鏡像:選擇支援eRDMA的Ubuntu 22鏡像。

  • 彈性RDMA網卡:為執行個體網卡開啟彈性RDMA介面,使用彈性RDMA通訊模式。

    重要

    樣本中的IP地址即開啟了彈性RDMA介面的網卡的主私網IP地址,本樣本中為主網卡。如果您是在輔助網卡上進行RDMA通訊測試,請注意更換IP地址。

    image

步驟二:部署meta節點

  1. 遠端連線meta節點執行個體。

    具體操作,請參見使用Workbench終端串連登入Linux執行個體(SSH)

  2. 在執行個體上執行以下命令,安裝erdma驅動。

    curl -O http://mirrors.cloud.aliyuncs.com/erdma/env_setup.sh
    sudo /bin/bash env_setup.sh > /var/log/erdma_install.log 2>&1

    執行安裝指令碼後,指令碼會自動協助您安裝eRDMA驅動所需的軟體依賴包以及eRDMA驅動,等待安裝指令碼執行結束即可。

  3. 執行以下命令,驗證erdma是否正常配置。

    ibv_devinfo

    返回資訊如下所示,表示eRDMA在執行個體上正常啟用(eRDMA驅動正確安裝、網卡的彈性RDMA介面已正確配置)。eRDMA驅動的安裝可能需要一段時間,請您耐心等待。如果返回異常,請參見驗證eRDMA配置的正確性進行修複。

    image

  4. 執行以下命令,設定RDMA建鏈方式為相容模式。

    重要
    • 目前支援eRDMA的CPU執行個體規格,預設eRDMA核心驅動安裝模式為Standard,此模式下僅支援RDMA_CM建鏈。

    • eRDMA提供了相容模式(compat mode)用於OOB情境下的應用。相容模式下,會額外佔用30608~30623範圍內的16個TCP連接埠。

    sudo sh -c "echo 'options erdma compat_mode=Y' >> /etc/modprobe.d/erdma.conf"
    sudo rmmod erdma
    sudo modprobe erdma compat_mode=Y
  5. 執行以下命令,安裝docker。

    說明

    使用AC2需要首先設定Docker運行環境。Docker的安裝視不同的作業系統步驟略有不同,具體操作,參見安裝Docker。本文中以Ubuntu為例,設定Docker運行環境。

    apt update
    apt install docker.io -y

    安裝完畢後,通過以下命令查看Docker版本號碼,檢查是否安裝成功。

    image

  6. 執行以下命令,部署並啟動clickhouse,用於持久化叢集運行狀態指標(如節點狀態、資源使用率、IO等)。

    docker run -d --network=host --name clickhouse-server --ulimit nofile=262144:262144 ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/clickhouse:25.3.1.2703-ubuntu22.04
    • --net=host:配置容器的通訊模式為host。容器內的應用程式可以直接使用主機的網路介面和網路設定,從而實現與主機相同的網路通訊能力。

    • --ulimit nofile:設定容器內進程的檔案描述符數量限制(即一個進程能同時開啟的最大檔案數),避免因進程過度佔用檔案控制代碼導致系統不穩定。

  7. 執行以下命令,部署並啟動foundation db,保證叢集交易記錄配置與資料存放區。

    docker run -d --network=host --name fdb ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/fdb:7.3.63-ubuntu22.04
  8. 執行以下命令,部署並啟動3fs monitor,負責收集和分析系統運行時的各種指標,如輸送量、延遲、資源使用方式等。

    docker run -d --network=host --name monitor --ulimit memlock=-1 --privileged --device=/dev/infiniband/uverbs0 --device=/dev/infiniband/rdma_cm ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/3fs:b71ffc55-fdb7.3.63-fuse3.16.2-ubuntu22.04 ./monitor.sh
    • --ulimit memlock=-1:將maxlockedmemory設定為unlimited表示不限制非root使用者鎖定記憶體的數量。這可以確保eRDMA應用程式在非root使用者下能夠鎖定所需的記憶體量,從而有效地使用eRDMA功能。

    • --device=/dev/infiniband/uverbsX--device=/dev/infiniband/rdma_cm:將eRDMA對應的使用者態字元裝置暴露到容器中。

      執行以下命令,查看字元裝置名稱uverbsX中的X)

      ls /dev/infiniband | grep uverbs

      image

  9. 執行以下命令,部署並啟動3fs叢集管理服務mgmtd,負責管理叢集中的儲存節點和資源分派。

    docker run -d --network=host --name mgmtd --ulimit memlock=-1 --privileged --device=/dev/infiniband/uverbs0 --device=/dev/infiniband/rdma_cm --env FDB_CLUSTER=`docker exec fdb cat /etc/foundationdb/fdb.cluster` --env REMOTE_IP="172.16.20.172:10000" --env MGMTD_SERVER_ADDRESSES="RDMA://172.16.20.172:8000" ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/3fs:b71ffc55-fdb7.3.63-fuse3.16.2-ubuntu22.04 ./mgmtd.sh
    • --env REMOTE_IP:設定monitor的服務地址,IP地址為monitor服務所在的節點的主私網IP地址(本樣本中和meta同節點)。

    • --env MGMTD_SERVER_ADDRESSES:設定mgmtd服務的地址,IP地址改為啟動了mgmtd服務的節點的主私網IP地址(本樣本中和meta、monitor同節點)。

  10. 執行以下命令,部署並啟動3fs的中繼資料服務meta。

    docker run -d --network=host --name meta --ulimit memlock=-1 --privileged --device=/dev/infiniband/uverbs0 --device=/dev/infiniband/rdma_cm --env FDB_CLUSTER=`docker exec fdb cat /etc/foundationdb/fdb.cluster` --env META_NODE_ID=100 --env REMOTE_IP="172.16.20.172:10000" --env MGMTD_SERVER_ADDRESSES="RDMA://172.16.20.172:8000" ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/3fs:b71ffc55-fdb7.3.63-fuse3.16.2-ubuntu22.04 ./meta.sh
    • --env META_NODE_ID:設定meta節點的順序編號,本樣本中1台meta節點,設定為100。

    • --env REMOTE_IP:設定monitor的服務地址,IP地址為monitor服務所在的節點的主私網IP地址(本樣本中和meta同節點)。

    • --env MGMTD_SERVER_ADDRESSES:設定mgmtd服務的地址,IP地址改為啟動了mgmtd服務的節點的主私網IP地址(本樣本中和meta、monitor同節點)。

  11. 執行以下命令,查看以上啟動的節點服務(docker容器)。

    docker ps

    image

步驟三:部署儲存節點

以下步驟需要在五台儲存節點每一台執行。

  1. 遠程登入儲存節點執行個體。

    具體操作,請參見使用Workbench終端串連登入Linux執行個體(SSH)

  2. 在執行個體上執行以下命令,安裝erdma驅動。

    curl -O http://mirrors.cloud.aliyuncs.com/erdma/env_setup.sh
    sudo /bin/bash env_setup.sh > /var/log/erdma_install.log 2>&1

    執行安裝指令碼後,指令碼會自動協助您安裝eRDMA驅動所需的軟體依賴包以及eRDMA驅動,等待安裝指令碼執行結束即可。

  3. 執行以下命令,驗證erdma是否配置正確。

    ibv_devinfo

    返回資訊如下所示,表示eRDMA在執行個體上正常啟用(eRDMA驅動正確安裝、網卡的彈性RDMA介面已正確配置)。eRDMA驅動的安裝可能需要一段時間,請您耐心等待。如果返回異常,請參見驗證eRDMA配置的正確性進行修複。

    image

  4. 執行以下命令,設定RDMA建鏈方式為相容模式。

    重要
    • 目前支援eRDMA的CPU執行個體規格,預設eRDMA核心驅動安裝模式為Standard,此模式下僅支援RDMA_CM建鏈。

    • eRDMA提供了相容模式(compat mode)用於OOB情境下的應用。相容模式下,會額外佔用30608~30623範圍內的16個TCP連接埠。

    sudo sh -c "echo 'options erdma compat_mode=Y' >> /etc/modprobe.d/erdma.conf"
    sudo rmmod erdma
    sudo modprobe erdma compat_mode=Y
  5. 執行以下命令,格式化並掛載NVMe SSD。本樣本中,掛載儲存節點上的8塊本地碟,並格式化為xfs檔案系統(高效能,適合大檔案)。

    mkdir -p /storage/data{0..7}
    for i in {0..7};do mkfs.xfs -L data${i} /dev/nvme${i}n1;mount -o noatime,nodiratime -L data${i} /storage/data${i};done;
    mkdir -p /storage/data{0..7}/3fs

    如果您反覆測試此步驟,可以先清理儲存空間後再強制掛載(-f)

    for i in {0..7};do umount /storage/data${i};done
    for i in {0..7};do mkfs.xfs -f -L data${i} /dev/nvme${i}n1;mount -o noatime,nodiratime -L data${i} /storage/data${i};done;

    掛載完成後,可通過以下命令查看分區情況:

    image

  6. 執行以下命令,安裝docker。

    說明

    使用AC2需要首先設定Docker運行環境。Docker的安裝視不同的作業系統步驟略有不同,具體操作,參見安裝Docker。本文中以Ubuntu為例,設定Docker運行環境。

    apt update
    apt install docker.io -y

    安裝完畢後,通過以下命令查看Docker版本號碼,檢查是否安裝成功。

    image

  7. 執行以下命令,啟動儲存服務storage。

    docker run -d --network=host --name storage --ulimit memlock=-1 --privileged -v /storage:/storage --device=/dev/infiniband/uverbs0 --device=/dev/infiniband/rdma_cm --env STORAGE_NODE_ID=10001 --env TARGET_PATHS="/storage/data0/3fs","/storage/data1/3fs","/storage/data2/3fs","/storage/data3/3fs","/storage/data4/3fs","/storage/data5/3fs","/storage/data6/3fs","/storage/data7/3fs" --env REMOTE_IP="172.16.20.172:10000" --env MGMTD_SERVER_ADDRESSES="RDMA://172.16.20.172:8000" ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/3fs:b71ffc55-fdb7.3.63-fuse3.16.2-ubuntu22.04 ./storage.sh
    • --device=/dev/infiniband/uverbsX--device=/dev/infiniband/rdma_cm:將eRDMA對應的使用者態字元裝置暴露到容器中。

      執行以下命令,查看字元裝置名稱uverbsX中的X)

      ls /dev/infiniband | grep uverbs

      image

    • --env STORAGE_NODE_ID:儲存節點順序編號,如五個儲存節點,其編號依次為10001、10002、10003、10004、10005。您需要根據實際情況進行替換。

    • --env TARGET_PATHS:3FS的儲存目錄,在本樣本中為之前在本地碟上建立的目錄

    • --env REMOTE_IP:設定monitor的服務地址,IP地址為monitor服務所在的節點的主私網IP地址(本樣本中和meta同節點)。

    • --env MGMTD_SERVER_ADDRESSES:設定mgmtd服務的地址,IP地址改為啟動了mgmtd服務的節點的主私網IP地址(本樣本中和meta、monitor同節點)。

  8. 執行以下命令,查看以上啟動的節點服務(docker容器)。

    docker ps

    image

步驟四:在meta節點上查看當前串連的儲存節點

  1. 遠端連線meta節點執行個體。

    具體操作,請參見使用Workbench終端串連登入Linux執行個體(SSH)

  2. 執行以下命令,查看當前串連的節點狀態。

    docker exec -it meta  /opt/3fs/bin/admin_cli -cfg /opt/3fs/etc/admin_cli.toml --config.mgmtd_client.mgmtd_server_addresses '["RDMA://172.16.20.172:8000"]' "list-nodes"

    替換IP為上述配置的mgmtd服務的地址。

    image

    admin_cli是用於管理和維護3FS的命令列工具,您可以進行叢集配置、狀態監控、故障排查等操作。詳細資料可以通過以下命令查看:

    docker exec -it meta  /opt/3fs/bin/admin_cli -cfg /opt/3fs/etc/admin_cli.toml --config.mgmtd_client.mgmtd_server_addresses '["RDMA://172.16.20.172:8000"]' "help"

步驟五:meta節點配置相關參數

配置儲存節點相關資訊,如副本數、單個儲存節點的盤數。

  1. 遠端連線meta節點執行個體。

    具體操作,請參見使用Workbench終端串連登入Linux執行個體(SSH)

  2. 執行以下命令,配置3FS。

    docker exec \
      --env STORAGE_NODE_NUM=5 \
      --env STORAGE_NODE_BEGIN=10001 \
      --env STORAGE_NODE_END=10005 \
      --env REPLICATION_FACTOR=3 \
      --env NUM_DISKS_PER_NODE=8 \
      --env MGMTD_SERVER_ADDRESSES="RDMA://172.16.20.172:8000" \
      meta \
      ./config_3fs.sh
    • --env STORAGE_NODE_NUM:儲存節點數量,本樣本中為5。

    • --env STORAGE_NODE_BEGIN:儲存節點順序編號的起始,本樣本中為10001。

    • --env STORAGE_NODE_END:儲存節點順序編號的結尾,本樣本中為10005。

    • --env REPLICATION_FACTOR:儲存資料的副本數量,此處填3,使用3副本。

    • --env NUM_DISKS_PER_NODE:單個儲存節點的盤數,本樣本中為8。

    • --env MGMTD_SERVER_ADDRESSES:設定上述配置的mgmtd服務的地址。

    • --env NUM_TARGETS_PER_DISK:單個物理磁碟預期建立的儲存目標數量,預設值為12,即每個SSD劃分12個儲存目標。

    • --env MIN_TARGETS_PER_DISK:單個物理磁碟必須保證的最小儲存目標數量,預設值為12,即每個SSD至少保持12個可用儲存目標。

    config_3fs.sh指令碼中會進行以下操作:

    • 建立管理使用者root並產生認證令牌,令牌會被提取儲存到/opt/3fs/etc/token.txt中,供後續操作認證使用。

    • 根據傳入的參數(STORAGE_NODE_NUMREPLICATION_FACTOR 等)產生資料分布策略,進一步根據資料分布策略產生鏈式儲存表,並上傳到管理伺服器mgmtd,完成儲存節點的目標(target)和鏈式結構(chain)的部署。

  3. 執行以下命令,確認chain是否成功建立並狀態正常。

    docker exec -it meta  /opt/3fs/bin/admin_cli -cfg /opt/3fs/etc/admin_cli.toml --config.mgmtd_client.mgmtd_server_addresses '["RDMA://172.16.20.172:8000"]' "list-chains"

    替換IP為上述配置的mgmtd服務的地址。

    正常可以看到如下所示chain資訊,chain狀態正常是後續FIO測試的關鍵:

    image

步驟六:配置fuse用戶端

在meta節點上配置fuse用戶端,使用者通過用戶端掛載遠程儲存,使得可以像操作本地系統一樣進行檔案操作。

  1. 遠端連線meta節點執行個體。

    具體操作,請參見使用Workbench終端串連登入Linux執行個體(SSH)

  2. 執行以下命令,擷取token,保證用戶端安全接入。

    docker exec meta cat /opt/3fs/etc/token.txt
  3. 執行以下命令,啟動fuse client。

    docker run -d --network=host --name fuse --shm-size=200g --ulimit memlock=-1 --privileged \
      --device=/dev/infiniband/uverbs0 --device=/dev/infiniband/rdma_cm \
      --env REMOTE_IP="172.16.20.172:10000" \
      --env MGMTD_SERVER_ADDRESSES="RDMA://172.16.20.172:8000" \
      --env TOKEN=${token} \
      ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/3fs:b71ffc55-fdb7.3.63-fuse3.16.2-ubuntu22.04  \
      ./fuse.sh
    • --shm-size:設定容器內 /dev/shm 共用記憶體地區的大小。

      • 使用FUSE進行測試時,--shm-size可以設定為較小的值,如2g。

      • 使用USRBIO模組進行測試時,測試進程需要通過共用記憶體的方式與FUSE進程共用IO Buffer以實現零拷貝,建議增大--shm-size,如200g。

    • --device=/dev/infiniband/uverbsX--device=/dev/infiniband/rdma_cm:將eRDMA對應的使用者態字元裝置暴露到容器中。

      執行以下命令,查看字元裝置名稱uverbsX中的X)

      ls /dev/infiniband | grep uverbs

      image

    • --env REMOTE_IP:設定monitor的服務地址,IP地址為monitor服務所在的節點的主私網IP地址(本樣本中和meta同節點)。

    • --env MGMTD_SERVER_ADDRESSES:設定mgmtd服務的地址,IP地址改為啟動了mgmtd服務的節點的主私網IP地址(本樣本中和meta、monitor同節點)。

    • --env TOKEN:配置為上一步擷取的token字串。

  4. 執行以下命令,查看以上啟動的節點服務(docker容器)。

    docker ps

    image

  5. 執行以下命令,查看fuse容器內檔案系統的掛載和磁碟使用方式。

    docker exec fuse df -hT | grep 3fs

    image

FIO效能測試

完成部署後,fuse節點的docker容器內就得到了一個基於3fs的使用erdma進行節點間通訊的高效能Distributed File System。

FIO(Flexible I/O Tester) 是一款開源的儲存效能基準測試載入器,專為評估儲存系統(如硬碟、SSD、Distributed File System)的I/O能力而設計。其核心價值在於能夠類比真實業務情境的負載模型,通過高度可配置的測試參數,精準量化存放裝置的輸送量、IOPS、延遲等關鍵效能指標。

下面我們通過FIO對部署的3fs檔案系統進行效能測試。

使用usrbio測試(使用者態RDMA引擎)

在fuse容器中,啟動100個作業,類比高並發大檔案順序寫的業務情境,測試3fs在eRDMA網路下的極限效能。hf3fs_usrbio.so 引擎啟用使用者態RDMA通訊,相比核心態FUSE,實現零拷貝RDMA最佳化,效能有較大提升。

  1. 遠端連線meta節點執行個體。

    具體操作,請參見使用Workbench終端串連登入Linux執行個體(SSH)

  2. 執行以下命令,開始測試。

    docker exec -it fuse \
     fio -numjobs=100 -fallocate=none \
     -ioengine=external:/usr/lib/hf3fs_usrbio.so \
     -direct=1 \
     -rw=write \
     -bs=4MB \
     --group_reporting \
     -filesize=500MB \
     --nrfiles=100 \
     -iodepth=1 \
     -name=/3fs/test \
     -mountpoint=/3fs \
     -ior_depth=1
    • -numjobs=100:啟動100個並發作業(線程/進程),類比多線程並發寫入情境,測試系統在高並發下的吞吐能力和鎖競爭情況。

    • -ioengine=external:/usr/lib/hf3fs_usrbio.so:使用3FS專用RDMA引擎。

    • -direct=1:啟用直接I/O(繞過作業系統緩衝)。

    • -rw=write:測試模式為順序寫入(順序寫入大檔案),評估連續寫入頻寬(Bandwidth)。

    • -bs=4M:設定塊大小(Block Size) 為4MB,類比大塊資料寫入情境(如視頻流、批量資料處理)

    • --group_reporting:合并所有作業的結果進行匯總輸出,便於查看整體效能,而非單個作業的獨立資料。

    • -filesize=500MB:每個作業寫入500MB資料。總資料量為500MB × 100 個作業 = 50GB。

    • --nrfiles=100:總共建立100個檔案(每個作業寫入一個檔案),測試多檔案並發寫入效能。

    • -iodepth=1:每個作業的 I/O 隊列深度為1(即每個作業僅提交1個I/O請求)。

    • -mountpoint=/3fs:指定3FS檔案系統掛載路徑為 /3fs 目錄。

    • -ior_depth=1:指定RDMA發送隊列深度,設定為1,表示同步I/O模式。

  3. 測試過程中,您可以在fuse所在節點執行個體的監控頁面,查看執行個體的eRDMA流量情況。 詳細資料,請參見監控網路頻寬

    image

  4. 等待測試完成,查看測試結果。

    image

    核心指標結果如下:

    • 吞吐能力:

      • IOPS=2621:每秒2621次4MB寫操作。

      • BW=10.2GiB/s (11.0GB/s):實際測試頻寬達到10.2GiB/s。

    • 系統資源消耗:

      cpu: usr=1.21%, sys=0.02%:超低CPU使用率(eRDMA優勢顯著)。

使用posix測試(核心態libaio引擎)

在fuse容器中,使用Linux非同步I/O引擎,啟動2個作業(類比並發寫入),設定4MB資料區塊大小測試順序寫入情境下的頻寬,並且持續運行5分鐘,測試穩定性。

  1. 遠端連線meta節點執行個體。

    具體操作,請參見使用Workbench終端串連登入Linux執行個體(SSH)

  2. 執行以下命令,開始測試。

    docker exec -it fuse \
      fio -numjobs=2 -fallocate=none \
      -iodepth=2 \
      -ioengine=libaio \
      -direct=1 \
      -rw=write \
      -bs=4M \
      --group_reporting \
      -size=100M \
      -time_based \
      -runtime=300 \
      -name=2depth_128file_4M_direct_write_bw \
      -directory=/3fs
    • -numjobs=2:啟動2個並發作業(線程/進程),類比多線程並發寫入情境,測試系統在高並發下的吞吐能力和鎖競爭情況。

    • -iodepth=2:每個作業的 I/O 隊列深度為 2(即每個作業同時提交2個I/O請求)。

    • -ioengine=libaio:使用Linux非同步I/O引擎(libaio),支援非阻塞I/O。

    • -direct=1:啟用直接I/O(繞過作業系統緩衝)。

    • -rw=write:測試模式為順序寫入(順序寫入大檔案),評估連續寫入頻寬(Bandwidth)。

    • -bs=4M:設定塊大小(Block Size) 為4MB,類比大塊資料寫入情境(如視頻流、批量資料處理)

    • --group_reporting:合并所有作業的結果進行匯總輸出,便於查看整體效能,而非單個作業的獨立資料。

    • -size=100M:每個作業寫入100MB資料(總資料量 = 100MB × 2 個作業 = 200MB)。

    • -time_based 與 -runtime=300:已耗用時間為 300 秒(5 分鐘),即使提前完成資料寫入也持續運行,測試長時間寫入的穩定性。

    • -directory=/3fs:指定3FS檔案系統掛載路徑為 /3fs 目錄。

  3. 測試過程中,您可以在fuse所在節點執行個體的監控頁面,查看執行個體的eRDMA流量情況。 詳細資料,請參見監控網路頻寬

    image

  4. 等待測試完成,查看測試結果。

    image

    核心指標結果如下:

    • 吞吐能力:

      • IOPS=715:每秒715次4MB寫操作(715*4MB=2860MB/s)。

      • BW=2862MiB/s (3001MB/s) :實際頻寬達到約2.795GiB/s。

    • 系統資源消耗:

      cpu: usr=18.66%, sys=2.55% :使用者態CPU消耗較高(libaio引擎開銷)。