Khi dữ liệu nằm rải rác khắp bộ nhớ, lần nào CPU cũng phải đi tới tận RAM vốn chậm hơn và chờ.
Vì sao Đối tượng nằm rải rác, nối với nhau bằng con trỏ, và bị truy cập không theo thứ tự → Dẫn đến Dữ liệu không có trong cache CPU nên lần nào cũng phải đọc từ RAM (chậm hơn khoảng 100 lần) → Trên màn hình Cùng một việc mà chi phí mỗi tick tăng gấp mấy lần, nặng thì quay chậm
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)
Xếp liền nhau những dữ liệu hay được dùng cùng nhau (thiết kế hướng dữ liệu, data-oriented design).
Trên đồ thị
Luôn cao ngay từ đầu · Thời gian xử lý tick, mức sử dụng CPU
Chỗ cần xem
Chạy perf stat -d -p PID trên tiến trình server game để đo số lệnh mỗi chu kỳ (insn per cycle) và cache miss L1, LLC, rồi xem cùng thời gian xử lý tick và mức sử dụng CPU
Đúng nếu
CPU bận liên tục mà insn per cycle thấp, LLC miss nhiều. Nếu ở bản build đã đổi cách bố trí dữ liệu, cùng số người mà thời gian xử lý tick giảm mạnh thì có thể khẳng định
Loại trừ nếu
mức sử dụng CPU thấp mà tick vẫn chậm → nguyên nhân chờ bên ngoài CPU như lock, chờ I/O
Cách kiểm tra
Kiểm tra bằng công cụ hạ tầng (không cần code game)
perf-stat(1) — Linux manual pageperf -p đếm sự kiện phần cứng của tiến trình đang chạy và hiển thị insn per cycle, -d bổ sung các sự kiện cache dữ liệu L1 và LLC