Ước tính thời gian xử lý khung hình của CPU và GPU

Việc ước tính thời gian xử lý khung hình của CPU và GPU (thời gian kết xuất khung hình) là điều cần thiết để hiểu hiệu suất của ứng dụng và xác định các điểm tắc nghẽn. Khi bạn phân tích một ứng dụng bằng AGI, Trình phân tích hệ thống sẽ cung cấp dữ liệu dấu vết mà bạn có thể dùng để ước tính thời gian khung hình.

Thời gian của CPU

Trong AGI, bạn có thể xem tổng thời gian khung hình CPU và thời gian khung hình CPU đang hoạt động trong bản theo dõi CPU của một hồ sơ hệ thống.

Tổng thời gian của CPU

Để đo tổng thời gian CPU đã sử dụng, hãy chọn phạm vi thời gian bao gồm thời gian giữa các sự kiện gửi khung hình liên tiếp. Các sự kiện gửi khung hình là eglSwapBuffers (đối với OpenGL) và vkQueuePresentKHR (đối với Vulkan).

Ảnh chụp màn hình các sự kiện eglSwapBuffer.
Hình 1. Thời gian giữa hai sự kiện eglSwapBuffer.


Ảnh chụp màn hình của một sự kiện vkQueuePresentKHR.
Hình 2. Thời gian giữa hai sự kiện vkQueuePresentKHR.

Số đo này là ước tính về tổng thời gian CPU,nhưng không nhất thiết phải biểu thị thời gian CPU hoạt động. Ví dụ: trong các ứng dụng bị giới hạn bởi GPU, CPU có thể đợi GPU hoàn tất công việc trước khi gửi một khung hình mới. Điều này thường xảy ra khi sự kiện dequeueBuffer, eglSwapBuffer (đối với OpenGL) hoặc vkQueuePresent (đối với Vulkan) chiếm phần lớn thời gian CPU. Thời gian chờ được tính vào tổng thời gian CPU, nhưng không tính vào thời gian CPU hoạt động.

Ảnh chụp màn hình cho thấy một lượng lớn thời gian chờ trong các sự kiện dequeueBuffer và eglSwapBuffer.
Hình 3. Một lượng lớn CPU ở trạng thái rảnh trong các sự kiện dequeueBuffereglSwapBuffer.

Thời gian hoạt động của CPU

Thời gian hoạt động của CPU xác định thời điểm CPU đang chạy mã ứng dụng mà không ở trạng thái rảnh.

Để đo thời gian hoạt động của CPU, hãy xem các lát Đang chạy ngay phía trên các sự kiện CPU. Đếm tất cả các phần của dấu vết giữa hai sự kiện gửi khung hình ở trạng thái Đang chạy. Đảm bảo rằng bạn đưa cả các luồng đang hoạt động.

Ảnh chụp màn hình về 2 khoảng thời gian CPU có thể dùng để đo thời gian CPU hoạt động.
Hình 5. Hai khoảng thời gian CPU có thể dùng để đo thời gian CPU hoạt động.


Ảnh chụp màn hình của một ứng dụng đa luồng có các luồng hoạt động khác trong khi luồng chính ở trạng thái rảnh.
Hình 6. Một ứng dụng đa luồng có các luồng hoạt động khác trong khi luồng chính ở trạng thái rảnh.

Một cách khác để đo thời gian hoạt động của CPU là xem các lát ứng dụng trong các dấu vết CPU. Những lát cắt này cho biết thời điểm CPU đang chạy và tương ứng với các lát cắt Đang chạy.

Ảnh chụp màn hình cho thấy trạng thái đang chạy của một luồng được ghim khớp với bản ghi CPU.
Hình 7. Trạng thái đang chạy của luồng được ghim khớp với bản ghi CPU.

Để giúp xác định các lát ứng dụng, bạn có thể thêm điểm đánh dấu ATrace vào ứng dụng. Thao tác này sẽ hiển thị các điểm đánh dấu trong dấu vết CPU của Trình phân tích hệ thống.

Ảnh chụp màn hình về các lát ATrace xuất hiện trên một dấu vết CPU.
Hình 8. Các lát ATrace xuất hiện trên một thành phần CPU.

Ước tính thời gian kết xuất khung hình của GPU

