Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp3433173pxj; Tue, 11 May 2021 04:32:27 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzpjM1yjPjwLbqERD210inqUqM5ZKgyWrXODFXBODv9yCEZxX5aClwyRtOvhWnArx388qKm X-Received: by 2002:a17:906:6854:: with SMTP id a20mr30128432ejs.329.1620732747078; Tue, 11 May 2021 04:32:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620732747; cv=none; d=google.com; s=arc-20160816; b=P2vuUJo6Qjo7l32jCOZ0cp5hqryhBtQ6jznSOzygSQMBa4StDq7pFy0AA9xq1YZbuN e7EcRiQ1I/Bam4EyfLfy82wiy0w1wPr0tfnsfAcoHLMTgsYUTPOHeeApZWMKhCgrz75M M9eoguZ1Je1vBuT3zOXFcsvwkdEwTOZEIwPrYpT//ZE55WM1mYDo5ly79Tuzl6ZfrIwr 0LkluBp2QImv5R1o/B8EgHoDbkCGEEqY2th7jsrqo/aXOKG7SVgx00hzr2dLYOyiW8l+ d/PKAGhvCoPD9k3LfKm7oe4oC5edXAuuFgG3HkA2vn2JLD0tmAlVqevFTA4rwEb3AOUl guig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:references:cc :to:from:subject; bh=hPgHlHmhZo7p6DWC2ibj4EPy1xNz1D/2vGEqwk5a8IU=; b=wp/29A7ZeyKTVrXAAlr089ODh95O6dX0jf6Z64uhb8J27oMdUD9LfFUah207Xajmy6 YRja/YDzgf2UVZnUssCLURxhOoAl67iPJ60G3oyrkH5Z6nQqL2kzSQVLuNjaysbJlQJw qppPqKJpKudjYkPpzDeQOKctBkZaTFHD2d+PP1o0v653hoVaDPY54yexhaoDjvq+QEAp rGa+qR/dObUpBtFkoxfj0Xvv5SYTjmgnIhdpp8bgezz+kEuywv4nXqtirtvVJLRl0+lp +qb9Sz3Z051o1C5zaEL98IANLEfdAKbH0cHPDaEfuCx5d1DN1g8PtFC/czmb/WnoDYO6 pS5w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ga21si3111458ejc.607.2021.05.11.04.32.02; Tue, 11 May 2021 04:32:27 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231345AbhEKLbU (ORCPT + 99 others); Tue, 11 May 2021 07:31:20 -0400 Received: from szxga04-in.huawei.com ([45.249.212.190]:2776 "EHLO szxga04-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231393AbhEKLbT (ORCPT ); Tue, 11 May 2021 07:31:19 -0400 Received: from DGGEMS412-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4FfbGx73YHzmgJV; Tue, 11 May 2021 19:26:49 +0800 (CST) Received: from [10.174.184.135] (10.174.184.135) by DGGEMS412-HUB.china.huawei.com (10.3.19.212) with Microsoft SMTP Server id 14.3.498.0; Tue, 11 May 2021 19:30:02 +0800 Subject: Re: [RFC PATCH v3 0/8] Add IOPF support for VFIO passthrough From: Shenming Lu To: Alex Williamson CC: Cornelia Huck , Will Deacon , "Robin Murphy" , Joerg Roedel , "Jean-Philippe Brucker" , Eric Auger , , , , , , Kevin Tian , Lu Baolu , , Christoph Hellwig , Jonathan Cameron , "Barry Song" , , References: <20210409034420.1799-1-lushenming@huawei.com> Message-ID: Date: Tue, 11 May 2021 19:30:01 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.2.2 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.174.184.135] X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Alex, Hope for some suggestions or comments from you since there seems to be many unsure points in this series. :-) Thanks, Shenming On 2021/4/26 9:41, Shenming Lu wrote: > On 2021/4/9 11:44, Shenming Lu wrote: >> Hi, >> >> Requesting for your comments and suggestions. :-) > > Kind ping... > >> >> The static pinning and mapping problem in VFIO and possible solutions >> have been discussed a lot [1, 2]. One of the solutions is to add I/O >> Page Fault support for VFIO devices. Different from those relatively >> complicated software approaches such as presenting a vIOMMU that provides >> the DMA buffer information (might include para-virtualized optimizations), >> IOPF mainly depends on the hardware faulting capability, such as the PCIe >> PRI extension or Arm SMMU stall model. What's more, the IOPF support in >> the IOMMU driver has already been implemented in SVA [3]. So we add IOPF >> support for VFIO passthrough based on the IOPF part of SVA in this series. >> >> We have measured its performance with UADK [4] (passthrough an accelerator >> to a VM(1U16G)) on Hisilicon Kunpeng920 board (and compared with host SVA): >> >> Run hisi_sec_test... >> - with varying sending times and message lengths >> - with/without IOPF enabled (speed slowdown) >> >> when msg_len = 1MB (and PREMAP_LEN (in Patch 4) = 1): >> slowdown (num of faults) >> times VFIO IOPF host SVA >> 1 63.4% (518) 82.8% (512) >> 100 22.9% (1058) 47.9% (1024) >> 1000 2.6% (1071) 8.5% (1024) >> >> when msg_len = 10MB (and PREMAP_LEN = 512): >> slowdown (num of faults) >> times VFIO IOPF >> 1 32.6% (13) >> 100 3.5% (26) >> 1000 1.6% (26) >> >> History: >> >> v2 -> v3 >> - Nit fixes. >> - No reason to disable reporting the unrecoverable faults. (baolu) >> - Maintain a global IOPF enabled group list. >> - Split the pre-mapping optimization to be a separate patch. >> - Add selective faulting support (use vfio_pin_pages to indicate the >> non-faultable scope and add a new struct vfio_range to record it, >> untested). (Kevin) >> >> v1 -> v2 >> - Numerous improvements following the suggestions. Thanks a lot to all >> of you. >> >> Note that PRI is not supported at the moment since there is no hardware. >> >> Links: >> [1] Lesokhin I, et al. Page Fault Support for Network Controllers. In ASPLOS, >> 2016. >> [2] Tian K, et al. coIOMMU: A Virtual IOMMU with Cooperative DMA Buffer Tracking >> for Efficient Memory Management in Direct I/O. In USENIX ATC, 2020. >> [3] https://patchwork.kernel.org/project/linux-arm-kernel/cover/20210401154718.307519-1-jean-philippe@linaro.org/ >> [4] https://github.com/Linaro/uadk >> >> Thanks, >> Shenming >> >> >> Shenming Lu (8): >> iommu: Evolve the device fault reporting framework >> vfio/type1: Add a page fault handler >> vfio/type1: Add an MMU notifier to avoid pinning >> vfio/type1: Pre-map more pages than requested in the IOPF handling >> vfio/type1: VFIO_IOMMU_ENABLE_IOPF >> vfio/type1: No need to statically pin and map if IOPF enabled >> vfio/type1: Add selective DMA faulting support >> vfio: Add nested IOPF support >> >> .../iommu/arm/arm-smmu-v3/arm-smmu-v3-sva.c | 3 +- >> drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 18 +- >> drivers/iommu/iommu.c | 56 +- >> drivers/vfio/vfio.c | 85 +- >> drivers/vfio/vfio_iommu_type1.c | 1000 ++++++++++++++++- >> include/linux/iommu.h | 19 +- >> include/linux/vfio.h | 13 + >> include/uapi/linux/iommu.h | 4 + >> include/uapi/linux/vfio.h | 6 + >> 9 files changed, 1181 insertions(+), 23 deletions(-) >>