February 15, 20224 yr Hi all, Apologies first, for another of these affinity mask questions but most of the other ones have been based on an intel cpu. I'm running a 5950x cpu and have smt on in the bios so I have 16 cores and 32 threads. I always test at UK2000 EGLL in the PMDG 747 with aig ai on, and use ai companion to limit the number of ai to 200 within a 20 mile limit I also use activesky on as well. Currently flying from 27R I get about 24fps and from 09L about 20fps but things are smooth I'm running a 2k monitor and have a 3090 ftw gpu. This is what P3d gave me when updating to the latest version and the fps are shown above with most of my graphic settings almost all to the right and I've not done anything in nvidia control panel regarding settings so that's at whatever it was installed with. [JobScheduler] P3DCoreAffinityMask=65535 MainThreadScheduler=0 RenderThreadScheduler=2 FrameWorkerThreadScheduler=4 AffinityMask=65535 Which looks like its disabling the logical threads. As having all the threads enabled should give me 4294967295 using ryzen master it tells me that core 4 and 13 are my best cores and the second best are 6 and 14 With the above job scheduler settings and using the performance tab of task manager I'm getting these figures Core 0 running 100% Core 1 running 40% Core 2 running 20% Core 3 running and spiking to 50% on both parts Core 5 running about 20% Core 9 running spiking to 100% briefly but on a regular basis All of the other cores are running between 0-10% I'm not very good at figuring out how to adjust these figures but I feel i may be able to get a bit more fps out of the machine I understand binary a bit Would changing the figures to 4294967295 in P3DCoreAffinityMask be benificial ie using ever core and thread or changing to AffinityMask=4294967292 which should take everything off Core 0. Also how would i make better use of my better Cores for the main,render,and frame worker schedulers, to make better use of my best cores Hopefully someone can offer some ideas to try especially if Rob Ainscough or Stevew read this Many thanks and apologies for another affinity post. Edited February 15, 20224 yr by mazelda Numbered cores wrong initially Pete Little
February 15, 20224 yr You could try this. Core 0 kept free, core 6, 8 & 13 for the 3 main theads with their HT threads off. [JobScheduler] AffinityMask=4294967295 P3DCoreAffinityMask=4160740860 MainThreadScheduler=6 RenderThreadScheduler=9 FrameWorkerThreadScheduler=22 See this link and have play. A bit of trial and error required to get the best out of the cpu. http://izn-flightsim.s3-website-us-east-1.amazonaws.com/affinity.html?cores=16&threads=32&affinity=4294967295&coreAffinity=4160740860&mainThread=6&renderThread=9&frameThread=22#presetAnchor You could also check Rob Ainscough’s YouTube video, but that did not work well for me on my 3900x, definitely better for me with many core running. Cheers Bully. Edited February 15, 20224 yr by djbully AMD Ryzen 5900X - Asus Crosshair VI Hero - G.Skill 32GB (2x16GB) 3000 C14 DDR4 @ 3600 14-14-15-14-28-42 AMD Red Devil Radeon 6900XT 2700/2112 1125mv - 3 x Iiyama G-Master GB2888UHSU 4k @ 11560x2160 Saitek X-55 Rhino - Track IR5 - Obutto Sim Cockpit + Triple Monitor Stand - Fancy some Techno? https://www.mixcloud.com/dj_bully/
February 15, 20224 yr Commercial Member // HT Enabled 16 core // 15,14,13,12,11,10,09,08,07,06,05,04,03,02,01,00=core number // 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11=AffinityMask = 4294967295 // 11,11,01,11,11,11,11,11,11,01,11,01,11,11,11,00=P3DCoreAffinityMask = 4160740860 // 00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00=MainThreadScheduler = 6 // 00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00=RenderThreadScheduler = 9 // 00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00=FrameWorkerThreadScheduler = 22 That's not too bad but the obvious mistake here is to use all ones in AffinityMask which allows processes launched by the sim to occupy the sister Logical Processors of the three main tasks on LPs 9, 13 and 27. Anything sharing those cores will reduce the performance so it is essential to keep those out of AffinityMask, easiest is to use the same value for AffinityMask as we do P3DCoreAffinityMask. If no processes are launched by the sim it doesn't matter but even so there is no logical reason to allow the opportunity of something running on a sister LP of a main task.. Avoiding core zero does not make any difference, it is a myth, but we still ensure that exe apps run alongside the sim are corralled onto cores away from those three main tasks with Process Lasso or simply run from a .BAT. Instead with this example I would go 4160740860, 4160740860, 6,9,22 because it is important to be sure to disallow other sim processes onto those sister LPs. For a simplified explanation: 4294967253,4294967253,0,1,2 is easier to grasp: // HT Enabled 16 core // 15,14,13,12,11,10,09,08,07,06,05,04,03,02,01,00=core number // 11,11,11,11,11,11,11,11,11,11,11,11,11,01,01,01=AffinityMask = 4294967253 // 11,11,11,11,11,11,11,11,11,11,11,11,11,01,01,01=P3DCoreAffinityMask = 4294967253 // 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01=MainThreadScheduler = 0 // 00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00=RenderThreadScheduler = 1 // 00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00=FrameWorkerThreadScheduler = 2 If we do want to avoid core zero then we can move the '01's up and why not allow background tasks onto core zero since they are not millisecond time critical: // HT Enabled 16 core // 15,14,13,12,11,10,09,08,07,06,05,04,03,02,01,00=core number // 11,11,11,11,11,11,11,11,11,11,11,11,01,01,01,11=AffinityMask = 4294967127 // 11,11,11,11,11,11,11,11,11,11,11,11,01,01,01,11=P3DCoreAffinityMask = 4294967127 // 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00=MainThreadScheduler = 2 // 00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00=RenderThreadScheduler = 3 // 00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00=FrameWorkerThreadScheduler = 4 Some systems might not need so many cores used for the background tasks so we can reduce the number by doing: // HT Enabled 16 core // 15,14,13,12,11,10,09,08,07,06,05,04,03,02,01,00=core number // 11,11,11,11,11,11,11,11,11,11,11,11,01,01,01,11=AffinityMask = 4294967127 // 00,00,00,00,11,11,11,11,11,11,11,11,01,01,01,11=P3DCoreAffinityMask = 16777047 // 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00=MainThreadScheduler = 2 // 00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00=RenderThreadScheduler = 3 // 00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00=FrameWorkerThreadScheduler = 4 This allows 12 cores for the sim tasks and there are 4 cores for processes launched by the sim and avoids allowing those onto the important cores and no possibility of time critical tasks sharing cores. I use 4294967253,4294967253,0,1,2 and have tested other combinations to no discernable difference. However the sheer number of background tasks operating might detract from the overall system bandwidth on some systems so reduce the core count. Start with 12 cores as above and in Task Manager LP graph view see how much the background tasks are using up and if they are hitting 100 % add more cores. Steve Waite: Engineer at codelegend.com
February 15, 20224 yr Commercial Member In the last two examples I missed a demonstrative 'one' showing the task location from the lines // 00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00=MainThreadScheduler = 2, shown in bold underline. Steve Waite: Engineer at codelegend.com
February 15, 20224 yr Commercial Member 4 hours ago, mazelda said: using ryzen master it tells me that core 4 and 13 are my best cores and the second best are 6 and 14 So if we use the Ryzen Master best cores 4, 13 and 14 we can write out the logical processor map: // HT Enabled 16 core // 15,14,13,12,11,10,09,08,07,06,05,04,03,02,01,00=core number // 11,01,01,11,11,11,11,11,11,11,11,01,11,11,11,11=AffinityMask = 3623878143 // 11,01,01,11,11,11,11,11,11,11,11,01,11,11,11,11=P3DCoreAffinityMask = 3623878143 // 00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00=MainThreadScheduler = 8 // 00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00=RenderThreadScheduler = 25 // 00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00=FrameWorkerThreadScheduler = 26 3623878143,3623878143,8,25,26 [JobScheduler] AffinityMask=3623878143 P3DCoreAffinityMask=3623878143 MainThreadScheduler=8 RenderThreadScheduler=25 FrameWorkerThreadScheduler=26 Testing this there is no activity on LPs 9, 27 and 29 which is correct. Works well. By the way, it is best to keep the order of the special tasks Main, Render and FrameWorker in that ABC order or odd results and even CTDs can happen. Steve Waite: Engineer at codelegend.com
February 15, 20224 yr Author Many thanks all, Especially you Steve ( i was hoping you might answer with some advice.) I will have a good read through all of this. Not sure I understand it all yet but will hopefully at some point. Do these suggestions take into account my best cores ref Ryzen master? That suggests that cores 4 and 13 are my best and the next best are 6 and 14 they are numbered 1-16 in Ryzen master so presumeably that in affinity mask terms would be 3 and 12 as the best cores and 5 and 13 the second best cores Thanks again Pete Little
February 15, 20224 yr Commercial Member 1 minute ago, mazelda said: That suggests that cores 4 and 13 are my best and the next best are 6 and 14 they are numbered 1-16 in Ryzen master so presumeably that in affinity mask terms would be 3 and 12 as the best cores and 5 and 13 the second best cores Ahh yes, the cores are counted from core 1 to 16 in Ryzen Master, but in P3D we count from zero and only count the ones in P3DCoreAffinityMask. In that case we can write out the LP map again using cores 4,13,14 and keeping our ABC order // HT Enabled 16 core // 16,15,14,13,12,11,10,09,08,07,06,05,04,03,02,01=core number in Ryzen Master // 11,11,01,01,11,11,11,11,11,11,11,11,01,11,11,11=AffinityMask = 4127195007 // 11,11,01,01,11,11,11,11,11,11,11,11,01,11,11,11=P3DCoreAffinityMask = 4127195007 // 00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00=MainThreadScheduler = 6 // 00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00=RenderThreadScheduler = 23 // 00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00=FrameWorkerThreadScheduler = 24 [JobScheduler] AffinityMask=4127195007 P3DCoreAffinityMask=4127195007 MainThreadScheduler=6 RenderThreadScheduler=23 FrameWorkerThreadScheduler=24 Steve Waite: Engineer at codelegend.com
February 15, 20224 yr Author thanks again quick question regarding the scheduler numbers if i understand it correctly I get mainscheduler as being 8 because all threads are showing a 1 renderscheduler is 25 because core 4 also has a 0 in it therefore in total there are 25 1's before core 13 and frameworker is 26 as core 13 also has a 0 in it. Pete Little
February 15, 20224 yr Commercial Member We only count the 'ones' in P3DCoreAffinityMask starting from zero on the right. So the first main task, MainThreadScheduler, is on the 6th 'one', and continue counting only the 'ones' gives 23 and 24. Steve Waite: Engineer at codelegend.com
February 15, 20224 yr Commercial Member [JobScheduler] AffinityMask=4127195007 P3DCoreAffinityMask=4127195007 MainThreadScheduler=6 RenderThreadScheduler=23 FrameWorkerThreadScheduler=24 Remember we only count the ones from right to left in P3DCoreAffinityMask starting from zero: 11,11,01,01,11,11,11,11,11,11,11,11,01,11,11,11=P3DCoreAffinityMask = 4127195007 In bold underline we count the ones to 6, 23, and 24 So I have been testing that: 4127195007,4127195007,6,23,24 and this shows that LPs 7,25,27 are inactive which is exactly what we want. Main is on LP6, render is on LP24 and Frame is on LP 26. Steve Waite: Engineer at codelegend.com
February 15, 20224 yr Commercial Member The reason to have no activity on the sister LP of the main task cores is this: Since a single core can only "do" 100% throughput, what does it mean when both LPs of that core show 100% in Task Manager graphs? Well, that means they are each only getting 50% of that possible throughput. That would not be any good for the MainThreadScheduler to only get 50% instead of 100%. If we have one LP at say 90% and the other at say 40% we can do the math: 100% (capacity) divide by 90 + 40 = 130 (total shown) which is 100 / 130=0.77. So we can say approximately, that the 90% LP is actually 90 x 0.77 = 69.2% and the 40% LP is actually 40 x 0.77 = 30.8% Steve Waite: Engineer at codelegend.com
Archived
This topic is now archived and is closed to further replies.