한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

遊戲 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)的問題
確認方式
用基礎設施工具確認(不需要遊戲程式碼)

出處

  1. Designs, Lessons and Advice from Building Large Distributed Systems (LADIS 2009 keynote) Google
    磁碟尋軌一次 10ms,從磁碟循序讀取 1MB 需 20ms
  2. Exos X18 Data Sheet Seagate
    7,200rpm HDD 平均旋轉延遲 4.16ms,4K 隨機讀取 170 IOPS
  3. lsblk(8) — Linux manual page util-linux
    -o:選擇輸出欄位;裝置拓撲欄位包含 ROTA(是否為旋轉式)
  4. ABI stable symbols Linux kernel
    /sys/block/(磁碟)/queue/rotational:表示裝置是旋轉式還是非旋轉式
  5. iostat(1) — Linux manual page sysstat
    -x:r/s、w/s、r_await、w_await(每個請求的平均處理時間,包含在佇列中等待的時間)

相關原因

同一層:L11 磁碟

同一症狀(輸入延遲)在其他層的原因

查看含圖解與實驗的完整版卡片