Để ước tính thời gian khung hình GPU, bạn có thể sử dụng các lát GPU hoặc bộ đếm GPU trong Trình phân tích hệ thống. Số liệu ước tính sẽ chính xác hơn khi sử dụng các lát GPU.

Lát GPU

Nếu Trình phân tích tài nguyên hệ thống có thông tin về lát GPU, bạn có thể nhận được thông tin rất chính xác về thời gian kết xuất khung hình của GPU bằng cách đo tổng thời gian ứng dụng của bạn dành cho các tác vụ liên quan đến một khung hình.

Thiết bị Mali

Trên các thiết bị Mali, các lát GPU có mảnh, không phải mảnh và đôi khi có các bản ghi không phải mảnh bổ sung. Đối với các khung hình ít phức tạp, công việc của mảnh và công việc không phải của mảnh là tuần tự, vì vậy, bạn có thể phân biệt công việc của khung hình này với khung hình khác bằng cách tìm khoảng trống giữa công việc đang hoạt động của GPU.

Ngoài ra, nếu bạn quen với công việc đang được gửi đến GPU, thì việc xác định mẫu của các lượt kết xuất đã gửi sẽ cung cấp thông tin về thời điểm một khung hình bắt đầu và kết thúc.

Ảnh chụp màn hình về nhiều khung hình đang được thực thi theo trình tự.
Hình 9. Nhiều khung hình được thực thi theo trình tự.
Ảnh chụp màn hình cho thấy AGI được phóng to trên công việc của một khung hình riêng lẻ.
Hình 10. Phóng to công việc của một khung hình riêng lẻ.

Đối với những ứng dụng có quy trình GPU song song hoá nhiều hơn, bạn có thể nhận được thời gian kết xuất khung hình của GPU bằng cách tìm tất cả các khung hình có cùng submissionID trong ngăn Selection (Lựa chọn) cho từng lát cắt.

Đối với các ứng dụng dựa trên Vulkan, bạn có thể dùng nhiều lượt gửi để tạo một khung hình. Theo dõi mã nhận dạng của lượt gửi bằng cách sử dụng bản theo dõi Sự kiện Vulkan. Bản theo dõi này chứa một lát cắt cho mỗi lượt gửi. Việc chọn một lát cắt gửi sẽ làm nổi bật tất cả các lát cắt hoạt động của GPU tương ứng với lượt gửi đó.

Ảnh chụp màn hình của một khối lượng công việc GPU song song, trong đó công việc trên một khung hình có thể trùng lặp với một khung hình khác.
Hình 11. Một khối lượng công việc GPU song song, trong đó công việc trên một khung hình có thể trùng lặp với một khung hình khác.


Ảnh chụp màn hình cho thấy một số sự kiện Vulkan được chọn cho một khung hình.
Hình 12. Một số sự kiện Vulkan được chọn cho một khung hình.

Thiết bị Adreno

Trên các thiết bị Adreno, các lát GPU xuất hiện trong bản nhạc GPU Queue 0 và luôn được biểu thị tuần tự, vì vậy, bạn có thể xem tất cả các lát đại diện cho các lượt kết xuất của một khung hình và sử dụng chúng để đo thời gian khung hình của GPU.

Ảnh chụp màn hình về nhiều khung hình đang được thực thi theo trình tự.
Hình 13. Nhiều khung hình được thực thi theo trình tự.
Ảnh chụp màn hình cho thấy AGI được phóng to trên một khung hình có nhiều lượt kết xuất.
Hình 14. Phóng to một khung hình có nhiều lượt kết xuất.

Tương tự như trường hợp Mali được mô tả trước đó: nếu ứng dụng đang dùng Vulkan, thì bản theo dõi Vulkan Events (Sự kiện Vulkan) sẽ cung cấp thông tin về công việc đang được gửi để thực thi khung hình. Để làm nổi bật các lượt kết xuất, hãy nhấp vào các lát Sự kiện Vulkan được liên kết với khung hình.

Ảnh chụp màn hình của một ứng dụng dựa trên Vulkan, trong đó các sự kiện Vulkan của khung hình được chọn.
Hình 15. Một ứng dụng dựa trên Vulkan, trong đó các sự kiện Vulkan cho một khung hình được chọn.

