Huge load on the CPU not distributed appropriately

Ever since launch I’ve noticed that some cores on my CPU get most of the load while others stay really low on usage. Core 3 on my i7 10700k gets most of the load while the others stay on a low loads. The result is that core 3 always runs super hot during the loading screen while all other cores are nice and cool. This only happens to me during loading screen.

On mine it’s cores 1 and 5 doing most of the work but all 12 are doing something, all the time.

That’s pretty much how code works. There’s only so many processes you can work in parallel (and it’s not many). Flying is a pretty serial event, you can’t be calculating what’s going to be next because it hasn’t happened yet. There’s lots of googling you can do on multi-threading flight simulators.

2 Likes

One big single-threaded process is pretty much how flight simulators work. You want to get a computer that has great single-core performance.

1 Like

There is something wrong happening in the hangar as well. I get fan speeds comparable to what I get when I run powerMax. Everything is nice and quiet in-game.

1 Like

Yeah, I’ve heard other people say that as well. I haven’t noticed it myself, but others have said the same. I have no idea what’s causing that.

But, as far as the OP is concerned, nope the CPU load is distributed appropriately. The purpose of the other CPU’s is for other programs. Granted there are some applications that can use multi-threading more optimized, but flight sim isn’t one of them. It’s gotten better than it used to be, but you’ll NEVER see all cores used evenly.

I don’t think you know much about multithreading. First of all, we’re talking about CORES here, not CPUs. The main purpose of multithreading is certainly not to run other applications, but to increase performance within a single application. It is perfectly viable for a game, flight-sim or not, to use multiple threads. Sound, input, netcode, weather, instrument simulation. These are all candidates for multithreaded coding. Virtually all modern games use this. When I run MSFS 2020, ALL my 8 cores are utilized, which is what I would expect.

One core running “superhot” is not normal for a game, because in a game there is always a lot of waiting for each thread. Cores running superhot (i.e. 100% all the time) is what you would expect in a benchmarking tool.

4 Likes

Olaf, come back to me with your flight simulation programming credentials please.

I have studied topics related to this on a PhD level. What are your credentials?

The statement you made (“the purpose of the other CPU’s is for other programs”) was completely ridiculous.

4 Likes

I have a masters in Mechanical Engineering, and have been using flight simulators and building computers since 1987 (I was a junior in college at the time). I’m sorry I used language that annoyed you. Technically, however, cores are cpus and you know it. Just because they live on a single chip doesn’t make them any less of a central processing unit. Oh, look, if I look at the perfomance of my cores in task manager, it calls each of them CPU0 - CPU7… huh. interesting.

I’m not sure what topics you’re talking about that you’ve studied? Aerodynamics? Multi-threading? Massive Graphics processing? I asked about your flight simulation programming credentials. Have you done actual programming for a production code?

I was around listening to the developers discuss the development of FSX and the first attempts at multi-threading it. Basically, they got it to process on two cores of four available at the time. That was the best that they could split up the various threads. Granted, technology has improved a lot since 2009, but, MSFS is technically really only FSX with a new graphics engine and a couple other new technologies. Be that as it may, you’re right, I don’t know much, and it’s all second hand knowledge. Yes it’s got a vastly improved aerodynamic engine, but, as I understand it, it’s basically the same engine, but able splits the airplane up into several thousand surfaces instead I believe it was 6 in FSX. I forget.

Also, yes, audio could be processed on another core, but, then again, it’s probably not going to tax that core a lot, given what’s going on in the other cores, you probably won’t even see it. The aerodynamic equations, however, are likely to melt a core, and from what I understand, can’t be multi-threaded because it’s a serial calculation, so there’s no point. What about moving graphics data, can that be multi-threaded?

Where I do have experience is in FEA, and you do need to leave at least a core free for other processes (or programs as many people call them), or you’ll actually get slower processing times. And that’s if that’s the only thing you’re doing is running the computer to solve a complex problem.

