On 06/09/21(Mon) 17:30, Martin Pieuchot wrote: > [...] > 3) 2ytHD+make-j17+kqpoll_unlocked_arm64.svg > ===========================================
This should be: 3) 2ytHD+googlemap_arm64.svg ============================ > The intend of this test is to expose where the contention is for heavy > multi-threaded process workload. We didn't care much about idle time, > it is much more about low latency, how "smooth" can run desktop apps in > other words what happens in the kernel. > > - UVM fault unlocking is "good enough" for such workload and all the > contention is due to syscalls > > - If we look at time spent in kernel, 37% is spent spinning on the > KERNEL_LOCK() and 12% on the SCHED_LOCK(). So almost half of %sys > time is spinning. > > . futex(2) for FUTEX_WAIT exposes most of it. It spins on the > KERNEL_LOCK() because sleeping with PCATCH requires it, then it > spins on the SCHED_LOCK() to put itself on the sleep queue. > > . kevent(2), poll(2), and DRM ioctl(2) are responsible for a lot > of KERNEL_LOCK() contention in this workload > > . NET_LOCK() contention in poll(2) and kqueue(2) generate a lot of > sleeps which, together with a lot of futex(2) make the SCHED_LOCK() > contention bad.