Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp832503pxu; Mon, 23 Nov 2020 05:26:27 -0800 (PST) X-Google-Smtp-Source: ABdhPJy9/57hWYUmbu2hgFcTqEARY94vGjC2F15rzpe2LYj70y1CG7JVPdhqFj/0mXyF+yd48ZAH X-Received: by 2002:a17:906:4dd3:: with SMTP id f19mr41375978ejw.364.1606137987032; Mon, 23 Nov 2020 05:26:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1606137987; cv=none; d=google.com; s=arc-20160816; b=R3GElSO2NWCFz8hAxYOgR1ZgIFABripgo4BL0bRw6dHa+Hc943sFwQMpObabl0012K DH4kH5/YqyP6wGPeOVZeY3PUQkTnfi4s5rqFeQDogveIK5Twdif04caMS+GNE80XLIJc THLKRFEYnOAxh1Gj0LjVxit9Lf7c8VCm6Sg4Wl5inuFZGRRkLaEKVazEcwH98JWuIgWF jxuErWTVjLp/JqQAJXbJWY8DVzfw4QQWpgadF00qQm9Du7V+9TwS2ma+bg90qhKG/470 tPz368A9M9p0rjwxsf5d8TL07RDXZDTOd1a6jINyYEpscvfBlTZzQ8il7r+YVZvCBS+i HuKA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :mime-version:user-agent:date:message-id:subject:from:cc:to; bh=N0ZOjfSSgpni4CWanYIXJ8R/NtQCXmulSJKhkLZaBVs=; b=f4uu0ieUjZu71OI7Fl3zDXE5z36DvwViX77CnAYhXRc/rDzxpk5R03qlEPccwlQE1W z+SqGZsYcBTG5SYHt11HnR74BmmeOJP/Jdbok+mTlxXOwKIQpQOVpxBsxfeqST2+RVeM Lj4eC3iO83FTerS9cOzkNP2VyaZo5TP/nVqFq0h5WXPyW/0Lr65pzuCuOqTCJK0YtWJN ctEbRUIcv5TSU4g/npgtILCuDNJo/TTs7orQ+4NTAOLV1XEN/wvRMfZnTMvwj1rPTj4A LOBOSvt/81fCzmBlzv6cQ1jzy+ouI0ADVtAOu3Yx1ruKmrulgm2BQG5TPKB8UX3pAtG7 FyxQ== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j7si7085758ejm.476.2020.11.23.05.26.03; Mon, 23 Nov 2020 05:26:27 -0800 (PST) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388978AbgKWNW0 (ORCPT + 99 others); Mon, 23 Nov 2020 08:22:26 -0500 Received: from szxga04-in.huawei.com ([45.249.212.190]:7667 "EHLO szxga04-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731825AbgKWNWV (ORCPT ); Mon, 23 Nov 2020 08:22:21 -0500 Received: from DGGEMS409-HUB.china.huawei.com (unknown [172.30.72.58]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4Cfnqq5QnKz15Qyl; Mon, 23 Nov 2020 21:21:59 +0800 (CST) Received: from [10.174.176.199] (10.174.176.199) by DGGEMS409-HUB.china.huawei.com (10.3.19.209) with Microsoft SMTP Server id 14.3.487.0; Mon, 23 Nov 2020 21:22:09 +0800 To: , , , CC: Shiyuan Hu , Hewenliang From: Yunfeng Ye Subject: nohz: Update tick instead of restarting tick in tick_nohz_idle_exit() Message-ID: <66014fea-7b84-358b-137d-d15190241528@huawei.com> Date: Mon, 23 Nov 2020 21:22:08 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.174.176.199] X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In realtime scenarios, the "nohz_full" parameter is configured. Tick interference is not expected when there is only one realtime thread. But when the idle thread is switched to the realtime thread, the tick timer is restarted always. So on the nohz full mode, it is unnecessary to restart the tick timer when there is only one realtime thread. Adding can_stop_full_tick() before restarting the tick, if it return true, keep tick stopped. Signed-off-by: Yunfeng Ye --- kernel/time/tick-sched.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index cc7cba20382e..f664c7735cab 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c @@ -1208,6 +1208,20 @@ void tick_nohz_idle_restart_tick(void) __tick_nohz_idle_restart_tick(ts, ktime_get()); } +static void tick_nohz_update_tick(struct tick_sched *ts, ktime_t now) +{ +#ifdef CONFIG_NO_HZ_FULL + int cpu = smp_processor_id(); + + if (tick_nohz_full_cpu(cpu) && can_stop_full_tick(cpu, ts)) { + tick_nohz_stop_sched_tick(ts, cpu); + tick_nohz_account_idle_ticks(ts); + return; + } +#endif + __tick_nohz_idle_restart_tick(ts, now); +} + /** * tick_nohz_idle_exit - restart the idle tick from the idle task * @@ -1237,7 +1251,7 @@ void tick_nohz_idle_exit(void) tick_nohz_stop_idle(ts, now); if (tick_stopped) - __tick_nohz_idle_restart_tick(ts, now); + tick_nohz_update_tick(ts, now); local_irq_enable(); } -- 2.18.4