본문으로 건너뛰기
PS5PCEM
부분그래픽

GPU 페이지 추적기

선택형 페이지 추적기는 16 KiB 게스트 페이지를 감시합니다. 첫 네이티브 CPU 저장이 폴트를 일으키면 세대를 올리고 GPU 사본을 무효화하므로, 바뀌지 않은 페이지를 매 프레임 해시하고 업로드하지 않습니다.

2026년 10월 10일까지의 저장소 노트

해결하려는 문제

게스트 메모리에 있는 렌더 타깃이나 정점 버퍼는 GPU에 전달되어야 합니다. 매 프레임 할당 전체를 업로드하는 것은 정확하지만 비쌉니다. 바뀌지 않았음을 알아내려고 할당 전체를 해시하는 것도 비쌉니다. 페이지 추적기는 그 대신 추적하는 쓰기 가능 페이지를 읽기 전용으로 표시하고, 첫 저장에서 CPU가 폴트를 일으키게 합니다.

폴트 핸들러는 페이지를 기록하고, 게스트의 실제 보호 속성을 복원한 뒤, 그 페이지의 세대를 올립니다. 나중의 드로가 세대를 비교합니다. 바뀌지 않은 페이지는 장치에 남고, 세대가 바뀐 페이지는 업로드됩니다. PS5_GPU_PAGE_TRACKER=1로 이 메커니즘을 켭니다. 이 변수나 실험 묶음을 설정하지 않으면 꺼져 있습니다.

폴트의 정체

이 폴트는 무효화이지 게스트 버그가 아닙니다. 페이지는 호스트가 쓰기를 관찰할 수 있도록 잠시 읽기 전용이었을 뿐입니다. 그 뒤 게스트 저장은 타이틀이 요청한 보호 속성 아래에서 완료됩니다. 추적하지 않는 페이지는 일반 업로드 경로를 그대로 씁니다.

같은 주소, 크기, 물리 오프셋, CPU 권한으로 다시 만든 다이렉트 메모리 매핑은 호스트 뷰를 유지합니다. 이 재사용 덕분에 세대가 프레임 사이에서 의미를 가집니다. 백킹이나 권한이 바뀌면 일반 교체 경로를 거치고, 추적기는 새 매핑을 관찰합니다.

하지 않는 일

추적기는 타이틀의 내부 해상도를 줄이지 않으며 셰이더를 컴파일하지도 않습니다. CPU가 저장하지 않은 페이지의 반복 전송만 없앱니다. 매 프레임 버퍼를 다시 쓰는 타이틀은 여전히 그 버퍼의 비용을 치릅니다.

글꼴 아틀라스 쓰기와 그 밖의 HLE 저장은 게스트 메모리를 수정하기 전에 감시를 무효화하므로, 펌웨어 쓰기가 GPU에 보이지 않는 일은 없습니다. 추적기는 아키텍처 개요에서 설명하는 실험적 GPU 설정 묶음의 일부입니다.

구현된 것

  • PS5_GPU_PAGE_TRACKER=1일 때 16 KiB 게스트 페이지별 세대.
  • 게스트 보호 속성을 복원하고 상주 사본을 무효화하는 첫 저장 폴트.
  • 세대가 프레임 사이에서 유지되도록 하는 동일한 다이렉트 메모리 뷰 재사용.
  • HLE가 직접 감시 중인 페이지에 쓸 때의 무효화.

아직 빠진 것

  • 추적기는 선택형입니다. 기본 호환성 경로는 추적기에 의존하지 않습니다.
  • CPU가 매 프레임 다시 쓰는 페이지는 여전히 업로드됩니다.
  • 압축 메타데이터 표면 안의 GPU 간 일관성은 다루지 않습니다.

관련 메커니즘

이 페이지들에 대하여

본문은 PS5PCEM 저장소의 아키텍처 노트와 2026년 10월 보고서를 따릅니다. 특정 테스트를 통과했다고 해서 새로운 프레임 속도나 새로운 완주를 뜻하지는 않습니다.

모든 기술