Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp3382275imu; Mon, 17 Dec 2018 19:28:21 -0800 (PST) X-Google-Smtp-Source: AFSGD/XpbmihUs8Yp0EcJPfU8GUPo0TWxdsOv+7hJ+BI+B6fQkJPZm1LkvYbZwV8JH/lXxCb2zZ6 X-Received: by 2002:a63:184a:: with SMTP id 10mr13069531pgy.81.1545103701737; Mon, 17 Dec 2018 19:28:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1545103701; cv=none; d=google.com; s=arc-20160816; b=fCMc0j2azwVuNfNj7XEehVjkRxMoIIgE1Ncbj1HmDBl1fTw930ZEcD3jGWHCP2T5wZ e8DsErJaov+CBaq1H05Aq96l0LKa+wDyXtmHH1aKX4oyrgelNIY0Nviy4pjbXx2HyL7V pqkju7SiHmqFsNgU958mmt+sGqutEQ3CvTUkiBRuKlzQVorMJ5I6RgtBuTfODMG+Flc3 CeaTvz7OstjSYAwuB7mY2j845rB+P2Q8Ay4vC+WO6TtYuo8y6cPUyHoZLCsrkrdZ1Vz1 3OvGlSc1dZckFJDRcwt2Te1gvPaypODx/Whf2c/441snfAXSmdtav8GnKgH5aEL6hFyh fxfA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:organization:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=IWPPDZ6UbgLB1bOhj9Vb7nK3ImaSZipYM7ENd5w+zLk=; b=I/uluWVmAIkFCc+kGBFialrbPXH41470U3hz1QU8sMjj4lZGH3OgiTNy2qXq8KM7c/ upmZCyy4jstwVUFEqIzxZxwYsntMfYX9Z3C15h47NJrOJujfz7Oa3SUSZtUlA8Y9IRjX aXGgPjyNafV8vMQRuhWaNZE4qr6dQTingUFrLmEdJj8SSCjFIVUplWWX4LezyFerUl0R zxb0NMZ9I+7JeBD5TObd42NlcqnHtGVHUF8yRahNGLOUdDhF88oYq7x000SCJlulNqfs GVCmyAmQHqTXaqqxo03rAYadd/ldP0K8vadu9Wm3nZwPETV05qfw/+ghhGuwMh350iLz IWig== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w2si12037440pgs.264.2018.12.17.19.28.04; Mon, 17 Dec 2018 19:28:21 -0800 (PST) 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726503AbeLRD1O (ORCPT + 99 others); Mon, 17 Dec 2018 22:27:14 -0500 Received: from mga14.intel.com ([192.55.52.115]:21605 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726305AbeLRD1O (ORCPT ); Mon, 17 Dec 2018 22:27:14 -0500 X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Dec 2018 19:27:13 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,367,1539673200"; d="scan'208";a="303033774" Received: from zhangxi4-mobl5.ccr.corp.intel.com (HELO localhost) ([10.249.254.207]) by fmsmga006.fm.intel.com with ESMTP; 17 Dec 2018 19:27:03 -0800 Date: Tue, 18 Dec 2018 05:27:02 +0200 From: Jarkko Sakkinen To: Sean Christopherson Cc: Andy Lutomirski , Dave Hansen , X86 ML , Platform Driver , linux-sgx@vger.kernel.org, nhorman@redhat.com, npmccallum@redhat.com, "Ayoun, Serge" , shay.katz-zamir@intel.com, Haitao Huang , Andy Shevchenko , Thomas Gleixner , "Svahn, Kai" , mark.shanahan@intel.com, Suresh Siddha , Ingo Molnar , Borislav Petkov , "H. Peter Anvin" , Darren Hart , Andy Shevchenko , "open list:X86 ARCHITECTURE (32-BIT AND 64-BIT)" Subject: Re: [PATCH v17 18/23] platform/x86: Intel SGX driver Message-ID: <20181218032702.GA2903@linux.intel.com> References: <20181116010412.23967-1-jarkko.sakkinen@linux.intel.com> <20181116010412.23967-19-jarkko.sakkinen@linux.intel.com> <7d5cde02-4649-546b-0f03-2d6414bb80b5@intel.com> <20181217180102.GA12560@linux.intel.com> <20181217183613.GD12491@linux.intel.com> <20181217184333.GA26920@linux.intel.com> <20181217222047.GG12491@linux.intel.com> <20181218013918.GC333@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20181218013918.GC333@linux.intel.com> Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Dec 18, 2018 at 03:39:18AM +0200, Jarkko Sakkinen wrote: > On Mon, Dec 17, 2018 at 02:20:48PM -0800, Sean Christopherson wrote: > > The only potential hiccup I can see is the build flow. Currently, > > EADD+EEXTEND is done via a work queue to avoid major performance issues > > (10x regression) when userspace is building multiple enclaves in parallel > > using goroutines to wrap Cgo (the issue might apply to any M:N scheduler, > > but I've only confirmed the Golang case). The issue is that allocating > > an EPC page acts like a blocking syscall when the EPC is under pressure, > > i.e. an EPC page isn't immediately available. This causes Go's scheduler > > to thrash and tank performance[1]. > > I don't see any major issues having that kthread. All the code that > maps the enclave would be removed. > > I would only allow to map enclave to process address space after the > enclave has been initialized i.e. SGX_IOC_ENCLAVE_ATTACH. Some refined thoughts. PTE insertion can done in the #PF handler. In fact, we can PoC this already with the current architecture (and I will right after sending v18). The backing space is a bit more nasty issue in the add pager thread. The previous shmem swapping would have been a better fit. Maybe that should be reconsidered? If shmem was used, all the commits up to "SGX Enclave Driver" could be reworked to the new model. When we think about the swapping code, there uprises some difficulties. Namely, when a page is swapped, the enclave must unmap the PTE from all processes that have it mapped. I have a one compromise solution for the problem above: make enclaves shared BUT mutually exclusive. When you attach an enclave it gets detached from the previous process that had it. This would still fully implement the daemon example that Andy gave in earlier response. /Jarkko