Việc chuyển dữ liệu cần gửi thành byte và nén cũng tốn CPU, và khi đông người, chi phí này tăng vọt.
Vì sao Mỗi bản cập nhật đều phải chuyển struct thành byte rồi nén → Dẫn đến Chi phí tăng theo bình phương số người → Trên màn hình Dữ liệu gửi đi trễ, gây trễ thao tác
Phụ trách chính Phát triển server (Đội phát triển game)
Việc cần làm (Đội phát triển game)
Dùng lại gói đã tạo một lần cho nhiều người, dùng định dạng gọn nhẹ.
Trên đồ thị
Tăng theo số người và tải · Mức sử dụng CPU của server, CPU của thread tạo gói tin
Chỗ cần xem
Tỷ trọng của các hàm serialize, nén, mã hóa (kể cả hàm thư viện như zlib, LZ4, OpenSSL) trong thời gian CPU của tiến trình game qua perf top -p, so giữa lúc vắng và lúc đông người
Đúng nếu
người càng đông, tỷ trọng các hàm serialize, nén, mã hóa càng lớn, và thread tạo gói tin bão hòa trước tiên
Loại trừ nếu
các hàm này chiếm tỷ trọng nhỏ → tính toán tầm nhìn hoặc logic game
Cách kiểm tra
Kiểm tra bằng công cụ hạ tầng (không cần code game)
Tìm hiểu thêm
Nếu kết nối có mã hóa gói tin (TLS, DTLS, v.v.), việc mã hóa và giải mã cũng tốn CPU. Mã hóa được làm riêng cho từng kết nối, nên dù dùng lại một gói cho nhiều người, chi phí mã hóa vẫn tăng theo số người nhận. Mã hóa đối xứng như AES-GCM nhanh đến mức một core xử lý được vài GB mỗi giây nên bình thường chiếm tỷ trọng nhỏ, nhưng tốc độ thay đổi nhiều theo kích thước của đơn vị mã hóa mỗi lần (record), nên với nhiều gói nhỏ như trong game, chi phí trên mỗi byte tăng lên. Ở bước handshake làm một lần cho mỗi kết nối, server ký bằng khóa của chứng chỉ và tính trao đổi khóa (ECDHE). Mỗi giây, một core ký được khoảng 1.100 lần (RSA 2048) đến 18.000 lần (ECDSA P-256) và trao đổi khóa khoảng 9.000 lần, nên khi đăng nhập dồn dập, đây là một gánh nặng.
Nguồn
Introduction to Iris in Unreal EngineEpic Games Giữ trạng thái cần replicate dưới dạng một bản sao đã lượng tử hóa để giảm việc tốn kém, và các kết nối dùng chung phần việc đó
VALORANT's 128-Tick ServersRiot Games Cách mỗi frame so sánh biến replicate cho từng client rồi gom các giá trị đã đổi là việc chậm vì phải đọc bộ nhớ rải rác nhiều chỗ, nên tốn nhiều CPU của server
How "expensive" is crypto anyway?Cloudflare Đo trên BoringSSL: AES-128-GCM khoảng 3,7 GB mỗi giây (thay đổi nhiều theo kích thước record); mỗi core mỗi giây ký RSA 2048 được 1.120 lần, ký ECDSA P-256 được 18.477 lần, P-256 ECDHE được 9.394 lần; trên server edge của Cloudflare, thư viện TLS dùng khoảng 1,8% CPU
perf-top(1) — Linux manual pageperf Hiển thị theo thời gian thực tỷ trọng CPU theo từng hàm (symbol) của tiến trình (-p) đang chạy