Có một số trường hợp mà ranh giới khung hình GPU khó phân biệt hơn do ứng dụng bị ràng buộc nhiều với GPU. Trong những trường hợp này, nếu quen thuộc với công việc đang được gửi đến GPU, bạn có thể xác định mẫu mà các lượt kết xuất đang được thực thi và xác định ranh giới khung hình từ thông tin đó.

Ảnh chụp màn hình của một ứng dụng bị ràng buộc nhiều với GPU có mẫu truyền kết xuất giúp xác định ranh giới khung hình.
Hình 16. Một ứng dụng bị ràng buộc nhiều với GPU có mẫu truyền kết xuất giúp xác định ranh giới khung hình.

Bộ đếm GPU

Nếu thông tin về lát GPU không có trong dấu vết, bạn có thể ước tính thời gian kết xuất khung hình GPU bằng cách sử dụng các dấu vết bộ đếm GPU.

Thiết bị Mali

Trên các thiết bị Mali, bạn có thể sử dụng bản theo dõi mức sử dụng GPU để ước tính thời gian kết xuất khung hình GPU cho một ứng dụng không sử dụng nhiều GPU. Khi ứng dụng ít sử dụng GPU, chúng sẽ có các khoảng thời gian thường xuyên có hoạt động GPU cao và thấp, thay vì hoạt động cao liên tục. Để ước tính thời gian khung hình GPU bằng cách sử dụng bản theo dõi mức sử dụng GPU, hãy đo lường khoảng thời gian có hoạt động cao trong bản theo dõi.

Ảnh chụp màn hình về mức sử dụng GPU và các bản ghi Hàng đợi GPU trên một thiết bị Mali.
Hình 17. Mức sử dụng GPU và hàng đợi GPU trên thiết bị Mali.

Nếu ứng dụng sử dụng nhiều GPU hơn, thì mức sử dụng GPU có thể luôn ở mức rất cao. Trong trường hợp này, bạn có thể sử dụng các bản theo dõi mức sử dụng hàng đợi mảnhmức sử dụng hàng đợi không phải mảnh để theo dõi hoạt động của GPU và ước tính thời gian khung hình của GPU. Bằng cách tìm kiếm các mẫu trong các đoạn fragmentnon-fragment, bạn có thể ước tính sơ bộ vị trí của ranh giới khung hình và sử dụng thông tin đó để đo thời gian kết xuất khung hình GPU.

Ảnh chụp màn hình các bản nhạc có và không có phân đoạn.
Hình 18. Đoạnđoạn không phải là đoạn.

Thiết bị Adreno

Trên các thiết bị Adreno, nếu ứng dụng không sử dụng nhiều GPU, bạn có thể ước tính thời gian khung hình GPU theo cách tương tự như với thiết bị Mali trong phần trước.

Ảnh chụp màn hình về tỷ lệ phần trăm sử dụng GPU và các dấu vết Hàng đợi GPU trên thiết bị Adreno.
Hình 19. Tỷ lệ phần trăm sử dụng GPU và các dấu vết Hàng đợi GPU trên thiết bị Adreno.

Nếu ứng dụng sử dụng nhiều GPU hơn và có tỷ lệ sử dụng GPU cao ổn định, bạn có thể dùng các chỉ số Vertex Instructions/Second (Số chỉ dẫn đỉnh/giây) và Fragment Instructions/Second (Số chỉ dẫn mảnh/giây) để ước tính thời gian khung hình GPU. Bằng cách tìm kiếm các mẫu trong mức độ hoạt động của những dấu vết này, bạn có thể ước tính sơ bộ vị trí của ranh giới khung hình và sử dụng thông tin đó để đo thời gian kết xuất khung hình của GPU.

Ảnh chụp màn hình về Vertex Instructions/Second track (Hướng dẫn về đỉnh/Đường đua thứ hai).
Hình 20. Đường đua Vertex Instructions / Second (Hướng dẫn về đỉnh/giây)
.

Các bản ghi âm khác này có thể cung cấp thông tin tương tự:

  • Vertices Shaded / Second
  • Phân đoạn được tô bóng / giây
  • % Thời gian tô bóng đỉnh
  • % Thời gian đổ bóng các mảnh