終極虛幻引擎 (Unreal Engine) 版本控制大對決:Perforce P4 vs. Lore
在我為遊戲工作室和企業開發團隊提供日常諮詢的過程中,有一個問題經常主導著對話:Perforce P4 是否依然是 Unreal Engine 工作流程中無可爭議的王者? 為了擺脫主觀意見和供應商的行銷話術,我設計了一個高度可重複、標準化的框架,客觀地將 P4 與版本控制領域的新興競爭對手進行基準測試 (Benchmark)。
這次全面的解析探討了為什麼必須根據真實、繁重的 Unreal Engine 專案參數來衡量版本控制的效能。我將逐步介紹用於將 P4 與 Epic Games 的新系統 Lore 進行對決的 AWS 架構和逼真資料集,提供確切的指令供您重現測試,並剖析這些指標對您工作室的基礎架構決策意味著什麼。
TL;DR:核心重點
本次基準測試將業界老將 Perforce P4 直接與 Epic Games 最近在芝加哥 Unreal Fest 上首度公開的版本控制解決方案 Lore 進行對決。使用中等規模的 UE 資料集並追蹤標準開發人員操作(新增、提交、同步和複製),結果是非常決定性的:
- 速度 (Velocity): 透過我們的伺服器部署套件 (SDP) 部署的 P4 伺服器,在執行標準規模的程式碼提交時,速度比 Lore 快 2.7 倍.
- 資源佔用 (Resource Footprint): 雖然初始儲存庫提取(P4 的 ‘sync’ 與 Lore 的 ‘clone’)完成時間大致相同,但 Lore 被證明極其消耗資源,其記憶體消耗量是 P4 的 14 倍.
設計基準測試:方法論
Unreal Engine 不再只適用於獨立遊戲;它驅動著企業級視覺化、虛擬製作和 3A 大作。這些龐大的專案帶來了獨特的版本控制摩擦:傳輸巨大的二進位檔案、管理複雜的團隊依賴關係以及避免工作流程瓶頸。標準軟體儲存庫相比之下相形見絀。
為了確保測試反映現實,資料集必須包含:
- 大量的純文字原始碼檔案。
- 繁重的二進位資產(
.uasset和.umap檔案),以及音訊和圖形等可壓縮媒體的混合體。
我使用我們的伺服器部署套件 (SDP) 部署了 Perforce。SDP 是 Linux/Windows 腳本的集合,可立即配置高度最佳化、企業級的 P4 伺服器,在不改變核心 P4 執行檔的情況下標準化管理任務。
AWS 雲端實驗室
由於現代工作室嚴重依賴雲端基礎架構來支援遠端、全球分佈的團隊,因此在 AWS 中執行此基準測試提供了最真實且可重現的基準線。
測試的軟體版本:
- Perforce P4:
2026.1 (Patch 2) - Lore:
0.8.5
基礎架構與網路配置
測試位在同一個資料中心機架上的用戶端和伺服器,並不能反映開發人員的實際工作情況。為了模擬從家庭辦公室連線的遠端開發人員,我在用戶端機器上人為地注入了 30ms 的網路延遲.
硬體規格 (執行 Ubuntu 24.04):
- 伺服器 (Benchserver):
m7a.2xlarge(8 vCPU,32GB RAM)— 中型 UE 團隊的理想選擇,配備gp3儲存磁碟區。 - 用戶端 (Benchclient):
c7a.xlarge,配備 200GB/data磁碟區(10k IOPS,500MB/s 吞吐量)。
關於 Git 的簡短說明: 雖然 Git 對於標準的純文字程式碼庫來說非常出色,但要管理遊戲引擎龐大的二進位有效負載,則需要像 P4 和 Lore 所提供的專用後端架構。
| 檔案系統 (Filesystem) | 大小 | 掛載點 (Mount Point) | IOPS | 吞吐量 (MB/s) |
|---|---|---|---|---|
| /dev/nvme2n1p1 | 40G | /hxlogs | 10k | 500 |
| /dev/nvme3n1p1 | 50G | /hxmetadata | 10k | 500 |
| /dev/nvme1n1p1 | 750G | /hxdepots | 10k | 700 |
P4 架構遵循 SDP 最佳實務:一個 OS 根磁碟區加上三個獨立的資料磁碟區,分別用於日誌 (journals/logs)、資料庫和版本檔案。Lore 伺服器同樣託管在 /hxdepots 磁碟區上以確保公平競爭。(注意:測試期間任何時候都只有一個服務處於活動狀態)。
策劃貼近現實的資料集
僅僅從 GitHub 提取原始 UE 原始碼(約 223,000 個檔案,大小僅 2.68GB)並不能複製遊戲開發中資產繁重的現實。
為了解決這個問題,我提取了 Unreal Engine 5.8.1 版本的 commit (71fe36aac5a8df5ccd66c763ffc902b29b6a9c43),安裝了依賴項,並執行了 Setup.sh。然後我獨立出「Engine」目錄,產生了一個高度準確、重量級的資料集,包含 362,028 個檔案,總計 91GB.
perforce@benchclient:/data/UnrealEngine$ git ls-files --cached --others --exclude-standard -z | \
xargs -0 stat -c '%s' | \
awk '{s+=$1} END { \
printf "Files: %d\nSize: %.2f GiB\n", NR, s/1024/1024/1024 \
}'
Files: 223987
Size: 2.68 GiB
perforce@benchclient:/data/UnrealEngine$ du -sh Engine/
91G Engine/
perforce@benchclient:/data/UnrealEngine$ find Engine/ -type f | grep -v .git | wc -l
362028所有的遙測資料都是使用 P4Prometheus、node_exporter 和 Grafana 精心捕獲的,以 15 秒的間隔抓取資料。
結果:正面交鋒效能
第一回合:新增與提交檔案
為了確保對等,我將 P4 的多執行緒提交功能與 Lore 的原生工作流程進行了比較:
- P4 工作流程:
p4 add+p4 submit(使用 10 個執行緒) - Lore 工作流程:
lore stage+lore commit+lore push
P4 最佳化提示: 預設情況下,P4 會掃描檔案以確定它們是文字(會進行壓縮)還是二進位(保持原樣)。對於 362k 個檔案,這種掃描會帶來不必要的延遲。在 P4 2026.1 中設定 filesys.binaryscan=0 即可完全消除此額外開銷。
| 指標 | P4 總計 | Lore 總計 | 裁決 |
|---|---|---|---|
| 實際耗時 (Wall Clock) | 5:15 | 14:30 | P4 勝出 (Lore 花費 2.76 倍時間) |
| 用戶端 User CPU | 178.16s | 1,278.59s | P4 勝出 (Lore 消耗多 7.18 倍 CPU) |
| 用戶端 Sys CPU | 81.42s | 152.85s | P4 勝出 (Lore 使用多 1.88 倍 Sys CPU) |
| 最大用戶端記憶體 (RSS) | 108 MB | 13,392 MB | P4 佔絕對優勢 (Lore 使用多 124 倍 RAM) |
數字背後的真相:
- P4 在提交階段在伺服器端高效地處理繁重的工作,並透過平行執行緒實現了極佳的擴展。
- Lore 的
stage指令完全在用戶端運作,造成了巨大的瓶頸。 - 雖然 Lore 的
push需要的 I/O 可以忽略不計,但其在暫存 (staging) 期間的用戶端記憶體佔用量卻非常驚人。
第二回合:獲取資料 (Sync vs. Clone)
| 指標 | P4 Sync (4 個執行緒) | Lore Clone | 裁決 |
|---|---|---|---|
| 實際耗時 (Wall Clock) | 3:10.09 | 3:22.12 | P4 勝出 (微弱優勢,Lore 花費 1.06 倍時間) |
| User CPU | 278.47s | 211.10s | Lore 勝出 (P4 使用多 1.32 倍 CPU) |
| Sys CPU | 55.37s | 170.01s | P4 勝出 (Lore 使用多 3.07 倍 Sys CPU) |
| CPU % | 175% | 188% | 統計學平手 |
| 最大記憶體 (RSS) | 988 MB | 13,720 MB | P4 佔絕對優勢 (Lore 消耗多 13.9 倍 RAM) |
數字背後的真相:
- 無論使用 4 個還是 10 個執行緒,P4 的同步時間都保持不變,這表明存在硬體的 I/O 瓶頸,而非軟體限制。
- Lore 是高度網路密集型的,儘管從磁碟讀取的資料量幾乎相同,但它在網路上推送了 51.95 GB 的資料,而 P4 為 37.68 GB(傳出流量增加了約 38%)。
- Lore 導致了明顯更高的伺服器爭用 (contention),忙碌時間高達 40.4%,而 P4 為 18.3%。
重現基準測試
Perforce P4 執行
# 1. 建立 UE5 depot 並初始化 stream
$p4 --field Type=stream depot -o UE5 \vert{} p4 depot -i$ p4 stream -t mainline -o //UE5/main | p4 stream -i
# 2. 產生目標檔案清單
$cd /data/UnrealEngine$ find Engine/ -type f | grep -v .git > ../filelist.txt
# 3. 配置工作區、新增檔案並提交
$p4 --field Stream=//UE5/main client -o Bench_ws \vert{} p4 client -i$ nohup /usr/bin/time -v p4 -Ztrack -x ../filelist.txt add > ../add.out &
$ nohup /usr/bin/time -v p4 -Ztrack submit -d "New files" > ../submit.out &
# 4. 同步至乾淨的工作區
$ mkdir /data/ws2 && cd /data/ws2
$p4 --field Stream=//UE5/main client -o Bench_ws2 \vert{} p4 client -i$ nohup /usr/bin/time -v p4 -Ztrack sync --parallel=threads=4 > ../sync.out &Lore 執行
# 1. 初始化 Lore 儲存庫
$lore repository create lore://benchserver:41337/UE5$ cd /data/UnrealEngine
# 2. Stage、Commit 和 Push 工作流程
$ nohup /usr/bin/time -v lore stage --targets ../file_list.txt > ../stage.txt &
$ nohup /usr/bin/time -v lore commit "Test of UE5 Engine" > ../commit.txt &
$ nohup /usr/bin/time -v lore push > ../push.txt &
# 3. 複製 (Clone) 至乾淨的目錄
$mkdir /data/lore_ws && cd /data/lore_ws$ nohup /usr/bin/time -v lore clone lore://benchserver:41337/UE5 > ../clone.txt &調校 P4 伺服器
雖然 SDP 提供了極佳的預設值,但要匹配這個特定的基準測試,需要調整平行執行緒並停用二進位掃描:
filesys.binaryscan: 0
net.parallel.max: 20
net.parallel.threads: 4
net.parallel.submit.threads: 4
net.parallel.sync.svrthreads: 150最終裁決:哪款引擎能驅動您的工作室?
只要設定得當,Perforce P4 和 Lore 都展現出強大的後端解決方案能力。然而,它們的架構理念決定了截然不同的基礎架構成本和使用者體驗。
Lore 預設採用激進的平行處理,這使得它一開始就極其消耗 RAM。對於不斷擷取和提交海量 UE 資料集的團隊來說,P4 的速度明顯快得多.
雖然複製/同步的速度大致平分秋色,但在雲端環境中大規模部署時,P4 呈現出巨大的成本優勢。透過減少約 38% 的傳出 (egress) 資料傳輸,並以 Lore 用戶端記憶體佔用量的一小部分運作,工作室可以為其開發人員配備更精簡、更便宜的執行個體 (instances)。Lore 最終可能會透過資產繁重專案的伺服器端重複資料刪除 (deduplication) 來抵消部分儲存成本,但這必須與其龐大的網路傳輸量和高 RAM 需求進行仔細權衡。
您的版本控制系統守護著工作室最寶貴的智慧財產權。P4 之所以能保持其行業標準的地位,是因為它能輕鬆擴展至 PB 級 (Petabytes) 的資料量,無縫處理二進位資產的獨佔鎖定 (exclusive locking),並與美術人員和開發人員的工作流程完美整合。結合廣泛的 GUI 生態系統和全球企業支援,Perforce 依然是 Unreal Engine 開發中無可爭議的重量級王者。
關於 OpenLogic
OpenLogic 由 Perforce 提供完整的企業級支援和服務,專為在其基礎設施中使用開源軟件的公司企業而設計。我們支援超過 400 種開源技術,提供保證的服務水準協議(SLA),並可直接與經驗豐富的企業架構師溝通。透過我們的 24×7 工單支援、專業服務和培訓,OpenLogic 提供綜合且全面的開源支援解決方案。
About Version 2
Version 2 Digital is one of the most dynamic IT companies in Asia. The company distributes a wide range of IT products across various areas including cyber security, cloud, data protection, end points, infrastructures, system monitoring, storage, networking, business productivity and communication products. Through an extensive network of channels, point of sales, resellers, and partnership companies, Version 2 offers quality products and services which are highly acclaimed in the market. Its customers cover a wide spectrum which include Global 1000 enterprises, regional listed companies, different vertical industries, public utilities, Government, a vast number of successful SMEs, and consumers in various Asian cities.