But, yes, you’re right, I’ll say it again, I am definitely not an expert in this.

1 Like

Best thing I’ve ever done to give me a more stable system is to use the program called Lasso

I noticed that on my old i78700k processor I get around 5-10 fps more with hyper threading turned OFF

The 2nd thing I noticed that core 6 (or 5th on a scale of 0-5) is hammered hard; it was fluctuatibng between 90%-100%. The other cores were used around 60%

With Lasso I prevented every other process from using that core; Littlenavmap, Neofly, my broswer, logitec controller app and anything else I noticed was using even just the slightest cpu power whilst gaming

The result is now that 6th core is used 99-100% of the time; the other 5 look about the same BUT since the nothing other than FS2020 is using the 6th core my game runs smoother and I’ve gained around 10 fps

My i7 8700k with the 1080ti and 32gb of ram with game graph settings; both LOD’s at 200 and most settings on ULTRA at 1080p is giving me a pretty consistent 35-60 fps with the GA planes with it only dipping below 30fps around airports like JFK

I’d like to see ATC handled on a separate core cause that clearly glitches the game when a call out is made and I noticed that if I pop out anything like ATC onto my second monitor; that extra window costs me 5-10 fps so I’m not sure if thats a CPU load or a GPU load causing that loss

4 Likes

I’ve never bothered to look at my own computer before, so I just did a test. I have a 4790K with 16GB and a 2070Super on an old MSI Gaming 5 MB.

Of my 8 logical CPU’s, while flying, I have one running at 90% consistently, 2 running around 60% and the other 5 between 30 and 40%.

So we may be discussing semantics here. (And yes, I’m going to call them CPU’s from now on :wink: ).
To one person, that may be evenly spread, to another, that could be considered one CPU running really hot compared to the rest. The point is, one logical core is carrying a huge load compared to the others.

I also want to point out, I have xCon running, Task Manager, and at least 50 Firefox tabs going, and at least 100 other programs running, so who knows where all that processing is going…

It seems like…

The main thread would be running on a core, with the responsibility to distribute work to the others.

So when we see that message “limited by main thread”, it’s the one that is responsible for coordinating the work that’s happening on all the other cores/threads.

2 Likes

Yea I think that’s what is happening too! 1 core running flat out sending tasks off to the other cores which is why if that one core that running the main thread has to process something from another program the game glitches

@ FlyingsCool5650
I ran windows task manager and by sorting the processes based on CPU usage it was really easy to see what processes were popping up and using some CPU cycles whilst I was gaining; my browser refreshing for example caused my game to glitch and drop a frame or two

You can’t tell what core the processes re using so I just made a note of each process using cpu cycles and with lasso unticked the cpu affinity core been primarily used by fs2020 (the last core in my case)

lasso worked so good I’ve purchased it!

1 Like

Affinity is actually a good thing, as it avoids invalidating core L1 and L2 caches during a context switch. Those cache invalidates and loads actually waste CPU cycles, hence why in HPC-land coders spend an inordinate amount of time trying to maximise affinity.

MSFS 2020 is multi-threaded but it is not embarrassingly-parallel. It appears (to me anyway) that there is always one main thread doing more work than all the others. Moving that thread around on the cores causes L1/L2 cache invalidates so you’re actually harming performance (albeit at a very low level that is unlikely to translate to noticeable changes in FPS). That thread will burn X CPU cycles on whatever core it runs, you can’t speed it up by turning off affinity. All you do is see even core CPU usage but the total CPU it burns in any wall-clock interval is still X.

For HPC applications however, shaving even 0.1% off of run-time by maximising affinity can actually translate to many hours of CPU time being saved (and wall clock time as well). Which means researchers get their results sooner and your department saves a few $$$ of HPC compute cost.

Not a criticism, just an FYI :slight_smile:

1 Like

