Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp917315ybg; Fri, 18 Oct 2019 09:14:21 -0700 (PDT) X-Google-Smtp-Source: APXvYqyb2VslwS7o6SXn4cArKn+WPoeDnKhbpBQpizfBFMkgXUF5UAwd+k01JCzo0XcNyVDp/NDW X-Received: by 2002:a50:b2c4:: with SMTP id p62mr10317441edd.128.1571415261296; Fri, 18 Oct 2019 09:14:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1571415261; cv=none; d=google.com; s=arc-20160816; b=fuYoQUluoucxfJDOfpTV4VaQAo+vHi4k7CzzvKE3CBiJ+jIse5lPVxoHFw0zDjQkqZ tidWml7xf/e72ORSe4ptHOyMwlbrI6qwxL3izIGHRvsHk6lHxok9I3qca2b62uKJXIVz qm2pYWeHQyOpRBrIWIjK0cx/cV+RywrjhP5Ddigruo+88Ghdo+wVrpMfxqrjmIFz8+ge ekxJj4A9xt52/LVHbc2touT2nz/AL36p9ohNVTq5aArsiWn4+gw3kM1qV54YakXBpfDA PTC7AVtMZ5UTMMW1ejT/o9b4TCBG5pwTSsBjqo1az02eA6DFD1kAqY936z5+EFncO8nc 69eQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=vYuUzfUVuXksxbjnJkyiVmHQK4mOiRfip00125qIgew=; b=Lkha6F8ckqCP+Hb+JeosfgAhsM7jKIDGilf/bbiU/Avh2FW4mYQb3ZpqaoPdypu3SO Z3djIuGpaTgiQ+O56a8GBGvGK0n3YsRYf/zWdT5jQi7VC0xxBuHKN+WKg36N/CBa//YI v34vRlJiKnXIDy6TXYVIEHOlEeI1Nuinh622xSzWPKx9QeEyZQd8+zP2FT0SY9teMZCi y8eot3IsmHzjnue0DqzjqC7JW3FIKzGf5DcNEQgs/Cp1cmbX1VM8bJlOl5uxsN3NagXC Rmj/qvT0tUmh41hDPzo458Zlp+5012T0063jGy4cLicxmoIvxE8RYqjB2ReewXHrY8la cZ3Q== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id oq3si3729019ejb.220.2019.10.18.09.13.57; Fri, 18 Oct 2019 09:14:21 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2394759AbfJQOIv (ORCPT + 99 others); Thu, 17 Oct 2019 10:08:51 -0400 Received: from szxga06-in.huawei.com ([45.249.212.32]:47664 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727429AbfJQOIv (ORCPT ); Thu, 17 Oct 2019 10:08:51 -0400 Received: from DGGEMS411-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id 30357D36CEBE6D75367F; Thu, 17 Oct 2019 22:08:46 +0800 (CST) Received: from [127.0.0.1] (10.177.251.225) by DGGEMS411-HUB.china.huawei.com (10.3.19.211) with Microsoft SMTP Server id 14.3.439.0; Thu, 17 Oct 2019 22:08:40 +0800 Subject: Re: [PATCH V2] arm64: psci: Reduce waiting time of cpu_psci_cpu_kill() To: Sudeep Holla CC: Will Deacon , David Laight , "catalin.marinas@arm.com" , "kstewart@linuxfoundation.org" , "gregkh@linuxfoundation.org" , "ard.biesheuvel@linaro.org" , "tglx@linutronix.de" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "wuyun.wu@huawei.com" , , References: <18068756-0f39-6388-3290-cf03746e767d@huawei.com> <20191015162358.bt5rffidkv2j4xqb@willie-the-truck> <20191016102545.GA11386@bogus> <13d82e24-90bd-0c17-ef7f-aa7fec272f59@huawei.com> <20191016150545.GA6750@bogus> From: Yunfeng Ye Message-ID: Date: Thu, 17 Oct 2019 22:08:13 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: <20191016150545.GA6750@bogus> Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.177.251.225] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2019/10/16 23:05, Sudeep Holla wrote: > On Wed, Oct 16, 2019 at 07:29:59PM +0800, Yunfeng Ye wrote: >> >> >> On 2019/10/16 18:25, Sudeep Holla wrote: >>> On Wed, Oct 16, 2019 at 11:22:23AM +0800, Yunfeng Ye wrote: >>>> >>>> >>>> On 2019/10/16 0:23, Will Deacon wrote: >>>>> Hi, >>>>> >>>>> On Sat, Sep 21, 2019 at 07:21:17PM +0800, Yunfeng Ye wrote: >>>>>> If psci_ops.affinity_info() fails, it will sleep 10ms, which will not >>>>>> take so long in the right case. Use usleep_range() instead of msleep(), >>>>>> reduce the waiting time, and give a chance to busy wait before sleep. >>>>> >>>>> Can you elaborate on "the right case" please? It's not clear to me >>>>> exactly what problem you're solving here. >>>>> >>>> The situation is that when the power is off, we have a battery to save some >>>> information, but the battery power is limited, so we reduce the power consumption >>>> by turning off the cores, and need fastly to complete the core shutdown. However, the >>>> time of cpu_psci_cpu_kill() will take 10ms. We have tested the time that it does not >>>> need 10ms, and most case is about 50us-500us. if we reduce the time of cpu_psci_cpu_kill(), >>>> we can reduce 10% - 30% of the total time. >>>> >>> >>> Have you checked why PSCI AFFINITY_INFO not returning LEVEL_OFF quickly >>> then ? We wait for upto 5s in cpu_wait_death(worst case) before cpu_kill >>> is called from __cpu_die. >>> >> When cpu_wait_death() is done, it means that the cpu core's hardware prepare to >> die. I think not returning LEVEL_OFF quickly is that hardware need time to handle. >> I don't know how much time it need is reasonable, but I test that it need about >> 50us - 500us. >> > > Fair enough. > >> In addition I have not meat the worst case that cpu_wait_death() need upto >> 5s, and we only take normal case into account. >> > > Good > >> >>> Moreover I don't understand the argument here. The cpu being killed >>> will be OFF, as soon as it can and firmware controls that and this >>> change is not related to CPU_OFF. And this CPU calling cpu_kill can >>> sleep and 10ms is good to enter idle states if it's idle saving power, >>> so I fail to map the power saving you mention above. >>> >> We have hundreds of CPU cores that need to be shut down. For example, >> a CPU has 200 cores, and the thread to shut down the core is in CPU 0. >> and the thread need to shut down from core 1 to core 200. However, the >> implementation of the kernel can only shut down cpu cores one by one, so we >> need to wait for cpu_kill() to finish before shutting down the next >> CPU core. If it wait for 10ms each time in cpu_kill, it will takes up >> about 2 seconds in cpu_kill() total. >> > > OK, thanks for the illustrative example. This make sense to me now. But > you comparing with battery powered devices confused me and I assumed > it as some hack to optimise mobile workload. > It is not mobile workload, but a arm64 server with hundreds of cpu cores. Battery powered is a backup battery for reliability and to prevent accidental power failure. >>>> So change msleep (10) to usleep_range() to reduce the waiting time. In addition, >>>> we don't want to be scheduled during the sleeping time, some threads may take a >>>> long time and don't give up the CPU, which affects the time of core shutdown, >>>> Therefore, we add a chance to busy-wait max 1ms. >>>> >>> >>> On the other hand, usleep_range reduces the timer interval and hence >>> increases the chance of the callee CPU not to enter deeper idle states. >>> >>> What am I missing here ? What's the use case or power off situation >>> you are talking about above ? >>> >> As mentioned above, we are not to save power through msleep to idle state, >> but to quickly turn off other CPU core's hardware to reduce power consumption. > > You still don't provide your use-case in which this is required. I know > this will be useful for suspend-to-ram. Do you have any other use-case > that you need to power-off large number of CPUs like this ? Also you > mentioned battery powered, and I don't think any battery powered device > has 200 thread like in your example :) > The use-case is like suspend-to-disk, but a little different: In the abnormal power failure of server equipment, in order to increase reliability, there is a backup battery for power supply. Before the battery runs out, we need to save the key datas to the disk. In order to maintain the battery power supply, a series of power reduction processing is needed, include which all the cores need to be shut down quickly, we have max near 200 cores need to shutdown. Also this modify will be useful for suspend-to-ram too. thanks. > You need to mention few things clearly in the commit log: > 1. How the CPU hotplug operation is serialised in some use-case like > suspend-to-ram > 2. How that may impact systems with large number of CPUs > 3. How your change helps to improve that > > It may it easy for anyone to understand the motivation for this change. > The commit message you have doesn't give any clue on all the above and > hence we have lot of questions. > ok, thanks. > I will respond to the original patch separately. > > -- > Regards, > Sudeep > > . >