Dreadful performance

There will always be a main thread, there has to be, you cant draw or push to screen on background threads, there always has to be one thread controlling and distributing other threads. Because of how threading works this also means sometimes the main thread has to wait for the other threads to finish their given task before spitting a frame out (depending on if the code they write is thread safe or not)

2 Likes

Who said it’s written from scratch? I think it’s heavily based on FSX. I read an interview with MS representative saying how easily Asobo integrated FSX engine on their side with a some new rendering pipeline. Even when I see FS config file it has the same structure as FSX.cfg file! I really think it’s mainly the good old FSX engine, maybe changed here and there to better suit modern hardware and add Azure data streaming. Even all these problems people report about CPU underutilization, unequal core utilization and still low fps are exactly the same as when FSX launched! My view is that Asobo will still be changing things and we can expect the game to run better on DX12 as DX12 will need a lot of rewrites, probably also in the core of the game to offload more tasks from CPU to GPU. On the other hand side there are examples that migration to DX12 didn’t improve performance dramatically. It depends on a game and its architecture.

1 Like

I do understand :smile:
It’s great to get your feedback and benchmark with a PC config like yours.

@NBKTHE1 The work that you actually need to do on the main thread is very low though, just some handling of some input commands (keyboard/mouse/controller). I’m not very familiar with the DirectX 11 API but I assume that it is capable of submitting commands on a different thread (as long as you don’t do so from multiple threads at the same time), hence the RenderThread in the FPS window.

Also, there is no need for a main thread to control the distribution of work to other threads. Even in a simple system you would have a queue from which the worker threads get their tasks (no main thread needed here). More advanced systems would use work stealing to improve data locality. For the couple of small tasks that need to run on the main thread you could have a separate work queue (main thread pulls from that queue; if it’s empty the main thread will pull a task from the general work queue).

@dgtal15654 You’re probably right. That also means that this sim/game will never get close to the performance we could have if they had written an engine from scratch with multi-threading and DX12 in mind.

The queue still needs to be have jobs scheduled in order to be performed, generally this is done on the main thread and off-loaded (at some point), these threads need to talk to the main one in order to work and be drawn (render thread being called from the main with queued draw calls).

But yes you are right, main thread has a run loop that deals with all events and interaction, this has to be on the main thread. Either way, i agree this can be improved, but obviously we know nothing of how this works internally in their code base so its all speculation and i’m sure its insanely complicated.

Maybe they did a Nintendo and forgot to stick the optimise GCC flag on when compiling :wink:

Thank you so much for that extremely informative analysis. I appreciate and admire your knowledge. I too have an i7 processor 6700K @ 4GHz. Every symptom you describe is precisely what I too am experiencing. So my question is: How do I enable HT as you suggested?

I also have performance collapses. As soon as you move/fly, there are massive FPS drops all the time. In between the FPS goes up to 40-45 repeatedly. The GPU is only 50-60% utilized. The CPU runs permanently at 100%. No cooling problems, latest drivers.

My system:
Intel i5 6600k (4.5Ghz),
Nvidia gtx 1080TI,
32GB Ram (3200 XMP),
SSDs only

Greetings
Martin

HT is enabled by default - its something you would of had to turn off manually. If you see in task manager (or some overlay in game) that you have 8 threads then its on, if you only see 4, then it off. Either way, you change this in the BIOS of your motherboard.

1 Like

Then something is off, either with the FPS counter or the VSYNC.

With VSYNC on the GPU HAS to wait for the signal from the monitor that it’s ready for the next frame. If the GPU isn’t producing frames at 60 FPS or higher, then the GPU must wait for the next signal from the monitor, this results in a halved frame rate. It’s how it work, there’s no changing that.

You either have a GSync monitor that’s helping with this, or the FPS readout is wrong, OR the Vsync in the game is adaptive (which it doesn’t say it is).

There has to be a main thread, this will then offload tasks to the worker thread, in theory. If you’re seeing a 100% usage in one thread and 20% in workers, then it’s bad programming. They need to spread the load and THAT could be the fix to all this.

I wouldn’t be surprised if it was something like that. I noticed the executable is much larger in the release version. Maybe they compiled it with some debugging options. On the other hand, the marketplace was added the release version , so maybe that explains the huge difference in size.

I would guess this is the problem, I’ll try it today. There definitely is a problem where it’s way too CPU heavy and not utilizing my video card or RAM at all. My CPU stays pegged at 95-100% even on the lowest settings, meanwhile my video card is sitting at 40%, less than 1GB of VRAM being utilized and only 9GB or standard RAM. It’s literally so light on my GPU that my fan doesn’t kick on. With a game like this my GPU should be maxed out as I only have an RX 5600XT. It’s definitely a load management issue.

I just see 4 cores. I got my system from JetLine systems and they overclocked the computer to get better performance from P3D. My understanding is that P3D ran better with hyperthreading turned off. It is safe to change this setting in the bios now? I’m not an expert. Thank you!

Exactly as in my case

1 Like

I just thought I’d share this video here, it’s a GPU performance benchmark with MSFS and it basically shows that we CANNOT max out this sim on current-gen hardware, so it’s good to manage our expectations a bit. This is good as it leaves plenty of headroom for next-gen hardware and the sim will continue to push the boundaries and will get continuously better as we get new hardware technologies.

2 Likes

It should be safe. it has nothing to do with overclocking. It’s a CPU feature

1 Like

@NBKTHE1 At the start of the frame you only have to ā€œscheduleā€ 1 job (push it to a queue/ring buffer). That is picked up by some worker thread and as part of the job it may queue up new jobs (which are again picked up by worker threads). The ā€œscheduleā€ of how the tasks are distributed across worker threads is not computed ahead of time. It’s basically emergent behavior of worker threads picking up tasks from the queue.

More on-topic: since the starting point (performance) is this bad, there must be a lot of low-hanging fruits when they start optimizing/parallelizing.

1 Like

Normally it should be safe. In theory HT can increase the temperature of the CPU a bit, but it’s unlikely it would cause stability issues. If it does, you might need to turn the overclocking down a notch or two.

1 Like

The Hardware Unboxed benchmark shows that the sim bottlenecks really hard on a couple of CPU cores, he even mentions it near the end of the video. New hardware (more threads / faster GPU) isn’t going to fix that issue.

1 Like

CPU’s can be overclocked too.