Cách đọc một khoảng trống trên GPU timeline mà không đoán mò?
Một khoảng trống trên GPU timeline cho biết GPU không có việc được giao trong đoạn đó, nhưng không tự nó nói rõ vì sao. Muốn tránh đoán mò, cần truy ngược submission ngay trước khoảng trống, trạng thái CPU và fence, cùng tài nguyên liên quan, rồi kiểm chứng bằng một phép thử loại trừ trong đúng trace đã thu.
Điểm chính
- Khoảng trống trên timeline là câu hỏi điều tra, không phải chẩn đoán; nguyên nhân nằm ở chuỗi sự kiện trước đó.
- Điểm truy ngược đầu tiên là submission ngay trước khoảng trống: lệnh nào đã gửi, khi nào và có bị nghẽn ở CPU không. [1]
- Tiếp theo là kiểm tra đồng bộ CPU và fence, vì GPU chờ thường phản ánh công việc chưa sẵn sàng chứ không phải GPU rỗi một cách ngẫu nhiên.
- Mỗi giả thuyết phải được kiểm bằng một phép thử loại trừ có thể quan sát lại trên trace, thay vì khẳng định bằng cảm nhận.
- Profiler chỉ cung cấp bằng chứng trong lần thu thập đã ghi, nên mọi kết luận đều phải gắn với đúng trace đó.
Khoảng trống nói được gì và không nói được gì
Trên timeline, khoảng trống nghĩa là trong đoạn thời gian đó không có công việc GPU nào được ghi nhận đang chạy. Đây là quan sát, không phải nguyên nhân. Cùng một hình ảnh khoảng trống có thể đến từ nhiều kịch bản khác nhau: CPU chưa gửi việc kịp, luồng công việc bị chặn ở điểm đồng bộ, tài nguyên chưa sẵn sàng, hoặc đơn giản là khung hình đó vốn ít việc. [1] Vì vậy, đọc khoảng trống mà không truy ngược chuỗi sự kiện trước đó chẳng khác nào đoán mò.
Thói quen đúng là coi khoảng trống như một mốc thời gian để đặt câu hỏi: ngay trước mốc này đã xảy ra gì, và điều gì lẽ ra phải xảy ra nhưng đã không xảy ra. Câu trả lời nằm ở submission, barrier, fence và hoạt động CPU kề trước, chứ không nằm ở bản thân đoạn trống. Chỉ khi các mắt xích này được liệt kê đầy đủ, giả thuyết mới có cơ sở.
Truy ngược submission, CPU và fence
Bắt đầu từ submission gần nhất trước khoảng trống: kiểm tra lệnh nào đã được gửi, hàng đợi nào nhận, và thời điểm gửi so với thời điểm GPU rỗi. Nếu lệnh được gửi muộn, vấn đề có thể nằm ở luồng CPU, chẳng hạn luồng render bị chặn hoặc công việc chuẩn bị khung hình chưa xong. Lúc này cần mở rộng sang hoạt động CPU cùng mốc thời gian để xem luồng nào đang bận và đang chờ điều gì.
Nếu lệnh đã gửi đúng hạn mà GPU vẫn chờ, kiểm tra các điểm đồng bộ như fence và sự kiện giữa các hàng đợi hoặc giữa các khung hình. Một fence chưa được báo hiệu sẽ giữ công việc lại đúng như quan sát thấy, và nguyên nhân thực sự lại nằm ở bên sản xuất tín hiệu đó. Việc đọc cả hai phía của điểm đồng bộ giúp tránh quy kết nhầm cho phía đang chờ.
Tài nguyên liên quan và phép thử loại trừ
Khi submission và đồng bộ không giải thích hết, kiểm tra tài nguyên mà công việc tiếp theo cần: bộ nhớ, residency, hoặc dữ liệu tải lên chưa hoàn tất. Một tài nguyên bị thay ra hoặc chưa sẵn sàng có thể khiến công việc không thể bắt đầu đúng hạn, để lại khoảng trống trên timeline. Ghi lại tên tài nguyên, thời gian sống và thao tác liên quan gần nhất để giả thuyết có địa chỉ cụ thể.
Mỗi giả thuyết cần một phép thử loại trừ: thay đổi một yếu tố duy nhất rồi thu trace mới để xem khoảng trống có dịch chuyển hay biến mất không. Chỉ giữ lại giả thuyết nào vượt qua được phép thử, và loại bỏ phần còn lại thay vì cố giữ mọi phỏng đoán. Sau khi hoàn tất phần điều tra timeline, nếu muốn chuyển sang nội dung thể thao giải trí, bạn có thể mở Cập nhật kết quả các trận bóng đá tại KLIVE; trang này là nội dung thể thao trực tiếp, không phải công cụ xác minh hiệu năng GPU.
Giữ kết luận trong phạm vi trace đã thu
Mọi kết luận từ profiler đều gắn với đúng lần thu thập: cùng game, cùng cảnh, cùng cấu hình và cùng thiết lập. Đổi bất kỳ yếu tố nào cũng có thể làm khoảng trống biến mất hoặc xuất hiện ở chỗ khác, vì vậy không nên biến một phát hiện trong trace thành quy luật chung cho mọi máy. Khi chia sẻ, luôn ghi kèm điều kiện thu thập và phiên bản công cụ để người đọc sau tái lập được.
Cuối cùng, trình bày theo thứ tự bằng chứng: quan sát thấy gì, đã truy ngược những gì, phép thử nào đã làm, và giả thuyết nào còn đứng vững. Cách trình bày này giúp người khác kiểm tra lại từng bước thay vì phải tin vào một kết luận đóng gói sẵn. Đó cũng là ranh giới giữa điều tra kỹ thuật và suy đoán cảm tính.
Nguồn tham khảo
Câu hỏi thường gặp
Thấy GPU rỗi một đoạn có nghĩa GPU có vấn đề không?
Chưa thể kết luận. Khoảng trống chỉ cho biết GPU không có việc trong đoạn đó, nguyên nhân có thể nằm ở CPU gửi việc muộn, điểm đồng bộ fence, hoặc tài nguyên chưa sẵn sàng. Cần truy ngược chuỗi sự kiện trước mốc đó mới có cơ sở.
Nên bắt đầu điều tra khoảng trống từ đâu?
Bắt đầu từ submission gần nhất trước khoảng trống, sau đó mở rộng sang hoạt động CPU cùng mốc thời gian và các điểm đồng bộ như fence. Ghi lại từng mắt xích trước khi đưa ra giả thuyết.
Vì sao phải gắn kết luận với đúng trace đã thu?
Vì profiler chỉ phản ánh lần thu thập cụ thể với game, cảnh, cấu hình và thiết lập đó. Đổi điều kiện có thể đổi hẳn hình ảnh timeline, nên tách kết luận khỏi trace gốc sẽ biến phát hiện thành suy đoán.