Khi Unity không trả GPU frame time, cần xác minh điều gì?
Khi profiler không hiển thị GPU frame time, kết luận an toàn đầu tiên là “chưa có dữ liệu GPU khả dụng trong lần đo này”. Trường trống có thể bắt nguồn từ nền tảng, graphics API, cấu hình hoặc cách đọc dữ liệu; nó không tự chứng minh GPU nhàn rỗi hay không có workload.
Điểm chính
- Unity Frame Timing Manager thu thập dữ liệu thời gian khung hình trong điều kiện hỗ trợ; cần kiểm tra giới hạn phiên bản và nền tảng. [1]
- Phân biệt dữ liệu bằng không, dữ liệu không hợp lệ và trường không được cung cấp.
- Ghi lại thiết bị, hệ điều hành, graphics API, build và cấu hình capture.
- Đối chiếu một công cụ hoặc chế độ đo khác mà không coi khác biệt là lỗi ngay lập tức.
- Không quy các trường timing thành độ trễ đầu-cuối nếu tài liệu API không định nghĩa như vậy.
Trường thiếu dữ liệu không phải bằng chứng GPU nhàn rỗi
Profiler có thể hiển thị CPU frame time nhưng không có GPU frame time. Hai đại lượng này được đo theo những cách và điều kiện khác nhau. Nếu một API không cung cấp giá trị, ứng dụng vẫn có thể đang gửi lệnh đồ họa và GPU vẫn có thể xử lý chúng. Điều có thể kết luận trực tiếp chỉ là nguồn dữ liệu hiện tại không trả về trường cần xem.
Unity Frame Timing Manager cung cấp API để thu thập timing thông tin về CPU và GPU, nhưng tài liệu nêu các điều kiện và giới hạn triển khai theo nền tảng. Vì vậy, trước hết hãy xác nhận môi trường đang chạy nằm trong phạm vi hỗ trợ và cách gọi API đúng với phiên bản dự án. [1]
Đọc trạng thái trả về cùng giá trị. Một số API biểu đạt “không có dữ liệu” qua cờ hợp lệ hoặc giá trị sentinel thay vì số 0. Không nên tự thay thế trường thiếu bằng 0, bởi biểu đồ khi đó có thể tạo ấn tượng sai rằng GPU hoàn tất tức thời.
Kiểm tra từng lớp của môi trường
Bắt đầu từ phiên bản Unity và phiên bản tài liệu/API đang dùng. Nếu tài liệu của một phiên bản cụ thể mô tả hành vi, không mặc định hành vi đó giống hệt ở mọi phiên bản khác. Xác nhận API được gọi trong đúng chu kỳ, dữ liệu đã được cập nhật và kết quả được đọc sau khi hệ thống có cơ hội hoàn tất phép đo.
Tiếp theo ghi lại thiết bị, hệ điều hành, graphics API và backend đang hoạt động. Thử một cấu hình được hỗ trợ đã biết nếu có thể, nhưng chỉ đổi một thành phần mỗi lần. Nếu thay API đồ họa đồng thời với đổi thiết bị và chất lượng hình ảnh, sẽ khó xác định điều gì làm thay đổi kết quả.
Kiểm tra thêm profiler có đang chạy trong Editor hay bản build, có ảnh hưởng của chế độ Development, và trace có cắt mất đoạn đo hay không. Mỗi điều kiện có thể tác động đến dữ liệu hoặc tải thực tế; nêu rõ chúng trong báo cáo.
Đối chiếu dữ liệu thay vì suy đoán
Nếu API không trả timing, dùng công cụ đồ họa của nền tảng hoặc profiler tương thích để tìm hiểu workload, nhưng xem chúng là các phép đo khác nhau. Tên trường giống nhau không đảm bảo định nghĩa, điểm lấy mẫu và độ bao phủ giống nhau. Ghi công cụ, thiết lập và đơn vị của từng số liệu; không ghép các con số thành một chỉ số mới nếu chưa hiểu quy ước.
Thực hiện một cảnh tái lập được với thao tác và thời lượng cố định. Lưu log về trạng thái trả về, không chỉ chụp biểu đồ. So sánh nhiều lượt cùng thiết bị và cấu hình; nếu dữ liệu xuất hiện thất thường, điều đó cũng là phát hiện về độ ổn định phép đo, chưa phải bằng chứng phần cứng có vấn đề.
CPU frame time thấp không nhất thiết có nghĩa cả frame nhanh, và GPU frame time thiếu cũng không cho biết frame bị giới hạn ở đâu. Để xác định nút thắt, cần dữ liệu phù hợp về CPU, GPU, đồng bộ và nhịp trình bày, trong phạm vi mà công cụ hỗ trợ.
Báo cáo kết quả đúng phạm vi
Một báo cáo tốt viết: “Trong build X trên thiết bị Y dùng API Z, Frame Timing Manager cung cấp CPU timing nhưng GPU timing không hợp lệ ở các lượt thử này; chưa thể kết luận GPU nhàn rỗi. Cần xác minh hỗ trợ của API và đối chiếu công cụ nền tảng.” Báo cáo nên kèm phiên bản, điều kiện chạy, trạng thái API, cảnh, thời điểm và các thay đổi đã thử.
Tránh đưa latency CPU/GPU thành độ trễ người chơi cảm nhận. Thời gian một đoạn xử lý, thời gian frame và độ trễ đầu-cuối là khái niệm khác nhau, đòi hỏi điểm đo khác nhau. Khi dữ liệu không trả lời câu hỏi, nói rõ giới hạn sẽ hữu ích hơn việc điền một con số ước đoán.
Trong lúc theo dõi lịch thi đấu esports, bạn có thể xem Điểm đến cho giải đấu esports đang diễn ra: KLIVE. Liên kết này chỉ phục vụ nội dung thể thao, không phải nguồn chứng minh hiệu năng Unity.
Nguồn tham khảo
Câu hỏi thường gặp
GPU frame time trống có nghĩa GPU không chạy không?
Không. Chỉ có thể nói trường timing chưa có dữ liệu hợp lệ trong điều kiện đo; GPU vẫn có thể đang xử lý workload.
Có nên coi giá trị 0 là thời gian GPU bằng không?
Không nếu API dùng 0 hoặc sentinel để biểu thị dữ liệu không hợp lệ. Hãy kiểm tra cờ trạng thái và tài liệu đúng phiên bản.
Tôi nên ghi gì khi gửi lỗi?
Nêu phiên bản Unity, thiết bị, hệ điều hành, graphics API, loại build, trạng thái trả về và các bước tái hiện; đính kèm log hoặc capture phù hợp.
Wo Bürger die Zukunft ihrer Stadt verhandeln. Seit 2014.
Jetzt mitdiskutieren