Received: by 10.223.164.202 with SMTP id h10csp1650119wrb; Thu, 16 Nov 2017 01:48:38 -0800 (PST) X-Google-Smtp-Source: AGs4zMbqSkglfT7aYZrrKkHInKpuWNMq+oM/C+vWaYPUoVi/mX/ghRFTSzSmYbazHQbEv76z/I4L X-Received: by 10.84.168.193 with SMTP id f59mr1138119plb.22.1510825718780; Thu, 16 Nov 2017 01:48:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510825718; cv=none; d=google.com; s=arc-20160816; b=TFLBY9eXtH55iEjphtZIA30k7wdolJVjgnv5Fdkb4tEKf+wKf09klKT/1oNMMmTbHG 4r3+zf8UDo9KwSPMrSXd3SXDm0B529vefi5g3RDH9Bu0JQThrgxlmYCpYvutWw5Hi5Og 3JwPxQu+wZoqvQyrkGmAS0Wg8Zz9sq5l+tSpnq6Ff+CljPRWELIf5p1z2GDw4Z8QA1h/ 9gTu3S9N9c/3R09gbGv+w8QCliGlpt5X6GCIWFNX/jPvezYKMoM+ol/frFD6HzEhwqsp CDIQSeRn3Ib07xVywpuLz1lUPpxnY9XCuFur6uha9xvuxo+9jhnEs0jLvMSpbBscF+nc VqUw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dkim-signature :arc-authentication-results; bh=Lxmt7uhtOD7hDsFOT+Yx0+dZQDbxOLvoTT6sFSocWLQ=; b=fTsYKdc0/9EXq1gl128noLPm9gExSqynsAc5ii16YbSeecWgNM6Du1+uvOTY/cZaiC TCcrxu9KOFh+PKC1KLxPkK6ruCvUv5fiy7Vx/8A0HnFHtpXBFMbClTEYk6EoP3eSQ2na Zxr6JxhRZ4ajgei529K4hkAZfAVQf0zovvKnYx6bjUORL5DV4mSgkbRIPOdAgiTffmcD xHWnpfBxJSTfRoMWS8zERPwOQBdnrmnNli+qboVLtLI840E6Kh41sgaOzBqSlsUwe3fv LjNWmyQf6omxSTKs3igfsOhyk0Mw7b18DcUPpAcme1WtivbaGlez3E4MyYyY7b0GbsJY P6dg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=qY7ArMlW; 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=NONE sp=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 31si591006plz.611.2017.11.16.01.48.26; Thu, 16 Nov 2017 01:48:38 -0800 (PST) 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=@gmail.com header.s=20161025 header.b=qY7ArMlW; 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=NONE sp=NONE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934054AbdKPJMw (ORCPT + 91 others); Thu, 16 Nov 2017 04:12:52 -0500 Received: from mail-ot0-f195.google.com ([74.125.82.195]:45414 "EHLO mail-ot0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933712AbdKPJMj (ORCPT ); Thu, 16 Nov 2017 04:12:39 -0500 Received: by mail-ot0-f195.google.com with SMTP id b17so9867283oth.2; Thu, 16 Nov 2017 01:12:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding:content-language; bh=Lxmt7uhtOD7hDsFOT+Yx0+dZQDbxOLvoTT6sFSocWLQ=; b=qY7ArMlWvbza8U4CDfoFWoqgVYr02aRiqACvfHJcn10lVJ7bAzosE8nVXaPv5DLplZ PizeI99MfFRugtX0rkHFhgS1lEFrUIKbC9vkmLYR7WiNCAuhb+Jwx7psPMz+d7l2FNJs dIBVsOymf5yDJBgh36xR48nHXyvuKG3DcLxQ376Qgor5YY8VbELjqYVBPut180ERdoS3 dy02BaE+t8OJla4LMdUoKu2xMAX4D3X1tu+7Q1qO+KzvGVJD1Ul2/uztBURXcXLrSZwv hXyPBEbIDlVxeFeROg3DIOy8DRB9Ve1FC3ERy7npbHlNyRY+1CFBAbN3OkpcGRICqRIb 1GIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=Lxmt7uhtOD7hDsFOT+Yx0+dZQDbxOLvoTT6sFSocWLQ=; b=ZexhgduKeSKI3tsqp8hQ84SpUNHU0zUNtpajkmfWzVQVg579DUtxY82JJlMxHry+Uq Xge/g9ZKe9JYnub0nuUfDNP6lsxDLUV9j6cjQOrSWWYbbLWJU33XYOvZs1tzhG9/9Bqt bIgI8idGjvG2oC30cIa/+8rfbh2Xp7+VdWJt+Ev0IoFqNhIbIydJn2HKvgQcCUjkD3x2 3yiyLADLLypcNUTqRq8KLOScmPDxYWu6skHWby4utK9hNq3iohpjOUWnxwqkuKCMK/Hg 7CrW4S37s2sKtr7IYUi1dv0i7VWEJRQQIQc+FIjLqfPY78hLcHuXTfNZqbI1F4sDJiYK ETKQ== X-Gm-Message-State: AJaThX6YpZXM4yQQ+BcraUc23nQmDStA1EbwtNzjQ5aO1rQlBAbG+Uhl 1A2LKwWMOZJEh4gSyUrEzHM= X-Received: by 10.157.68.5 with SMTP id u5mr668357ote.82.1510823558379; Thu, 16 Nov 2017 01:12:38 -0800 (PST) Received: from [0.0.0.0] ([47.89.242.186]) by smtp.gmail.com with ESMTPSA id v126sm280516oif.4.2017.11.16.01.12.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 16 Nov 2017 01:12:38 -0800 (PST) Subject: Re: [PATCH RFC v3 3/6] sched/idle: Add a generic poll before enter real idle path To: Thomas Gleixner , Peter Zijlstra Cc: Quan Xu , kvm@vger.kernel.org, linux-doc@vger.kernel.org, linux-fsdevel@vger.kernel.org, LKML , virtualization@lists.linux-foundation.org, x86@kernel.org, xen-devel@lists.xenproject.org, Yang Zhang , Ingo Molnar , "H. Peter Anvin" , Borislav Petkov , Kyle Huey , Len Brown , Andy Lutomirski , Tom Lendacky , Tobias Klauser , Daniel Lezcano References: <1510567565-5118-1-git-send-email-quan.xu0@gmail.com> <1510567565-5118-4-git-send-email-quan.xu0@gmail.com> <20171115121152.gqug5wzerlo3eimd@hirez.programming.kicks-ass.net> From: Quan Xu Message-ID: <46086489-5a01-16e1-9314-70ae53c01952@gmail.com> Date: Thu, 16 Nov 2017 17:12:28 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2017-11-16 06:03, Thomas Gleixner wrote: > On Wed, 15 Nov 2017, Peter Zijlstra wrote: > >> On Mon, Nov 13, 2017 at 06:06:02PM +0800, Quan Xu wrote: >>> From: Yang Zhang >>> >>> Implement a generic idle poll which resembles the functionality >>> found in arch/. Provide weak arch_cpu_idle_poll function which >>> can be overridden by the architecture code if needed. >> No, we want less of those magic hooks, not more. >> >>> Interrupts arrive which may not cause a reschedule in idle loops. >>> In KVM guest, this costs several VM-exit/VM-entry cycles, VM-entry >>> for interrupts and VM-exit immediately. Also this becomes more >>> expensive than bare metal. Add a generic idle poll before enter >>> real idle path. When a reschedule event is pending, we can bypass >>> the real idle path. >> Why not do a HV specific idle driver? > If I understand the problem correctly then he wants to avoid the heavy > lifting in tick_nohz_idle_enter() in the first place, but there is already > an interesting quirk there which makes it exit early. See commit > 3c5d92a0cfb5 ("nohz: Introduce arch_needs_cpu"). The reason for this commit > looks similar. But lets not proliferate that. I'd rather see that go away. agreed. Even we can get more benifit than commit 3c5d92a0cfb5 ("nohz: Introduce arch_needs_cpu") in kvm guest. I won't proliferate that.. > But the irq_timings stuff is heading into the same direction, with a more > complex prediction logic which should tell you pretty good how long that > idle period is going to be and in case of an interrupt heavy workload this > would skip the extra work of stopping and restarting the tick and provide a > very good input into a polling decision. interesting. I have tested with IRQ_TIMINGS related code, which seems not working so far. Also I'd like to help as much as I can. > This can be handled either in a HV specific idle driver or even in the > generic core code. If the interrupt does not arrive then you can assume > within the predicted time then you can assume that the flood stopped and > invoke halt or whatever. > > That avoids all of that 'tunable and tweakable' x86 specific hackery and > utilizes common functionality which is mostly there already. here is some sample code. Poll for a while before enter halt in cpuidle_enter_state() If I get a reschedule event, then don't try to enter halt.  (I hope this is the right direction as Peter mentioned in another email) --- a/drivers/cpuidle/cpuidle.c +++ b/drivers/cpuidle/cpuidle.c @@ -210,6 +210,13 @@ int cpuidle_enter_state(struct cpuidle_device *dev, struct cpuidle_driver *drv,                 target_state = &drv->states[index];         } +#ifdef CONFIG_PARAVIRT +       paravirt_idle_poll(); + +       if (need_resched()) +               return -EBUSY; +#endif +         /* Take note of the planned idle state. */         sched_idle_set_state(target_state); thanks, Quan Alibaba Cloud From 1584173435729790209@xxx Wed Nov 15 22:38:38 +0000 2017 X-GM-THRID: 1584141070007959176 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread