(This is a translation of a [Japanese [Content removed] by Kawamoto Yuuichirou.)
I am developing a Pixel Streaming application using Unreal Engine in an Azure environment. A similar application is running in an OCI environment, and I am currently trying to migrate it to Azure. The trouble is, however, that in the Azure environment, Unreal Engine takes more than twice as long to start up, compared to OCI. So I’d appreciate it if you could tell me how I can improve this.
(Startup time: approx. 1 minute 30 seconds on OCI, approx. 3 minutes on Azure)
On the hardware side, both Azure and OCI are equivalent in terms of hardware specs. On the infrastructure side, the infrastructure vendor is currently investigating if there are any issues. So, if you have any application-level insights or suggestions, it would be helpful to share them with me.
Initially, Pixel Streaming had very low fps in the Azure environment. This was improved by adding -RenderOffscreen and -ForceRes parameters to the Unreal Engine startup options. (OCI did not require these parameters and worked fine without them.)
Are there any similar settings or parameters that can improve the startup speed in the Azure environment?
Is the startup time consistent if you start the application multiple times in a row? We suspect that the problem might be related to the caching of the data in the VM environment. In this case, the first time would take longer and subsequent launches would be faster.
It would be interesting to get Insights traces for the startup in both environments. We might be able to understand the difference between them by comparing the traces.
Launch the the project by adding the following arguments: -trace=default -tracefile
Wait for the initialization to be completed
Quit the editor
This will generate a utrace file under <Project>\Saved\Profiling
The problem appears to be at the disk level as I suspected. Either the hardware or maybe there is a virus scanner that slows things down. I’m seeing a 2x difference in time spent loading the engine and plugin DLLs (12s on OCI vs 24s on Azure for the Windows_Loadlibrary event). There are other event that do depend on reading data which are longer on the Azure side.
Another thing that I could see in the Azure side is some get from the DDC cache for textures. This should normally end cached in the local DDC and be sourced locally and faster on the next run.
The OCI session could actually start faster. I see that it is connection to a Perforce server and this is taking 21 seconds. The Azure session seems to connect much faster unless there is an immediate failure.