Repository navigation
Silent Hill 2 (PPSA08710) #13786
Replies: 5 comments
|
The same traced launch has two slow regimes. Before the cutscene, present rate falls and stays near 2–3 FPS while DCC-key uploads dominate:
That sustained shape holds for several minutes: about 20–35 presents per 10 s, on the order of 17–33 GiB of During the cutscene the shape changes. Hand-overs go to 0 and So the cutscene cost is new images, and the earlier cost is images being uploaded again because their DCC keys changed, together with the clear-key hand-over. This run does not show whether those are the same surfaces each window. It is still not a |
|
Every one of them is The same surface comes back, not a stream of new ones. 755 distinct address+size pairs, 136 seen once, 309 seen 10 or more times, 83 seen 100 or more times. The busiest were So the 2–3 FPS regime is these images being cleared again each time the driver has just expanded their keys. |
|
The largest phase is Narrowing those barriers is the wrong patch for this stretch: the worker is full recording dispatches. The clear-key loop from the previous note still accounts for the GPU time. It does not account for the frame. |
|
The indirect capture time is the worker waiting on GPU writes. Over the same kind of window the capture profile moved by 57,936 captures, and by 332 words read one by one over a pending GPU write. Those 332 words waited 3.04 s, and the hook's GPU waits inside capture moved by 3.02 s. None of those words were served from a known value or read raw on evidence. 3.0 s of waiting is the whole indirect capture total (about 1000 µs times about 3000 dispatches). So the 3 FPS frame's dispatch time splits in two. Direct dispatches are a device call of about 280 µs, about 2.6 s per 10 s. Indirect dispatches miss the cache and block the worker for about a millisecond each while a few hundred argument words are still a GPU write, about 4.3 s per 10 s. This is the same wait #5694 describes, on this title's indirect dispatches. |
|
The 45 s to 65 s stretch, with no input, is now a performance report with a clean |
Uh oh!
There was an error while loading. Please reload this page.
Tested
--windows --registry --to-intel.origin/mainat556547da71, plus the two commits from open pull request fix(shader): load and store 16-bit data of converted packed images #11580 (e56b66d6af,094ad84333). Without those, the title aborts earlier onreads or writes a converted float image with 16-bit data, which is not implemented, which is already GTA V (PPSA04264) stops when the save loads: compute shader reads or writes a converted float image with 16-bit data #11425.Status
The title reaches the "press any button" screen, plays the loading movies, and plays a cutscene. On the cutscene the window stays at about 0.2 frames per second. One earlier launch died in the async loader before that cutscene. That stop did not happen on the launch that reached the cutscene.
Open items
FAsyncLoadingThread:mov eax, [rdx+rax*4]withrdxandraxboth 0No open issue or pull request mentioned either of these for this title when this was posted. #11580 is the earlier 16-bit image stop and is already open. #6099 and #6189 describe storage images being uploaded again every frame on other titles; this capture does not show whether these are the same surfaces.
A. Async loader reads a zero export blob
FATAL: unhandled exception 0xc0000005on threadFAsyncLoadingThread,ripapp.exe+0x2558512(guest VA0x2548512). The instruction ismov (%rdx,%rax,4), %eax.rdxis the pointer at object+0x188, and it is null.r13(0x3265360000) is the blob that pointer was built from, and the first 64 bytes of it are zero.r15isr13+0x2c.The function starts at guest VA
0x2548280and the string.\Runtime/CoreUObject/Private/Serialization/AsyncLoading2.cppis referenced inside it. The zero dword atr13+4makes the following parse treat the payload length as0 - 0x2c. The call that fills object+0x188then leaves a null pointer, and the next instruction indexes it.The same launch had already read the title's IoStore containers through APR, including
pakchunk2-ps5.ucasat offset0xe3dae60d0(about 57 GiB). A direct read of that offset returns container bytes (6e 43 6f 49 ...), so this stop is not a 32-bit file offset. The launch that reached the cutscene passed this point, so it is not every run.Bink: Mismatched number of tracks opened.is printed forcredits.bk2andloadingloop.bk2. The check compares a track count at offset0x38of the opened object with 7, 8, or 9, prints the string at guest VA0x686e22d, and continues. The movies and the later cutscene still play.B. Cutscene frame time
The cutscene launch had
APS5_TRACE_APR=1, so these numbers are not a clean performance capture. The storage-upload time below is GPU time, not the APR log.Over 10 s windows with 2 presents (about 0.2 FPS),
[present]reported GPU busy of about 4.1–5.5 s per present. One[gputime]window:A nearby
[storage]window: first-use uploads 1108 / 8565 MiB, and write-backs on storage-image creation 317 / 3947 MiB.[draws]in one window spent 1575 ms inreadTarget(about 1.0 million pages walked).A formal report needs a warm
APS5_TRACE_SECONDScapture withoutAPS5_TRACE_APR, andtools/trace_digest.pyon that trace. I have not made one yet.AI-assisted: yes
All reactions