The Game That Needs Fewer Cores

I wanted to play Ghost Recon Wildlands on my gaming laptop, an ASUS G16 with an Intel Core Ultra 9 185H in it, which is a hybrid chip with performance cores, efficiency cores, and a couple of low power efficiency cores on top of that, 22 threads visible to Windows in total. The game hung on the launcher screen and would not move past it, there was no error, it was just stuck.

I was away from the laptop at the time, so Atlas did the first pass remotely over SSH. The Ubisoft Connect install turned out to have core files missing, the launcher log was full of the same error over and over, and the process was running with no window at all. A silent reinstall of Connect fixed that part. It was a real bug, it just was not the one that mattered, because the game still would not load once Connect worked again.

Pinning the game to the performance cores

Going in, the belief was that the game needed the efficiency cores turned off to run at all. That is a reasonable thing to believe about a hybrid chip, so the first real fix we tried was pinning the game to only the performance cores. A plain affinity change from Task Manager or from an elevated PowerShell window does not stick, because the game resets its own affinity a few seconds after launch and blocks anything external trying to change it. So we built a small launcher of our own that starts the game inside a Windows job object with a CPU affinity limit set on the job itself, which means the limit is enforced by the kernel and the game cannot widen it back out no matter what it tries.

It did not help, the game still hung on the same screen.

Changing how many cores Windows can see

With all 22 threads visible to Windows, and the kernel enforced pin holding for the whole run, never once letting the game touch an efficiency core, the game's anti-tamper thread parked itself at around 485 MB of memory and stayed there doing nothing, zero CPU, zero disk, forever. Drop Windows down to 12 visible CPUs and the game loads. Let it see 14, which is the 12 performance cores plus the two low power efficiency cores, and it loads too. Give it all 22 and pin it to the performance cores and it hangs every time.

So this was never about which cores the game is allowed to run on once it starts. It looks at what cores exist before it ever asks the scheduler for time on any of them, and an affinity pin has no effect on that step, because the cores are still there for it to see, they are just off limits. The efficiency cores have to be invisible to Windows, not just out of reach of the game.

Flipping it by hand

The only two things that actually make cores disappear from Windows are a BIOS toggle and a boot setting that caps the processor count, and both need a reboot in each direction, so neither one is something you flip mid session. We looked at doing this in software instead, reading and writing the chip's core enable setting through the vendor's own management interface on the laptop, and the read works fine but the firmware on this particular G16 rejects the write, so there is no remote path to that switch either. I decided to keep all 22 threads available for everything else I do on the laptop and flip the BIOS toggle by hand when I want to play this one game. Ubisoft has said in public that they are aware of the hybrid CPU boot issue and are looking into it, so this may not be permanent.

There is one more thing. Even on a successful load, the game still takes about 6 minutes to get from the splash screen to the menu, and for that whole stretch it is one single thread, with a start address that does not resolve to anything, grinding through what looks like a roughly 400 MB block of the game's own executable. Disk is basically idle the whole time and there is no network traffic at all, so it is working through that file in memory, one thread at a time. More cores do not speed any of it up, which fits, since it is only using one. The same game on an AMD laptop, where every core is the same kind, loads in a fraction of that time. I do not know which anti-tamper system is behind that thread, and I am not going to guess, since it is not something Ubisoft has said publicly.

For now Wildlands is a BIOS toggle game on this laptop instead of a click and play one. I keep the laptop at full threads for everything else and switch it by hand for this one title, and hopefully Ubisoft's fix lands before that stops being worth doing.