Một FPS cao hoặc ổn định không tự cho biết CPU đã dành thời gian ở đâu trong từng khung hình. Muốn tìm khoảng chờ hay đoạn công việc bất thường, hãy xem timeline có các luồng Game, Draw và GPU, chọn cùng một đoạn chơi để phân tích, rồi đối chiếu các sự kiện ở cùng mốc thời gian. Timing Insights và CSV Profiler của Unreal Engine cung cấp những góc nhìn khác nhau; chúng hỗ trợ điều tra chứ không tự đưa ra kết luận về nguyên nhân.
Điểm chính
- FPS là kết quả gộp theo thời gian, không phải bản phân rã đầy đủ từng công đoạn của CPU và GPU.
- Trong timeline, chọn cùng một khung hoặc khoảng chơi và quan sát Game, Draw và GPU thay vì so sánh các đoạn không tương ứng.
- Timing Insights giúp điều tra quan hệ thời gian giữa các sự kiện; CSV Profiler ghi các counter do dự án khai báo. [1] [2]
- Một khoảng trống trên biểu đồ chỉ là dấu hiệu cần giải thích, không tự chứng minh CPU nhàn rỗi hay GPU bị nghẽn.
- Giữ nguyên cảnh, thiết lập, phiên bản build và cách ghi nhận khi so sánh; ghi rõ điều kiện có thể làm thay đổi kết quả.
Vì sao một số FPS không kể hết câu chuyện
FPS mô tả số khung hình được tạo hoặc hiển thị trong một đơn vị thời gian. Đây là kết quả hữu ích để nhận biết trải nghiệm tổng thể, nhưng không cho biết chính xác mỗi khung trải qua những công đoạn nào, công đoạn nào chạy nối tiếp hay song song, và luồng nào đang đợi. Hai lần chạy có thể cho FPS gần nhau trong khi cấu trúc thời gian bên trong khác nhau. Vì vậy, một biểu đồ tổng hợp tốt để phát hiện thời điểm đáng chú ý, nhưng chưa đủ để xác định nguyên nhân.
Cũng cần phân biệt thời gian CPU, GPU và thời điểm trình bày khung hình. Đoạn GPU dài không nhất thiết có nghĩa CPU đang bận tương ứng; CPU có thể chuẩn bị công việc trong lúc GPU xử lý, hoặc ngược lại. Một khoảng trống giữa các sự kiện có thể liên quan đến đồng bộ, chờ tài nguyên, tải dữ liệu, lịch chạy luồng hoặc cách công cụ thu thập. Không nên gán nhãn “CPU bottleneck” chỉ vì một đường biểu đồ có vẻ thấp hoặc rỗng.
Đọc timeline Game, Draw và GPU theo cùng mốc
Timing Insights của Unreal Engine cho phép khảo sát các sự kiện theo thời gian trong trace. Bắt đầu bằng việc chọn một đoạn đại diện, định vị frame có biểu hiện cần hiểu, rồi mở rộng quan sát quanh nó. Đặt các luồng Game, Draw và GPU cạnh nhau để hỏi: sự kiện nào bắt đầu trước, sự kiện nào kết thúc sau, có quan hệ chờ nào được thể hiện, và hiện tượng có lặp lại ở nhiều frame hay chỉ xuất hiện một lần? Tài liệu Epic mô tả Timing Insights như công cụ phân tích trace; cách diễn giải vẫn phụ thuộc dữ liệu trace thực tế. [1]
Không chọn một frame bất thường rồi xem nó như đại diện cho toàn bộ phiên. Hãy kiểm tra thêm các frame trước và sau, đồng thời đánh dấu điểm bắt đầu của thao tác, chuyển cảnh hoặc tải tài nguyên nếu có. So sánh với đoạn không gặp vấn đề trong cùng build có thể hữu ích hơn là so với một bản chạy khác có nhiều thiết lập thay đổi. Nếu trace không chứa sự kiện đủ chi tiết, kết luận đúng là cần bổ sung dữ liệu, không phải tự điền phần còn thiếu.
Counter CSV trả lời câu hỏi khác với trace
CSV Profiler là cách ghi các counter được dự án Unreal cấu hình để phân tích. Nó có thể giúp theo dõi giá trị theo thời gian hoặc so sánh các chỉ số đã chọn, nhưng không mặc định ghi mọi thứ mà người đọc muốn biết. Trước khi chạy, xác định counter nào đã được bật, đơn vị và chu kỳ lấy mẫu ra sao, rồi kiểm tra tên cột thay vì suy đoán ý nghĩa từ nhãn gần giống. Epic mô tả profiler theo cơ chế counter CSV; sự hiện diện hay vắng mặt của một cột phụ thuộc thiết lập và phiên bản dự án. [2]
Dùng CSV khi câu hỏi gắn với những đại lượng đã được instrument, ví dụ một bộ đếm do nhóm dự án chủ động đưa vào. Dùng trace khi cần xem chuỗi sự kiện và quan hệ thời gian. Hai dạng dữ liệu có thể bổ sung nhau nhưng không thể thay thế tùy tiện. Nếu timestamp hoặc khoảng lấy mẫu không tương ứng, tránh ghép hai biểu đồ như thể chúng cùng độ phân giải. Ghi lại cách thu thập để người khác có thể lặp lại phép đo.
Một quy trình điều tra có thể lặp lại
Trước hết, mô tả triệu chứng bằng điều kiện cụ thể: cảnh nào, thao tác nào, cấu hình nào và biểu hiện xuất hiện thường xuyên hay thoáng qua. Sau đó tạo trace trong đúng phiên bản build, bảo đảm các kênh cần thiết được ghi. Chọn một đoạn chơi ngắn, ổn định và có thể lặp lại; tránh vừa thay đổi chất lượng đồ họa, vừa cập nhật driver, vừa đổi cảnh vì khi đó khó biết yếu tố nào tạo ra khác biệt.
Tiếp theo, chọn frame đáng chú ý và đối chiếu Game, Draw cùng GPU. Ghi thời điểm, độ dài sự kiện hiển thị và các dấu hiệu đồng bộ mà trace thực sự cung cấp. Nếu câu hỏi liên quan đến counter, xác nhận counter đã được khai báo và xuất hiện trong CSV. Lặp lại phép đo vài lần trong cùng điều kiện để phân biệt hiện tượng ổn định với nhiễu; không cần biến số lần lặp thành cam kết thống kê nếu chưa thiết kế phép thử phù hợp.
Cuối cùng, viết kết luận theo ba mức: quan sát trực tiếp, giả thuyết cần kiểm tra, và phần chưa thể biết. Chẳng hạn, có thể nói “ở đoạn trace này, khoảng giữa hai sự kiện xuất hiện trên luồng X” nhưng không tự kết luận “CPU bị nghẽn” nếu chưa xác định nguyên nhân. Nếu cần hướng dẫn xem nội dung thể thao trực tiếp, bạn có thể theo dõi thông tin các trận bóng đá trực tiếp trên KLIVE; liên kết này không phải tài liệu đo hiệu năng hay bằng chứng cho diễn giải trace.
Người đọc có thể khám phá nội dung thể thao qua Thông tin các trận bóng đá trực tiếp trên KLIVE; bài viết không khẳng định sự kiện cụ thể đang phát.
Nguồn tham khảo
Câu hỏi thường gặp
FPS cao có chứng minh CPU không phải nút thắt không?
Không. FPS là chỉ số tổng hợp; cần xem dữ liệu theo frame và các luồng liên quan trong điều kiện thử nghiệm cụ thể.
Timing Insights tự xác định nguyên nhân khoảng chờ chứ?
Không. Công cụ giúp quan sát và phân tích trace, nhưng người đọc phải dựa trên sự kiện được ghi và xác minh giả thuyết.
CSV Profiler có ghi mọi counter mặc định không?
Không nên giả định như vậy. Hãy kiểm tra counter được cấu hình, tên trường, đơn vị và cách lấy mẫu của dự án.
Có nên kết luận từ một frame đơn lẻ không?
Một frame có thể gợi ý hướng điều tra, nhưng cần đối chiếu các frame lân cận và lặp lại trong điều kiện tương đương.