遊戲 Lag 白皮書 › L11 磁碟
HDD 尋軌延遲 HDD seek latency
原因 ID dk-hdd · 主要負責 基礎設施團隊(伺服器基礎設施) · 協同 基礎設施團隊(DB 基礎設施), 遊戲開發團隊(伺服器開發)
在含圖解與實驗的完整版中開啟卡片 →
HDD 的讀寫頭必須在碟片上移動(尋軌,seek),所以讀寫分散各處的資料時,每次要花將近 10ms。
為什麼 老舊伺服器或低價儲存裝置使用 HDD → 於是 每次分散的讀寫約 10ms → 畫面上 存檔、載入全面變慢
- 症狀
- 輸入延遲
- 因素
- 延遲
- 誰會遇到
- 整個伺服器
- 何時
- 一直都有
- 負責單位
- 主要負責 基礎設施團隊(伺服器基礎設施) · 協同 基礎設施團隊(DB 基礎設施), 遊戲開發團隊(伺服器開發)
- 遊戲開發團隊要做的事
- 以循序寫入為主進行設計。
- 基礎設施團隊要做的事
- 伺服器設備/OS:換成 SSD(從分散讀寫較多的資料磁碟開始)。DB 設備:先把分散讀寫最多的 DB 磁碟換成 SSD。
- 圖表上
- 一開始就一直偏高 · 磁碟讀寫延遲(r_await、w_await)
- 查看位置
- 用 lsblk -d -o NAME,ROTA 確認是否為旋轉式磁碟(HDD),並看 iostat -x 1 的 r/s、w/s 與 r_await、w_await。虛擬伺服器則在雲端或儲存裝置的規格中確認磁碟種類
- 符合的跡象
- 是旋轉式磁碟,每秒請求只有數十~一百多個,r_await、w_await 卻一直在數 ms~數十 ms
- 不符合的跡象
- SSD 卻延遲很高時,是佇列飽和(dk-iops)或 burst credit 耗盡(dk-burst)的問題
- 確認方式
- 用基礎設施工具確認(不需要遊戲程式碼)
出處
- Designs, Lessons and Advice from Building Large Distributed Systems (LADIS 2009 keynote) Google
磁碟尋軌一次 10ms,從磁碟循序讀取 1MB 需 20ms - Exos X18 Data Sheet Seagate
7,200rpm HDD 平均旋轉延遲 4.16ms,4K 隨機讀取 170 IOPS - lsblk(8) — Linux manual page util-linux
-o:選擇輸出欄位;裝置拓撲欄位包含 ROTA(是否為旋轉式) - ABI stable symbols Linux kernel
/sys/block/(磁碟)/queue/rotational:表示裝置是旋轉式還是非旋轉式 - iostat(1) — Linux manual page sysstat
-x:r/s、w/s、r_await、w_await(每個請求的平均處理時間,包含在佇列中等待的時間)
相關原因
同一層:L11 磁碟
同一症狀(輸入延遲)在其他層的原因
查看含圖解與實驗的完整版卡片