ProcessAffinityMask=85 is beond my reatch what i dere fidle aroud with.
It doesn't make much sense either.
"ProcessAffinityMask" sets which CPU cores IL-2 is gonna use.
It's a binary mask converted to a decimal value.
"85" equals "01010101" binary.
Reading that value right to left, it means that cores 1, 3, 5 and 7 will be used.
On a quad core CPU with hyperthreading (Intel i7 quad cores), this would mean that IL-2 would use 1 "virtual" half of each core.
That's probably what Hans-Joachim Marseille intended to achieve, for whatever reason, but let me tell you: It doesn't do a damn thing.
In such case, just leave "ProcessAffinityMask" unset, i.e. don't have it in conf.ini at all or put a ";" in front of the line to unset the value.
That way IL-2 will simply use all available cores, and that's technically the same thing in this case.
In reality, all but one thread in IL-2 are 99.9999% idle all the time anyway, and that single thread can jump around your CPUs cores or just stand still on one of them, it doesn't change much in terms of performance itself.
What
does affect the performance for real, is the collision between multiple CPU-hungry threads on the same CPU core.
Back in the days of Windows XP, the thread scheduler was pretty basic and most threads would preferably run on the 1st CPU core all the time.
In such case, it would make sense to
avoid running on that 1st core for IL-2, just to step out of the way of Windows' thread scheduler.
The relevant setting, depending on the number of CPU cores you have, would be:
Setting | Binary | Use case |
2 | 10 | Dual Core |
12 | 1100 | Dual Core + Hyperthreading |
14 | 1110 | Quad Core |
62 | 111110 | Hexacore |
252 | 11111100 | Quad Core + Hyperthreading |
254 | 11111110 | Octacore |
1022 | 1111111110 | Decacore |
4092 | 111111111100 | Hexacore + Hyperthreading |
65532 | 1111111111111100 | Octacore + Hyperthreading |
1048572 | 11111111111111111100 | Decacore+ Hyperthreading |
As you see, the key to success is to always leave the 1st physical core unoccupied, to give room for a poorly designed thread scheduler to use that core.
On "normal" CPUs this means you leave the least significant bit unset, on "Hyperthreading" CPUs you leave the two least significant bits unset as they reflect the two "Hyper" threads on CPU no.1.
Mike