Received: by 2002:a25:b794:0:0:0:0:0 with SMTP id n20csp2739643ybh; Mon, 5 Aug 2019 06:07:46 -0700 (PDT) X-Google-Smtp-Source: APXvYqxLjcjoXd0xo03cnGKxlOSz9tlwjVXIa3QrE9aSX3XAR+R4GQN9DwRoJNZ5nKQZiSHr50fK X-Received: by 2002:a17:902:d90a:: with SMTP id c10mr140707903plz.208.1565010466326; Mon, 05 Aug 2019 06:07:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1565010466; cv=none; d=google.com; s=arc-20160816; b=qt6PHTrXIgsxwgfuUvAhVhe5FIIbV5W02qwbqRehwrUr+X+BTh3Kl6I73Ii4lxu52l 8fqwxxXXfrpUVlvkYd66rXDLVL7gIu47nkAxa63QLYwf/5sLqjs+m+5WYVZgxBUUDer6 1CBPdwn0/7CrSN58gj/tWm1d6XCbpE5eCxb2wiz79tX2drmkufcfgo5pejhmfaZk3+TL nVWKzfg9AGh1hSBXRRAHlxw5tobKXcFalEMWpeYI/HbKoQt5vTwZx8Zk+mq+11oiAGTg psRWJdfpARHI4wJg3rg+kutqqkFj0JOEts6Bjjd46vNm0C+n3n6nHkzE4iA+rRFbxKoi Kc8w== 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=2kDZdSVqk6Gfk/hlfGxxbbrv1WQO9fHEcUjofZ8m8qk=; b=gsehbN4/fBGqeVH6HW5WxrgS9S94LhjryjVC3rdGI9sjNq/gLSLxYOqAH6Xn6lafiB d1PMi2uyDBXFPgXkdW7xnTEW/UNJyqmhPMncNma3QEH5aqKMp1X/W5AGKHdeMN9vvP+S M6MGXnFoOIPv9lCfr+Haafql6Tgj0p+paehwpDvclJqR7WSxKEkN72ER17p/FqkgGZJp iA906F4D1zlji81MZbsgCOGAM7yvuAeF0i02S7UOnIuyoFKsg41vt4T2HdbJzjifNS65 5n/GDslTpzavlIL3vyvsR2PmkrLmfLk3s8q/wD2CoEFrLLk3vJC+jQHvw+vqZ17tLOdi 6+Cw== 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 a13si43350881pgt.217.2019.08.05.06.07.30; Mon, 05 Aug 2019 06:07:46 -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 S1729540AbfHENGO (ORCPT + 99 others); Mon, 5 Aug 2019 09:06:14 -0400 Received: from foss.arm.com ([217.140.110.172]:48156 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729031AbfHENGJ (ORCPT ); Mon, 5 Aug 2019 09:06:09 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 06BD41570; Mon, 5 Aug 2019 06:06:09 -0700 (PDT) Received: from [10.1.196.133] (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 15F153F706; Mon, 5 Aug 2019 06:06:06 -0700 (PDT) Subject: Re: [PATCH 0/9] arm64: Stolen time support To: Marc Zyngier Cc: kvm@vger.kernel.org, =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= , Catalin Marinas , Suzuki K Pouloze , linux-doc@vger.kernel.org, Russell King , linux-kernel@vger.kernel.org, James Morse , linux-arm-kernel@lists.infradead.org, Paolo Bonzini , Will Deacon , kvmarm@lists.cs.columbia.edu, Julien Thierry References: <20190802145017.42543-1-steven.price@arm.com> <20190803190522.5fec8f7d@why> From: Steven Price Message-ID: <6789f477-8ab5-cc54-1ad2-8627917b07c9@arm.com> Date: Mon, 5 Aug 2019 14:06:05 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <20190803190522.5fec8f7d@why> Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 03/08/2019 19:05, Marc Zyngier wrote: > On Fri, 2 Aug 2019 15:50:08 +0100 > Steven Price wrote: > > Hi Steven, > >> This series add support for paravirtualized time for arm64 guests and >> KVM hosts following the specification in Arm's document DEN 0057A: >> >> https://developer.arm.com/docs/den0057/a >> >> It implements support for stolen time, allowing the guest to >> identify time when it is forcibly not executing. >> >> It doesn't implement support for Live Physical Time (LPT) as there are >> some concerns about the overheads and approach in the above >> specification, and I expect an updated version of the specification to >> be released soon with just the stolen time parts. > > Thanks for posting this. > > My current concern with this series is around the fact that we allocate > memory from the kernel on behalf of the guest. It is the first example > of such thing in the ARM port, and I can't really say I'm fond of it. > > x86 seems to get away with it by having the memory allocated from > userspace, why I tend to like more. Yes, put_user is more > expensive than a straight store, but this isn't done too often either. > > What is the rational for your current approach? As I see it there are 3 approaches that can be taken here: 1. Hypervisor allocates memory and adds it to the virtual machine. This means that everything to do with the 'device' is encapsulated behind the KVM_CREATE_DEVICE / KVM_[GS]ET_DEVICE_ATTR ioctls. But since we want the stolen time structure to be fast it cannot be a trapping region and has to be backed by real memory - in this case allocated by the host kernel. 2. Host user space allocates memory. Similar to above, but this time user space needs to manage the memory region as well as the usual KVM_CREATE_DEVICE dance. I've no objection to this, but it means kvmtool/QEMU needs to be much more aware of what is going on (e.g. how to size the memory region). 3. Guest kernel "donates" the memory to the hypervisor for the structure. As far as I'm aware this is what x86 does. The problems I see this approach are: a) kexec becomes much more tricky - there needs to be a disabling mechanism for the guest to stop the hypervisor scribbling on memory before starting the new kernel. b) If there is more than one entity that is interested in the information (e.g. firmware and kernel) then this requires some form of arbitration in the guest because the hypervisor doesn't want to have to track an arbitrary number of regions to update. c) Performance can suffer if the host kernel doesn't have a suitably aligned/sized area to use. As you say - put_user() is more expensive. The structure is updated on every return to the VM. Of course x86 does prove the third approach can work, but I'm not sure which is actually better. Avoid the kexec cancellation requirements was the main driver of the current approach. Although many of the conversations about this were also tied up with Live Physical Time which adds its own complications. Steve