Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp473639imm; Tue, 22 May 2018 23:39:33 -0700 (PDT) X-Google-Smtp-Source: AB8JxZrnrf6zFcI7pHpNaD2lQTNvos2eNXdNYnVmmw8l02VBXn7ZNHsEZ2vJYDW/TxY0obvqm8/g X-Received: by 2002:a17:902:bd84:: with SMTP id q4-v6mr1713798pls.254.1527057573594; Tue, 22 May 2018 23:39:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527057573; cv=none; d=google.com; s=arc-20160816; b=IJ01ROGy95X738znmArOAIZxhIApUCIF4rQfAg1cPWM6BLIrxpMCVNL8VArID507c6 DW00nA+gbSm6TTBK9YriD6kzm5QtYawuXV1ZLkmIbZ1dkKMcGo6BnAOMO6ixnqJ7NmyH NeebieUTUEkelwKkbU83JZK7DBC1s5GiEQ0veKY0sIhZnxtFMkAA1rMApUzlz51IrqBC ejWguhruFiYE3u1BAEZdbY/Iu4CFN7Ul3xrABYPMInaL39SjwtgIxCVtOdVHUJlaS45p tcXmkOUk8kYPYHLAHJvCuWLMbQzSlZim6OVLobAXAO9BZk8gGA4/nAbQJgM0maeTDTy5 pB7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=5nHKKHRpJ9MNjHzXNR6dj07vn+24t0SbW2NWfFNfQ8Y=; b=zTQIixZoSsCHzyT5o3A/ep+1qrt17tztc6RtmKqfJJsqF5U6k0N5cZPiijFG2GTdPA xnP0ktB5hI2pw4J7ivChqcX8RHIhnCkdCmLgf4K2JSaamGeuVTfP0CP220RWNa+VKNpb M6tMu7urupBy3Gf098t2HYk+he7i8RGlkC6c5+eiYYeBcgZnsbEmqryg42HiwwnWDCBy xjjuP6VqCTlNF8mHTp0QbxoOgKR76w3D+mHaWDHRaIzOUnKU3WH65sJYrqmDS19vyg5o tDYs8MuXA8wS+bJZ0B2i0QLmINJKQrPVZxVKjsO9To/rd8AZ+RI2U7N7PNUasA7PNIWN ZNcA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=UTbbii1Y; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x12-v6si14185354pgv.556.2018.05.22.23.39.18; Tue, 22 May 2018 23:39:33 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=UTbbii1Y; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754125AbeEWGii (ORCPT + 99 others); Wed, 23 May 2018 02:38:38 -0400 Received: from mail-pf0-f195.google.com ([209.85.192.195]:40862 "EHLO mail-pf0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754101AbeEWGid (ORCPT ); Wed, 23 May 2018 02:38:33 -0400 Received: by mail-pf0-f195.google.com with SMTP id f189-v6so9988702pfa.7 for ; Tue, 22 May 2018 23:38:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=5nHKKHRpJ9MNjHzXNR6dj07vn+24t0SbW2NWfFNfQ8Y=; b=UTbbii1YFM61s64018nd49E+3xjriAJbBUkWOJQCFEXNkoNqNV9U/1Zh/K6KncHg1l t5bh5CkWpWWqQfAMeGVfzL9V6jvWqkEGOqGs1wUMV7nRRZEL4FbCnULfeDpWrbRpcLCv fEXPGgo/e+dhNZxv1KQMsEclv1spSt2qCu2SObX14YdvES58d+v2M8DIfNYsSLBravIT 72CO79Cm4dznTm6XT1parVsRgPR7Mhf6xF2A1ta04Y6xz/ws4L3SHosPLYRIFsWYxlH8 wJCh+bSA3DdzGcP+DZFT/tHP2pNYwk+4OwKzQ5TnFM2W7Cg751uVg/DsYKmaY6Y85zLs 5jzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=5nHKKHRpJ9MNjHzXNR6dj07vn+24t0SbW2NWfFNfQ8Y=; b=jMij0j6nu0maEeS+CY4P9SfKDSrEawpN8FQ8/3gM4dGfHWa0pDXrRc5IU7znTHcETt HGCqLQ8/SBhGuXndmarC3T3pzGGtYBuSVKBTzBlZBhKxw2Z1oco3odjyN7xynCM1k8zQ Pm+Dk5GGvwz/PEAi3Gj/DndDtxGg7ri4S366jEm1yP2xvx+ta1rUWeIBaROwi6eTS1gm Tvw8ZxSOPE3oJczD92DsbhffbwpubVRALnQFPsTviYUIVrh8UqwxEOzAmpjim4UWCUSh j14os+jb73L/yPs2O2j1ZcMOmmB1v4vyyFuL4teszcAxSRnc/2KPbxPks0VRsRJz/hXh j07w== X-Gm-Message-State: ALKqPwex3P4+PdL7j9agF5Pm8rE3AxuyjvHzjLcMU+evNwHn5LQ1lxsg DCPrluXJLJculwHRjfj0E+eFX+KmQKE= X-Received: by 2002:a65:5946:: with SMTP id g6-v6mr1273976pgu.391.1527057512324; Tue, 22 May 2018 23:38:32 -0700 (PDT) Received: from joelaf.mtv.corp.google.com ([2620:0:1000:1600:3122:ea9c:d178:eb]) by smtp.gmail.com with ESMTPSA id m9-v6sm32121893pff.41.2018.05.22.23.38.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 22 May 2018 23:38:30 -0700 (PDT) From: Joel Fernandes X-Google-Original-From: Joel Fernandes To: linux-kernel@vger.kernel.org Cc: "Joel Fernandes (Google)" , Steven Rostedt , Peter Zilstra , Ingo Molnar , Boqun Feng , Paul McKenney , byungchul.park@lge.com, kernel-team@android.com, Josh Triplett , Lai Jiangshan , Mathieu Desnoyers Subject: [PATCH 1/4] rcu: Speed up calling of RCU tasks callbacks Date: Tue, 22 May 2018 23:38:12 -0700 Message-Id: <20180523063815.198302-2-joel@joelfernandes.org> X-Mailer: git-send-email 2.17.0.441.gb46fe60e1d-goog In-Reply-To: <20180523063815.198302-1-joel@joelfernandes.org> References: <20180523063815.198302-1-joel@joelfernandes.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: "Joel Fernandes (Google)" RCU tasks callbacks can take at least 1 second before the callbacks are executed. This happens even if the hold-out tasks enter their quiescent states quickly. I noticed this when I was testing trampoline callback execution. To test the trampoline freeing, I wrote a simple script: cd /sys/kernel/debug/tracing/ echo '__schedule_bug:traceon' > set_ftrace_filter; echo '!__schedule_bug:traceon' > set_ftrace_filter; In the background I had simple bash while loop: while [ 1 ]; do x=1; done & Total time of completion of above commands in seconds: With this patch: real 0m0.179s user 0m0.000s sys 0m0.054s Without this patch: real 0m1.098s user 0m0.000s sys 0m0.053s That's a greater than 6X speed up in performance. In order to accomplish this, I am waiting for HZ/10 time before entering the hold-out checking loop. The loop still preserves its checking of held tasks every 1 second as before, in case this first test doesn't succeed. Cc: Steven Rostedt Cc: Peter Zilstra Cc: Ingo Molnar Cc: Boqun Feng Cc: Paul McKenney Cc: byungchul.park@lge.com Cc: kernel-team@android.com Signed-off-by: Joel Fernandes (Google) --- kernel/rcu/update.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c index 5783bdf86e5a..a28698e44b08 100644 --- a/kernel/rcu/update.c +++ b/kernel/rcu/update.c @@ -743,6 +743,12 @@ static int __noreturn rcu_tasks_kthread(void *arg) */ synchronize_srcu(&tasks_rcu_exit_srcu); + /* + * Wait a little bit incase held tasks are released + * during their next timer ticks. + */ + schedule_timeout_interruptible(HZ/10); + /* * Each pass through the following loop scans the list * of holdout tasks, removing any that are no longer @@ -755,7 +761,6 @@ static int __noreturn rcu_tasks_kthread(void *arg) int rtst; struct task_struct *t1; - schedule_timeout_interruptible(HZ); rtst = READ_ONCE(rcu_task_stall_timeout); needreport = rtst > 0 && time_after(jiffies, lastreport + rtst); @@ -768,6 +773,11 @@ static int __noreturn rcu_tasks_kthread(void *arg) check_holdout_task(t, needreport, &firstreport); cond_resched(); } + + if (list_empty(&rcu_tasks_holdouts)) + break; + + schedule_timeout_interruptible(HZ); } /* -- 2.17.0.441.gb46fe60e1d-goog