On 2020/8/17 20:25, Marc Zyngier wrote: > On 2020-08-17 13:03, yezengruan wrote: >> On 2020/8/17 10:03, Sergey Senozhatsky wrote: >>> On (20/07/21 13:17), Sergey Senozhatsky wrote: >>>> Hello, >>>> >>>> RFC >>>> >>>> We noticed that in a number of cases when we wake_up_process() >>>> on arm64 guest we end up enqueuing that task on a preempted VCPU. The culprit >>>> appears to be the fact that arm64 guests are not aware of VCPU preemption >>>> as such, so when sched picks up an idle VCPU it always assumes that VCPU >>>> is available: >>>> >>>> wake_up_process() >>>> try_to_wake_up() >>>> select_task_rq_fair() >>>> available_idle_cpu() >>>> vcpu_is_preempted() // return false; >>>> >>>> Which is, obviously, not the case. >>>> >>>> This RFC patch set adds a simple vcpu_is_preempted() implementation so >>>> that scheduler can make better decisions when it search for the idle >>>> (v)CPU. >>> Hi, >>> >>> A gentle ping. >>> >>> -ss >>> _______________________________________________ >>> kvmarm mailing list >>> kvmarm@xxxxxxxxxxxxxxxxxxxxx >>> https://lists.cs.columbia.edu/mailman/listinfo/kvmarm >>> . >> >> Hi Sergey, >> >> I have a set of patches similar to yours. >> >> https://lore.kernel.org/lkml/20191226135833.1052-1-yezengruan@xxxxxxxxxx/ > > It really isn't the same thing at all. You are exposing PV spinlocks, > while Sergey exposes preemption to vcpus. The former is a massive, > and probably unnecessary superset of the later, which only impacts > the scheduler (it doesn't change the way locks are implemented). > > You really shouldn't conflate the two (which you have done in your > series). > > M. Hi Marc, Actually, both series support paravirtualization vcpu_is_preempted. My series regard this as PV lock, but only the vcpu_is_preempted interface of pv_lock_opt is implemented. Except wake_up_process(), the vcpu_is_preempted interface of the current kernel is used in the following scenarios: kernel/sched/core.c: <---- wake_up_process() -------------------- available_idle_cpu vcpu_is_preempted kernel/locking/rwsem.c: ----------------------- rwsem_optimistic_spin rwsem_spin_on_owner owner_on_cpu vcpu_is_preempted kernel/locking/mutex.c: ----------------------- mutex_optimistic_spin mutex_spin_on_owner vcpu_is_preempted kernel/locking/osq_lock.c: -------------------------- osq_lock vcpu_is_preempted Thanks, Zengruan _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm