Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755524AbbFKUqd (ORCPT ); Thu, 11 Jun 2015 16:46:33 -0400 Received: from mx1.redhat.com ([209.132.183.28]:36392 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752955AbbFKUqa (ORCPT ); Thu, 11 Jun 2015 16:46:30 -0400 Message-ID: <5579F3A5.7010103@redhat.com> Date: Thu, 11 Jun 2015 16:46:29 -0400 From: Rik van Riel User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.3.0 MIME-Version: 1.0 To: Frederic Weisbecker , LKML CC: Peter Zijlstra , Thomas Gleixner , Preeti U Murthy , Christoph Lameter , Ingo Molnar , Viresh Kumar Subject: Re: [PATCH 7/8] nohz: Evaluate tick dependency once on context switch References: <1434044168-23173-1-git-send-email-fweisbec@gmail.com> <1434044168-23173-8-git-send-email-fweisbec@gmail.com> In-Reply-To: <1434044168-23173-8-git-send-email-fweisbec@gmail.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1855 Lines: 43 On 06/11/2015 01:36 PM, Frederic Weisbecker wrote: > The tick dependency is evaluated on every irq. This is a batch of checks > which determine whether it is safe to stop the tick or not. These checks > are often split in many details: posix cpu timers, scheduler, sched clock, > perf events. Each of which are made of smaller details: posix cpu > timer involves checking process wide timers then thread wide timers. Perf > involves checking freq events then more per cpu details. > > Checking these details every time we update the full dynticks state > bring avoidable overhead. > > So lets evaluate these dependencies once on context switch. Then the > further dependency checks will be performed through a single state check. > > This is a first step that can be later optimized by dividing task level > dependency, CPU level dependency and global dependency and update > each at the right time. > +static void tick_nohz_full_update_dependencies(void) > +{ > + struct tick_sched *ts = this_cpu_ptr(&tick_cpu_sched); > + > + if (!posix_cpu_timers_can_stop_tick(current)) > + ts->tick_needed |= TICK_NEEDED_POSIX_CPU_TIMER; > + > + if (!perf_event_can_stop_tick()) > + ts->tick_needed |= TICK_NEEDED_PERF_EVENT; > + > + if (!sched_can_stop_tick()) > + ts->tick_needed |= TICK_NEEDED_SCHED; > I see this getting kicked from task work and from ipi context, but does it get kicked on task wakeup, when we have a second runnable task on a CPU, but we decide not to preempt the currently running task to switch to it yet, but we will want to preempt the currently running task at a later point in time? -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/