From patchwork Thu Jul 29 10:40:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Shameerali Kolothum Thodi X-Patchwork-Id: 12408333 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.5 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1F265C4338F for ; Thu, 29 Jul 2021 10:45:44 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E134260C41 for ; Thu, 29 Jul 2021 10:45:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org E134260C41 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=huawei.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date:Subject:CC :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=j4CcvHNagcRvuZ/YqGvbFbJvMbyfFhF1i0gm/i2cKG4=; b=lc0reJ1PL8XZEA YLX+VHhbI8NoS3lyDhQT3hPMuVvd8+Ct8nN2jHZaVg3F/7kNnuutMiODmUmkidaytVUkKU2CN4n2Y 86Fd1Pi/037EnrMlehJ91O1YSvjDOnG1usvGBvzXMcT4J1hAWqxAfXoztkW4nieXP28e//enaNiLV G/I6m/w7wVGD0vp6II6dBfjtVlOD1jreL+9MO/XA9YFsBNMiBQ11GlqrQxuf0O4MqoYtWF/hDgusF 6SDJz6EwNszJfM3dai6HPMrEYOR1VW1gGyJLyDnv4fv/djGp9ZUxd2JSNG90sbQEVBm5jfje2z85f 35O5XhdBxFIzE4LEz6HA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1m93Vx-003qoF-Of; Thu, 29 Jul 2021 10:43:45 +0000 Received: from frasgout.his.huawei.com ([185.176.79.56]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1m93Vs-003qlh-Im for linux-arm-kernel@lists.infradead.org; Thu, 29 Jul 2021 10:43:42 +0000 Received: from fraeml715-chm.china.huawei.com (unknown [172.18.147.207]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4Gb6F30FB3z6GDSW; Thu, 29 Jul 2021 18:28:23 +0800 (CST) Received: from lhreml710-chm.china.huawei.com (10.201.108.61) by fraeml715-chm.china.huawei.com (10.206.15.34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2; Thu, 29 Jul 2021 12:43:31 +0200 Received: from A2006125610.china.huawei.com (10.47.90.183) by lhreml710-chm.china.huawei.com (10.201.108.61) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2; Thu, 29 Jul 2021 11:43:24 +0100 From: Shameer Kolothum To: , , CC: , , , , , , , , , Subject: [PATCH v3 0/4] kvm/arm: New VMID allocator based on asid Date: Thu, 29 Jul 2021 11:40:05 +0100 Message-ID: <20210729104009.382-1-shameerali.kolothum.thodi@huawei.com> X-Mailer: git-send-email 2.12.0.windows.1 MIME-Version: 1.0 X-Originating-IP: [10.47.90.183] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To lhreml710-chm.china.huawei.com (10.201.108.61) X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210729_034340_953826_3BD15313 X-CRM114-Status: GOOD ( 16.05 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi, Major changes since v2 (Based on Will's feedback) -Dropped adding a new static key and cpufeature for retrieving supported VMID bits. Instead, we now make use of the kvm_arm_vmid_bits variable (patch #2). -Since we expect less frequent rollover in the case of VMIDs, the TLB invalidation is now broadcasted on rollover instead of keeping per CPU flush_pending info and issuing a local context flush.   -Clear active_vmids on vCPU schedule out to avoid unnecessarily reserving the VMID space(patch #3). -I have kept the struct kvm_vmid as it is for now(instead of a typedef as suggested), as we may soon add another variable to it when we introduce Pinned KVM VMID support. Sanity tested on HiSilicon D06 board. Thanks, Shameer RFCv1 --> v2 - Dropped "pinned VMID" support for now. - Dropped RFC tag. History(from RFC v1): ------------------- Please find the RFC series here, https://lore.kernel.org/kvmarm/20210506165232.1969-1-shameerali.kolothum.thodi@huawei.com/ This is based on a suggestion from Will [0] to try out the asid based kvm vmid solution as a separate VMID allocator instead of the shared lib approach attempted in v4[1]. The idea is to compare both the approaches and see whether the shared lib solution with callbacks make sense or not.  Though we are not yet using the pinned vmids yet, patch #2 has code for pinned vmid support. This is just to help the comparison. Test Setup/Results ---------------- The measurement was made with maxcpus set to 8 and with the number of VMID limited to 4-bit. The test involves running concurrently 40 guests with 2 vCPUs. Each guest will then execute hackbench 5 times before exiting. The performance difference between the current algo and the new one are(avg. of 10 runs):     - 1.9% less entry/exit from the guest     - 0.5% faster This is more or less comparable to v4 numbers. For the complete series, please see, https://github.com/hisilicon/kernel-dev/tree/private-v5.12-rc7-vmid-2nd-rfc and for the shared asid lib v4 solution, https://github.com/hisilicon/kernel-dev/tree/private-v5.12-rc7-asid-v4 As you can see there are ofcourse code duplication with this approach but may be it is more easy to maintain considering the complexity involved. Please take a look and let me know your feedback. Thanks, Shameer Julien Grall (1): KVM: arm64: Align the VMID allocation with the arm64 ASID one Shameer Kolothum (3): KVM: arm64: Introduce a new VMID allocator for KVM KVM: arm64: Make VMID bits accessible outside of allocator KVM: arm64: Clear active_vmids on vCPU schedule out arch/arm64/include/asm/kvm_host.h | 10 +- arch/arm64/include/asm/kvm_mmu.h | 4 +- arch/arm64/kernel/image-vars.h | 3 + arch/arm64/kvm/Makefile | 2 +- arch/arm64/kvm/arm.c | 122 +++++------------ arch/arm64/kvm/hyp/nvhe/mem_protect.c | 3 +- arch/arm64/kvm/mmu.c | 1 - arch/arm64/kvm/vmid.c | 182 ++++++++++++++++++++++++++ 8 files changed, 228 insertions(+), 99 deletions(-) create mode 100644 arch/arm64/kvm/vmid.c