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

Sách trắng lag game › L1 Tiến trình game phía client

Ổ lưu trữ chậm khiến streaming asset không theo kịp Slow storage stalls asset streaming

ID nguyên nhân cg-asset-stream · Phụ trách chính Phát triển client (Đội phát triển game) · Phối hợp Bên ngoài (Bên ngoài)

Mở thẻ gốc có hình minh họa và thí nghiệm →

Trên ổ lưu trữ chậm như HDD, tốc độ đọc texture và model của thế giới mở không theo kịp tốc độ di chuyển, nên đối tượng hiện ra muộn hoặc game giật vì phải chờ đọc xong.

Vì sao Di chuyển nhanh bằng thú cưỡi hoặc teleport, hay đi vào nơi đông người, nên cần cùng lúc nhiều texture và model mới → Dẫn đến Ổ lưu trữ chậm như HDD không đọc kịp tốc độ cần thiết nên yêu cầu đọc dồn lại, một số phần loading khiến main thread phải chờ tới khi xong → Trên màn hình Texture mờ một lúc, nhà cửa và nhân vật hiện ra muộn; lúc chờ đọc thì giật khựng hoặc đứng hình

Triệu chứng
Không hiển thị·đối tượng ma, Giật khựng, Đứng hình
Yếu tố
Ngưng trệ
Ai gặp phải
Chỉ mình tôi
Khi nào
Khi di chuyển hoặc chuyển bản đồ, Khi đông người
Phụ trách
Phụ trách chính Phát triển client (Đội phát triển game) · Phối hợp Bên ngoài (Bên ngoài)
Việc cần làm (Đội phát triển game)
Streaming bất đồng bộ để main thread không phải chờ đọc, đọc trước dựa trên hướng và tốc độ di chuyển, hiển thị trước bản độ phân giải thấp (mipmap) và model đơn giản rồi thay sau, khi streaming không theo kịp lúc di chuyển nhanh thì tạm giới hạn tốc độ di chuyển hoặc dùng màn hình loading, ghi rõ có cần SSD hay không trong cấu hình tối thiểu và cấu hình đề nghị.
Việc cần làm (Bên ngoài)
Hướng dẫn người chơi cài game lên SSD, kiểm tra xem trên cùng ổ đĩa có đang tải file hoặc phần mềm diệt virus đang quét hay không.
Con số tham khảo
Theo Microsoft, ổ cứng HDD đời cũ đọc được vài chục MB trong 1 giây, NVMe SSD đọc được vài GB trong 1 giây, còn game thế hệ trước dùng khoảng 50 MB trong 1 giây cho streaming. Game được thiết kế dựa trên tốc độ SSD và đọc nhiều hơn thế rất nhiều, khi chạy trên HDD thì việc đọc dễ không theo kịp tốc độ di chuyển.
Trên đồ thị
Chỉ một phần cao · Số lần khung hình vọt lên (theo loại ổ lưu trữ), độ trễ đọc đĩa
Chỗ cần xem
Vừa di chuyển nhanh vừa ghi đồng thời PhysicalDisk\Avg. Disk sec/Read (thời gian trung bình của một lần đọc), Current Disk Queue Length trong Performance Monitor của Windows và frame time của PresentMon. Trên bản build development: stat Streaming, stat AsyncLoad của Unreal; cảnh báo AssetBundle.asset/allAssets trong Unity Profiler (yêu cầu kết quả trước khi tải xong nên main thread phải chờ)
Đúng nếu
khi di chuyển nhanh, độ trễ đọc đĩa và hàng đợi tăng vọt, cùng lúc đó khung hình vọt lên hoặc texture, đối tượng hiện muộn. Chạy cùng cảnh đó trên SSD thì hết
Loại trừ nếu
ổ đĩa rảnh mà texture vẫn mờ → “Thiếu bộ nhớ đồ họa (VRAM)”; từ lần thứ hai tới cùng chỗ thì bình thường → “Tải đồng bộ trên main thread và biên dịch shader”
Cách kiểm tra
Kiểm tra ở môi trường phía người chơi
Tìm hiểu thêm
Nếu chỉ dừng ở lần đầu rồi sau đó bình thường thì gần với “Tải đồng bộ trên main thread và biên dịch shader”; nếu chỉ lặp lại mỗi khi di chuyển trên PC có ổ lưu trữ chậm thì là nguyên nhân này. Khi thiếu bộ nhớ đồ họa, texture bị hạ xuống rồi nạp lại (“Thiếu bộ nhớ đồ họa (VRAM)”) và cũng trông mờ, nên hãy xem cùng lúc thời gian chờ đọc đĩa và mức dùng bộ nhớ đồ họa. Tính năng quét thời gian thực của phần mềm diệt virus chen vào mỗi lần game mở file cũng có thể làm việc đọc chậm thêm.

Nguồn

  1. DirectStorage is coming to PC Microsoft
    HDD đời cũ đọc vài chục MB mỗi giây, NVMe SSD vài GB mỗi giây, ngân sách streaming asset của game thế hệ trước khoảng 50 MB mỗi giây; game thế giới mở vừa di chuyển vừa đọc rồi bỏ cảnh vật ở xa theo thời gian thực
  2. Texture and mesh loading Unity
    Upload đồng bộ đọc và đẩy dữ liệu lên trong một khung hình trên main thread nên gây dừng thấy rõ; upload bất đồng bộ streaming rải ra nhiều khung hình
  3. Texture Streaming Overview for Unreal Engine Epic Games
    Streamer tăng giảm độ phân giải texture (mip) theo góc nhìn; phần lớn tính toán chạy trên worker thread bất đồng bộ, mip đang hiện trên màn hình được tải trước
  4. Profiler markers reference Unity
    Cảnh báo AssetBundle.asset/allAssets: yêu cầu kết quả trước khi tải xong nên main thread dừng lại chờ
  5. Stat Commands in Unreal Engine Epic Games
    stat Streaming (bộ nhớ và số lượng texture streaming), stat AsyncLoad (thống kê tải bất đồng bộ)
  6. Windows Performance Monitor Disk Counters Explained Microsoft
    Avg. Disk sec/Read là thời gian trung bình để hoàn tất một lần đọc (độ trễ I/O), Current Disk Queue Length là độ dài hàng đợi đĩa tại thời điểm đo
  7. PresentMon Capture Application (README-CaptureApplication.md) Intel
    Ghi lại thời gian từng khung hình bằng FrameTime (thời gian CPU giữa hai khung hình)
  8. About regular quick and full scans with Microsoft Defender Antivirus Microsoft
    Tính năng bảo vệ thời gian thực quét file mỗi lần file được mở và đóng

Nguyên nhân nên xem cùng

Cùng tầng: L1 Tiến trình game phía client

Nguyên nhân ở tầng khác gây cùng triệu chứng (Không hiển thị·đối tượng ma)

Xem thẻ gốc có hình minh họa và thí nghiệm