Received: by 2002:a05:6a10:6744:0:0:0:0 with SMTP id w4csp536315pxu; Wed, 7 Oct 2020 09:19:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzAXd/SDpC0EPpHFBqnnshf0dRECRjJbT/rUVWRb/5B8qKOPN10SaWtLunSmw+F0RLeDrgy X-Received: by 2002:a05:6402:1684:: with SMTP id a4mr4326126edv.79.1602087555920; Wed, 07 Oct 2020 09:19:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1602087555; cv=none; d=google.com; s=arc-20160816; b=GwuCdfHyRgYT7q6o6z9mFK8t/sOPCWe12fwvnZLpRexkUs62xGjyI113P1WPawmPfe ErA6yoPpuBa6CFUNZxHN+L4sbH/QG+SudIR/OFZu/rJuXKbz3KjYUVfg7ItIt+72O3Qe os3OGqZRuUh5FF84gtXXn9J+lbm3ip3wNWQrfF5CsG7bY2tT29q84zJY/+Zr5XZv4PHA 2VEwhAUaEUaTOX6heF95YnJ9OMtmsOa6HXDK8JQJQtrI7kRWesZfOSBXf46K1FV5nQYt CASp2jK+13XRSBkSToYjn/+HgieAAs1P39eX/5yr++VsT9GrrDz/oaAIdZ3sv9pPEQC9 tGKQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:thread-index:thread-topic :content-transfer-encoding:mime-version:subject:references :in-reply-to:message-id:cc:to:from:date:dkim-signature:dkim-filter; bh=oYcLhml/Vu2rcwrC6cdk1vAf2bRtvBVVdTcbv2NC41o=; b=kUWFJ17nK35717u4Tg5SiYKCPICLfwJIXZ8ro8tCOhXiSGKh/pc16698HQm+4648Q0 6MDf0lj9CzM6IYuQvoL+U3XtEiT1AR8n/3K/ajrCi84T92PmAGOpFnnWMb3tRhbYlf66 3ul2PMepAF4sOl5WBMWE+Up24hOp3E7uo/XnBw/2vdlwo3UVWTfAD3NOdtUPH7UTj186 t+knEyZVTTuDvjZNNB0DsfqcDUF99zMfGpHu7EpI4NzoEbRnyeN1HXiy52B18nqX/aCU aKj19hirlJr1gQPFwHDBB5DGLYE1xPrUqfgIBTxT4eUNz1bQgisSlKYzrntf2p+WQSrp iqkQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@efficios.com header.s=default header.b=FrUcX1py; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=efficios.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b25si1646580edw.586.2020.10.07.09.18.52; Wed, 07 Oct 2020 09:19:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@efficios.com header.s=default header.b=FrUcX1py; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=efficios.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727593AbgJGPjd (ORCPT + 99 others); Wed, 7 Oct 2020 11:39:33 -0400 Received: from mail.efficios.com ([167.114.26.124]:41192 "EHLO mail.efficios.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726504AbgJGPjc (ORCPT ); Wed, 7 Oct 2020 11:39:32 -0400 Received: from localhost (localhost [127.0.0.1]) by mail.efficios.com (Postfix) with ESMTP id 3B8D92B8486; Wed, 7 Oct 2020 11:39:31 -0400 (EDT) Received: from mail.efficios.com ([127.0.0.1]) by localhost (mail03.efficios.com [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id y8aq3lC37-5w; Wed, 7 Oct 2020 11:39:30 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by mail.efficios.com (Postfix) with ESMTP id B5F322B8485; Wed, 7 Oct 2020 11:39:30 -0400 (EDT) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.efficios.com B5F322B8485 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=efficios.com; s=default; t=1602085170; bh=oYcLhml/Vu2rcwrC6cdk1vAf2bRtvBVVdTcbv2NC41o=; h=Date:From:To:Message-ID:MIME-Version; b=FrUcX1pyjwFje9H5PFWxcPg2MH02X2Ni8/NTW9EmPjHe20lkAfCoNMvmS8k5wq+KS WsEjkhWB6ifyNp2x9/h/14pOtogbRR3jf7P+/wNa2400Ftmyw6NNqB2IOlTgHCjGKD 3sifN7K8SNOe/bECuqt0WQkZNXO8wkNqK2GIQhpu8JqHNGJYIQx4EPk8eMfjMqARau dMsxQfw1PLNN/ELRATU9h9d+QZ/uCckRPFaHYRpswCLlOwq+9U5pS75gna1r7LbLJb L/We+Tx9pJ+Hh/DPweN8oTtwE1H3nx0+pDb4yn9ZqwpZrdtUZjPnNZyq3B7bt3IeKH RIadKsqTBhexw== X-Virus-Scanned: amavisd-new at efficios.com Received: from mail.efficios.com ([127.0.0.1]) by localhost (mail03.efficios.com [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id 7ca02b-VvgA6; Wed, 7 Oct 2020 11:39:30 -0400 (EDT) Received: from mail03.efficios.com (mail03.efficios.com [167.114.26.124]) by mail.efficios.com (Postfix) with ESMTP id A7F702B8226; Wed, 7 Oct 2020 11:39:30 -0400 (EDT) Date: Wed, 7 Oct 2020 11:39:30 -0400 (EDT) From: Mathieu Desnoyers To: Peter Zijlstra Cc: Boqun Feng , linux-kernel , Will Deacon , paulmck , Nicholas Piggin , Andy Lutomirski , Andrew Morton Message-ID: <1286784649.11153.1602085170586.JavaMail.zimbra@efficios.com> In-Reply-To: <20201007150704.GH2628@hirez.programming.kicks-ass.net> References: <20200924172508.8724-1-mathieu.desnoyers@efficios.com> <20200924172508.8724-3-mathieu.desnoyers@efficios.com> <20201007150704.GH2628@hirez.programming.kicks-ass.net> Subject: Re: [RFC PATCH 2/3] sched: membarrier: cover kthread_use_mm (v3) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [167.114.26.124] X-Mailer: Zimbra 8.8.15_GA_3968 (ZimbraWebClient - FF81 (Linux)/8.8.15_GA_3968) Thread-Topic: sched: membarrier: cover kthread_use_mm (v3) Thread-Index: X4rtGzTiC/gdtRcWrfxY5lcPzEj2Wg== Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org ----- On Oct 7, 2020, at 11:07 AM, Peter Zijlstra peterz@infradead.org wrote: > On Thu, Sep 24, 2020 at 01:25:07PM -0400, Mathieu Desnoyers wrote: > >> diff --git a/kernel/sched/core.c b/kernel/sched/core.c >> index 2d95dc3f4644..bab6f4f2809f 100644 >> --- a/kernel/sched/core.c >> +++ b/kernel/sched/core.c >> @@ -3736,6 +3736,8 @@ context_switch(struct rq *rq, struct task_struct *prev, >> */ >> arch_start_context_switch(prev); >> >> + membarrier_switch_mm(rq, prev->mm, next->mm); >> + >> /* >> * kernel -> kernel lazy + transfer active >> * user -> kernel lazy + mmgrab() active >> @@ -3752,7 +3754,6 @@ context_switch(struct rq *rq, struct task_struct *prev, >> else >> prev->active_mm = NULL; >> } else { // to user >> - membarrier_switch_mm(rq, prev->active_mm, next->mm); >> /* >> * sys_membarrier() requires an smp_mb() between setting >> * rq->curr / membarrier_switch_mm() and returning to userspace. > > I was thinking... do we need the above, when: > >> diff --git a/kernel/sched/membarrier.c b/kernel/sched/membarrier.c >> index 8bc8b8a888b7..e5246580201b 100644 >> --- a/kernel/sched/membarrier.c >> +++ b/kernel/sched/membarrier.c >> @@ -112,13 +112,9 @@ static int membarrier_global_expedited(void) >> MEMBARRIER_STATE_GLOBAL_EXPEDITED)) >> continue; >> >> - /* >> - * Skip the CPU if it runs a kernel thread. The scheduler >> - * leaves the prior task mm in place as an optimization when >> - * scheduling a kthread. >> - */ >> + /* Skip the CPU if it runs the idle thread. */ >> p = rcu_dereference(cpu_rq(cpu)->curr); >> - if (p->flags & PF_KTHREAD) > > We retain this in the form: > > if ((p->flags & PF_KTHREAD) && !p-mm) > continue; > >> + if (is_idle_task(p)) >> continue; >> >> __cpumask_set_cpu(cpu, tmpmask); > > Specifically, we only care about kthreads when they're between > kthread_use_mm() / kthread_unuse_mm(), and in that case they will have > updated state already. > > It's too late in the day to be sure about the memory ordering though; > but if we see !->mm, they'll do/have-done switch_mm() which implies > sufficient barriers(). > > Hmm? Interesting. There are two things we want to ensure here: 1) That we issue an IPI or have the kthread issue the proper barriers when a kthread is using/unusing a mm, 2) That we don't issue an IPI to kthreads with NULL mm, so we don't disturb them. Moving the membarrier_switch_mm to cover kthread cases was to ensure (2), but if we add a p->mm NULL check in the global expedited iteration, I think we would be OK leaving the stale runqueue's membarrier state while in lazy tlb state. As far as (1) is concerned, I think your idea would work, because as you say we will have the proper barriers in kthread use/unuse mm. I just wonder whether having this stale membarrier state for lazy tlb is warranted performance-wise, as it adds complexity: the rq membarrier state will therefore not be relevant when we are in lazy tlb mode. Thoughts ? Thanks, Mathieu -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com