Hi, On 2020-04-10 13:09:13 +0530, Amit Khandekar wrote: > On my Intel Xeon machine with 8 cores, I tried to test PAUSE also > using a sample C program (attached spin.c). Here, many child processes > (much more than CPUs) wait in a tight loop for a shared variable to > become 0, while the parent process continuously increments a sequence > number for a fixed amount of time, after which, it sets the shared > variable to 0. The child's tight loop calls PAUSE in each iteration. > What I hoped was that because of PAUSE in children, the parent process > would get more share of the CPU, due to which, in a given time, the > sequence number will reach a higher value. Also, I expected the CPU > cycles spent by child processes to drop down, thanks to PAUSE. None of > these happened. There was no change.
> Possibly, this testcase is not right. Probably the process preemption > occurs only within the set of hyperthreads attached to a single core. > And in my testcase, the parent process is the only one who is ready to > run. Still, I have anyway attached the program (spin.c) for archival; > in case somebody with a YIELD-supporting ARM machine wants to use it > to test YIELD. PAUSE doesn't operate on the level of the CPU scheduler. So the OS won't just schedule another process - you won't see different CPU usage if you measure it purely as the time running. You should be able to see a difference if you measure with a profiler that shows you data from the CPUs performance monitoring unit. Greetings, Andres Freund