Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp669974imm; Thu, 31 May 2018 07:26:12 -0700 (PDT) X-Google-Smtp-Source: ADUXVKI/5llwE9hgzFYtTSwS2QtTm7LOWO6IsJzIVh80CaGc4hK4XHHI+CwN1/1QAaEnwQRfqxQ9 X-Received: by 2002:a65:4081:: with SMTP id t1-v6mr5873193pgp.32.1527776772523; Thu, 31 May 2018 07:26:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527776772; cv=none; d=google.com; s=arc-20160816; b=diL8vTDdTL7djgT1/I2TIdyQqGBRucsqpMruIQvZdnLW9nMsvpdhsuDqtzjeAJuf7t SJemSMZPJlQrOt+DtULHxKN7EDJnLkV/rZu4LBsU07W2HFcKVJiLa8hExd8siUVFGnsj 7jWIFRij+DbiQtHmP0oAtzcXp49Y+ILzl+CLcdFiBUYWz2defCdHol8pKTD7Ywecw/Ke R1CQrv6UWTnQ6/sMGYfrXIwftJlAXBi8CxsgvOUBqR7LwuxN+DTeVsxe76s2f5WacoKb ODZsUCZo/tWHytav5UGdHT7KBZ0+VlFb0SWPr2S0wtqE7LNpaYlYa5J0D4jnGFRMqGno 8YPg== 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:arc-authentication-results; bh=onoSUq6PCDSOwpxH+aeUo/lVY3BfB/cINtTGHp0EuZk=; b=i+QkWoEYmL9kC0RY+HBwqvHCFd0xS6OLAP3WN1GZgsOX70WMqRkmfElm4IUclYlDhN vfvNye3u7j2meUEgdpA1wzSDFRjDhktfeMUODST7kS9a8Q4ocBEAnBdOTxN/TapnuyuS 9EXYDXNER7k//uIboJliuW1rNgr8emkLterzIn1YMf6RPT2pNG4MA5LTZI7xzaHUA7oC JBbUoHW/BQSXBV1VEZM79CsJZUb+WZB/L/7uAX6Hw4Six9CUu8SAxYdqezz1qkDLTUT5 TQrWbdeeAQCdDzrIiIvJoG7FLNpeHgwNI3uXuU1784eIql9HaVOxYuEMqoEkiEGRwlI/ EEog== 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 u13-v6si35710274plq.161.2018.05.31.07.25.57; Thu, 31 May 2018 07:26:12 -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 S1755405AbeEaOZ0 (ORCPT + 99 others); Thu, 31 May 2018 10:25:26 -0400 Received: from foss.arm.com ([217.140.101.70]:42096 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755335AbeEaOZY (ORCPT ); Thu, 31 May 2018 10:25:24 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 28CC715AD; Thu, 31 May 2018 07:25:24 -0700 (PDT) Received: from [10.1.210.88] (e110467-lin.cambridge.arm.com [10.1.210.88]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id DBAB23F25D; Thu, 31 May 2018 07:25:21 -0700 (PDT) Subject: Re: [PATCH 0/7] add non-strict mode support for arm-smmu-v3 To: Hanjun Guo , Zhen Lei , Will Deacon , Matthias Brugger , Rob Clark , Joerg Roedel , linux-mediatek , linux-arm-msm , linux-arm-kernel , iommu , linux-kernel Cc: Libin , Guozhu Li , Xinwei Hu References: <1527752569-18020-1-git-send-email-thunder.leizhen@huawei.com> <96cc25b9-b21f-6067-384d-f52e6b8b25e7@huawei.com> From: Robin Murphy Message-ID: <92b240f5-596e-87a9-863a-b18475042cce@arm.com> Date: Thu, 31 May 2018 15:25:20 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: <96cc25b9-b21f-6067-384d-f52e6b8b25e7@huawei.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 31/05/18 14:49, Hanjun Guo wrote: > Hi Robin, > > On 2018/5/31 19:24, Robin Murphy wrote: >> On 31/05/18 08:42, Zhen Lei wrote: >>> In common, a IOMMU unmap operation follow the below steps: >>> 1. remove the mapping in page table of the specified iova range >>> 2. execute tlbi command to invalid the mapping which is cached in TLB >>> 3. wait for the above tlbi operation to be finished >>> 4. free the IOVA resource >>> 5. free the physical memory resource >>> >>> This maybe a problem when unmap is very frequently, the combination of tlbi >>> and wait operation will consume a lot of time. A feasible method is put off >>> tlbi and iova-free operation, when accumulating to a certain number or >>> reaching a specified time, execute only one tlbi_all command to clean up >>> TLB, then free the backup IOVAs. Mark as non-strict mode. >>> >>> But it must be noted that, although the mapping has already been removed in >>> the page table, it maybe still exist in TLB. And the freed physical memory >>> may also be reused for others. So a attacker can persistent access to memory >>> based on the just freed IOVA, to obtain sensible data or corrupt memory. So >>> the VFIO should always choose the strict mode. >>> >>> Some may consider put off physical memory free also, that will still follow >>> strict mode. But for the map_sg cases, the memory allocation is not controlled >>> by IOMMU APIs, so it is not enforceable. >>> >>> Fortunately, Intel and AMD have already applied the non-strict mode, and put >>> queue_iova() operation into the common file dma-iommu.c., and my work is based >>> on it. The difference is that arm-smmu-v3 driver will call IOMMU common APIs to >>> unmap, but Intel and AMD IOMMU drivers are not. >>> >>> Below is the performance data of strict vs non-strict for NVMe device: >>> Randomly Read  IOPS: 146K(strict) vs 573K(non-strict) >>> Randomly Write IOPS: 143K(strict) vs 513K(non-strict) >> >> What hardware is this on? If it's SMMUv3 without MSIs (e.g. D05), then you'll still be using the rubbish globally-blocking sync implementation. If that is the case, I'd be very interested to see how much there is to gain from just improving that - I've had a patch kicking around for a while[1] (also on a rebased branch at [2]), but don't have the means for serious performance testing. > > The hardware is the new D06 which the SMMU with MSIs, Cool! Now that profiling is fairly useful since we got rid of most of the locks, are you able to get an idea of how the overhead in the normal case is distributed between arm_smmu_cmdq_insert_cmd() and __arm_smmu_sync_poll_msi()? We're always trying to improve our understanding of where command-queue-related overheads turn out to be in practice, and there's still potentially room to do nicer things than TLBI_NH_ALL ;) Robin. > it's not D05 :) > > Thanks > Hanjun >