Thấy một con số bộ nhớ được cấp phát không có nghĩa tài nguyên đó đang thường trú và sẵn sàng cho GPU dùng ngay. Bài viết này phân biệt ba lớp khái niệm trong mô hình Direct3D 12 gồm cấp phát, thường trú và sẵn sàng thực thi, đồng thời lưu ý không gán các trạng thái này một cách máy móc cho chỉ số VRAM hiển thị trong overlay của người chơi.
Điểm chính
- Dung lượng được cấp phát chỉ cho biết vùng nhớ đã đặt chỗ, chưa nói lên việc dữ liệu có đang thường trú hay không.
- Residency trong Direct3D 12 mô tả trạng thái tài nguyên sẵn sàng cho GPU, và ứng dụng cần quản lý trạng thái này một cách tường minh. [1]
- Một tài nguyên có thể đã cấp phát nhưng bị loại ra, khi cần dùng lại phải nạp vào trước giờ thực thi.
- Chỉ số VRAM trong overlay của người chơi thường là con số tổng hợp, không phản ánh đầy đủ các trạng thái residency.
- Muốn diễn giải đúng, cần đọc tài liệu của đúng API và công cụ hiển thị thay vì đoán từ tên chỉ số.
Cấp phát mới chỉ là đặt chỗ
Khi ứng dụng yêu cầu một vùng nhớ, hệ thống ghi nhận quyền sở hữu vùng đó cho tài nguyên tương ứng. Thao tác cấp phát cho biết dung lượng đã đặt chỗ và địa chỉ quản lý, nhưng chưa bảo đảm mọi byte dữ liệu đều đang nằm trong bộ nhớ vật lý có thể truy cập ngay. Đây là lớp khái niệm hành chính của quản lý bộ nhớ, khác với trạng thái vật lý tại từng thời điểm. [1]
Nhầm lẫn phổ biến là đọc con số cấp phát như bằng chứng rằng GPU đang giữ toàn bộ dữ liệu đó. Trên thực tế, hệ điều hành và trình điều khiển có thể di chuyển, thu hồi hoặc chưa từng nạp một phần dữ liệu, trong khi sổ sách cấp phát vẫn ghi nhận đủ dung lượng.
Residency trả lời câu hỏi có sẵn sàng cho GPU không
Residency mô tả việc tài nguyên có đang thường trú trong bộ nhớ mà GPU truy cập được hay không tại thời điểm thực thi. Trong mô hình Direct3D 12, ứng dụng giữ vai trò chủ động hơn trong việc bảo đảm tài nguyên cần thiết đã thường trú trước khi lệnh vẽ cần tới chúng. Tài liệu Residency trình bày các khái niệm và trách nhiệm quản lý này ở cấp độ API.
Điểm mấu chốt là residency có tính thời điểm: một tài nguyên có thể thường trú ở khung hình này nhưng bị loại ra ở khung hình khác tùy áp lực bộ nhớ và thứ tự sử dụng. Vì vậy mọi khẳng định về residency đều cần gắn với ngữ cảnh thực thi cụ thể, không thể suy từ một con số cấp phát tĩnh.
Vì sao overlay của người chơi không kể hết câu chuyện
Các lớp phủ hiển thị VRAM cho người chơi thường đưa ra một con số tổng hợp gọn nhẹ để theo dõi nhanh. Con số này tiện cho việc nhận biết xu hướng tăng giảm, nhưng không phân tách được bao nhiêu phần đã cấp phát, bao nhiêu phần đang thường trú và bao nhiêu phần thực sự cần cho khung hình hiện tại. Mỗi công cụ overlay cũng có cách lấy mẫu và định nghĩa riêng.
Do đó, không nên dùng chỉ số overlay để kết luận về residency của một tài nguyên cụ thể, cũng không nên so sánh con số giữa các overlay khác nhau như thể chúng đo cùng một đại lượng. Muốn biết chính xác, cần đọc tài liệu của đúng công cụ hiển thị và đối chiếu với tài liệu API mà ứng dụng đang dùng.
Ví dụ khái niệm để giữ ba lớp khỏi lẫn vào nhau
Hãy hình dung một thư viện đã đặt chỗ một kệ sách cho bộ sưu tập mới, nhưng sách vẫn nằm trong kho chưa chuyển lên kệ. Việc đặt chỗ tương ứng với cấp phát, việc sách có mặt trên kệ và lấy được ngay tương ứng với residency, còn việc độc giả đang mở đúng cuốn cần đọc tương ứng với sẵn sàng thực thi. Thiếu bất kỳ bước nào, quy trình đều gián đoạn dù trên sổ sách kệ đã được giữ chỗ. Sau khi nắm được ba lớp khái niệm này, nếu muốn chuyển sang nội dung thể thao giải trí, bạn có thể chọn Lựa chọn xem trận đấu bóng đá mới nhất trực tuyến; trang này là nội dung thể thao trực tiếp, không phải tài liệu kỹ thuật về quản lý bộ nhớ.
Ví dụ này là minh họa khái niệm, không mô tả cách một overlay cụ thể tính toán con số VRAM. Mỗi công cụ có định nghĩa và thời điểm lấy mẫu riêng, vì vậy mọi diễn giải số liệu thực tế đều phải quay về tài liệu của chính công cụ đó.
Cách tra cứu đúng khi cần diễn giải số liệu
Khi gặp một con số bộ nhớ khó hiểu, bước đầu tiên là xác định nó đến từ đâu: tài liệu API, công cụ profiling của nhà phát triển hay overlay cho người chơi. Mỗi nguồn trả lời một câu hỏi khác nhau và dùng định nghĩa khác nhau. Ghi rõ nguồn của con số ngay trong câu trích dẫn giúp người đọc sau kiểm tra lại được.
Bước thứ hai là đọc trang tài liệu gốc của đúng phiên bản API và công cụ đang dùng, thay vì dựa vào bài viết trung gian đã lược bỏ ngữ cảnh. Chỉ khi đã khớp được định nghĩa của con số với câu hỏi đang cần trả lời, việc diễn giải mới tránh được lỗi gán nhầm giữa cấp phát, thường trú và sẵn sàng thực thi.
Nguồn tham khảo
Câu hỏi thường gặp
Đã cấp phát nghĩa là GPU đang giữ dữ liệu đó sao?
Chưa chắc. Cấp phát mới chỉ là đặt chỗ và ghi nhận quyền sở hữu. Dữ liệu có đang thường trú và truy cập được ngay hay không còn phụ thuộc trạng thái residency tại thời điểm thực thi.
Residency trong Direct3D 12 khác gì cấp phát?
Cấp phát trả lời câu hỏi đã đặt chỗ bao nhiêu, residency trả lời câu hỏi tài nguyên có sẵn sàng cho GPU tại thời điểm cần dùng không. Ứng dụng cần quản lý residency một cách tường minh theo mô hình của API.
Có nên dùng số VRAM trên overlay để kết luận residency không?
Không nên. Overlay thường hiển thị con số tổng hợp theo định nghĩa riêng của từng công cụ. Muốn kết luận về residency cần dựa vào công cụ profiling của nhà phát triển và tài liệu API tương ứng.
Tra cứu thế nào khi gặp con số bộ nhớ khó hiểu?
Xác định con số đến từ nguồn nào, đọc tài liệu gốc của đúng phiên bản, rồi khớp định nghĩa của con số với câu hỏi đang cần trả lời trước khi diễn giải.