I should also add that avoiding pre-emption of that main thread is a good thing, hence why running MSFS 2020 at High priority can result in smoother graphics. That main thread then can’t be pre-empted by any Normal or Above Normal priority Windows background process and can sit on that core as long as it wants, doing whatever it does. Obviously, there is a limit to single-thread CPU performance and when you hit it you have nowhere left to go…other than overclocking or upgrading. This is Amdahl’s Law at work.

2 Likes

Turn off Hyperthreading

I posted the explanation below in another thread a while back to explain in the most layman terms how multitasking in a game works. Keep in mind games are a very linear process (if A then B) that don’t lend themselves well to multithreading like productivity workloads like video rendering. In that latter case, a set workload is divided up by how many CPUs / core / threads you have. There’s no logic dependency involved. 8 cores? Video is broken into 8 chunks and fed to all 8 threads that will process it independently in parallel. Pretty simple by comparison to a linear experience like a game.

MSFS has actually done a pretty good job so far of distributing workload across cores / threads when possible. THere’s likely room for improvement, but there’s only so much that can be done due to it being a linear experience. That doesn’t lend itself well to parallel processing. There’s a reason why had 4+ core CPUs for well over a decade now and just starting to see games that use more than 1 or 2 cores…

The basic explanation:

You can compare the CPU package to a team of people. There’s 1 person at the top (supervisor - main CPU / core / thread) who coordinates all the work for the team under him / her (rest of the treads). All work going in or out of the team MUST go through the supervisor.

Work comes into the supervisor, who coordinates and schedules the tasks and hands off the work to team members below for execution (other threads). The supervisor still has to coordinate all the work being assigned to the team, and then collect, reassemble, and deliver the work handed back by the team members.

In the end, the work coming out of the team can only be passed in and out as fast as the supervisor through which all the workload is funnelled. Having more team members under the supervisor helps alleviate some workload, but ultimately, the supervisor is still the bottleneck in the operation and will be the most heavily tasked while team members will have much lighter workloads.

6 Likes

I appreciate the explanations guys

I haven’t played with the priority settings because I afraid I might give MSFS2020 priority over some other process that should have priority and cause my system to crash!

I did some testing last night to further validate my results

  • My processor has 6 cores identified in lasso as cores 0,2,3,4,& 5
  • msfs2020 main thread is always using core 5
  • I noticed that core 4 also has a heavier load than the others.
  • the remaining 4 cores are only using around 30-50% of the core

Hence why in lasso set the affinity of the other programs I use to use cores 0,1,2,3 so that they do not interfere with the MSFS2020 threads been run on cores 4 & 5

Chrome/MS Edge browsers are a classic example where a page refresh causes MSFS2020 to micro stutter when they refresh a page. When refreshing these browsers use all 6 cores pretty evenly with ALL cores been used at 30-60% for around 1 second. This means they interrupt msfs2020 main thread on core 5. When I limit the browsers affinity to cores 0 to 3 a refresh interestingly still uses a little bit of cores 4 & 5 (about 2-, but the other cores are doing the heavy lifting. I can only assume they use some other processes as well that I haven’t limited.)

After testing Little Nav Map and neoFly I can see they also heavily use core 5 when refreshing their maps and now with lasso limiting them to 0-3 they use very little of core 5 but again interestingly they still use some of core 5.

So I’m pretty sure that since I’m CPU limited by the main thread; any interruptions to that main thread will cause MSFS2020 to stutter and loose some FPS. The other thing is that since using lasso I haven’t had MSFS2020 crash! But it’s only been a few days but I was getting a couple of CTD’s a week.

I also double checked hyperthreading and turning that on definitely makes the sim run slower for me!

3 Likes

You’re fine with priority as long as you don’t assign anything Real-Time priority. You’re likely to end up with a BSOD if you do that.

And it’s not a permanent setting. You have to do it every time you fire up the app, so it’s not like you’re making a permanent change.

2 Likes