遊戲 Lag 白皮書 › L10 記憶體
Swap Swapping
原因 ID mem-swap · 主要負責 基礎設施團隊(伺服器基礎設施) · 協同 遊戲開發團隊(伺服器開發)
在含圖解與實驗的完整版中開啟卡片 →
記憶體不足、OS 把部分內容移到磁碟後,每次用到那塊記憶體,都得等待慢上 1,000 倍以上的磁碟。
為什麼 使用中的記憶體超過實體 RAM → 於是 OS 把一部分移到磁碟,需要時再讀回來 → 畫面上 tick 暴增到數百 ms,伺服器上所有玩家都遇到慢動作與定格
- 症狀
- 慢動作, 定格
- 因素
- 停滯
- 誰會遇到
- 整個伺服器
- 何時
- 開越久越嚴重, 晚間尖峰時段
- 負責單位
- 主要負責 基礎設施團隊(伺服器基礎設施) · 協同 遊戲開發團隊(伺服器開發)
- 遊戲開發團隊要做的事
- 為處理程序的記憶體用量設定上限(heap 大小等),並檢查洩漏。
- 基礎設施團隊要做的事
- 將遊戲伺服器設定為不使用 swap,並以記憶體警示因應;關閉 swap 後,記憶體一不足就會被強制終止(OOM),因此要準備比尖峰用量更充裕的 RAM。
- 數值參考
- 讀取 RAM 約 100ns,從 SSD 讀回約 100µs(1,000 倍),透過網路存取的雲端磁碟約 1ms(1 萬倍),HDD 則是 10ms(10 萬倍)。
- 圖表上
- 緩慢爬升 · swap 用量、swap in/out
- 查看位置
- 把 vmstat 1 的 si、so 欄(每秒從 swap 讀回、移出到 swap 的量)、/proc/pressure/memory 的 some、full(因等待記憶體而停住的時間比例)、遊戲伺服器處理程序的 pidstat -r majflt/s(必須從磁碟讀入的分頁錯誤)與 tick 時間疊在一起看
- 符合的跡象
- lag 發生時 si 大於 0,遊戲伺服器的 majflt/s 與 memory 的 full 值一起上升
- 不符合的跡象
- si、so 為 0 且 memory 壓力(PSI)也接近 0 時,原因不在 swap。沒有 swap 但 majflt/s 與 PSI 上升時,代表記憶體耗盡、正在重新讀入程式碼分頁,要先確保有足夠的記憶體
- 確認方式
- 用基礎設施工具確認(不需要遊戲程式碼)
- 深入了解
- 使用 GC 的伺服器在回收時會讀遍整個 heap,因此只要 heap 有一部分被 swap 出去,單次 GC 就可能拉長到數秒~數十秒。關閉 swap 後,不會經過因 swap 而變慢的階段,會直接進入強制終止(OOM),所以必須先確保有足夠的可用記憶體。即使沒有 swap,記憶體快用完時,OS 也會把執行檔的程式碼分頁移出記憶體再重新讀入,因此在被強制終止前,整個伺服器可能會有一段時間嚴重變慢。
出處
- Designs, Lessons and Advice from Building Large Distributed Systems (LADIS 2009 keynote) Google
「Numbers Everyone Should Know」:主記憶體存取 100ns、磁碟尋軌 10ms(以 2009 年為準) - Documentation for /proc/sys/vm/ Linux kernel
swappiness:swap 與回收檔案分頁的相對成本;swap 屬於隨機 I/O,成本較高 - Concepts overview Linux kernel
回收在磁碟上有原始資料的頁面快取與可 swap 的分頁,仍不夠時由 OOM killer 終止處理程序 - Solidigm™ D7-P5520 and D7-P5620 Product Brief Solidigm
伺服器用 NVMe SSD 的 99.99% 延遲(four-nines latency)為 130µs:SSD 單次讀取約 100µs 的依據 - Amazon EBS General Purpose SSD volumes AWS
雲端預設磁碟(gp3)的延遲為個位數 ms - vmstat(8) — Linux manual page procps-ng
si:每秒從 swap 讀回的記憶體;so:每秒移出到 swap 的記憶體 - PSI - Pressure Stall Information Linux kernel
/proc/pressure/memory 的 some(部分工作停住的時間比例)與 full(所有工作同時停住的時間比例) - pidstat(1) — Linux manual page sysstat
-r:majflt/s(必須從磁碟讀入分頁的錯誤次數)
相關原因
同一層:L10 記憶體
同一症狀(慢動作)在其他層的原因
查看含圖解與實驗的完整版卡片