Received: by 10.223.185.116 with SMTP id b49csp1382569wrg; Fri, 23 Feb 2018 17:51:33 -0800 (PST) X-Google-Smtp-Source: AH8x2258YiT3yypdCqk+WkgvBF+6O9rmVPPdYDZ5xLvALDBVjJDvkdsfa4384nnVIxBpI66M4lUm X-Received: by 2002:a17:902:d68a:: with SMTP id v10-v6mr3453179ply.206.1519437093298; Fri, 23 Feb 2018 17:51:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519437093; cv=none; d=google.com; s=arc-20160816; b=tLK7LgATjgdyMKzdI+aH00seSMDNRIostyE9zy4Eum+f9W4W6RIkKB9cBYnbloVAo3 0uNeWAZfborUzbe3MmzIbissEmQ6mOiIbiawX31JU8wOFMYnIphbBE4N0mzke8ZzzAxG Ngbo4P2PZ0WoXAwiZqICKelWmAJKZL3KxnOzgQCSheyOQeS06Tgs7o3kJrr2HNPVgwKk Jiq8tvaEtlPWpVuDoDMhGid5/7R7XXAyRCg1xXBjwMbDFn9HGGSLfpkNBtwVMbK2pfxD IujF+cqQSLcR4zhnWm7O9sYK+1LaQpitb+OW2hnXh6qFRky83v5ODowzlF67pMFt9IvR ubdA== 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:cc:references:to:subject:arc-authentication-results; bh=eY1jVC6di2vT0HBeg1JD5pp/cy6qJFfYM7N5fSEyC8M=; b=hnC+ELIAZunpn7yKa9/8ZuX23gyqmkLW3OBrzzcBr7olSLwxTh4qCoZdCItqXyQy2+ GK4O1C+cds3pUuvS63V1E5sbrHIe/xS5/OI3qLEidqbRvSpb/TZb4GiZ7r/xL9Sow9lb cbEoV6Ii6SxDB2uQ5agjsjgJzh+UemLSpGXWlshgqjmrN4p87MmQPZxAopL0Ebs/cNz5 oogq6/be1mFi6hGkN5MbIh1/CFJVae7lB97YsuGOtuB9maaAWByLqN159d/+i5PIL8pp 5HUuehuf87glXRdU+Xr10upJygU1Nqs6Bi0iYXs5YP6VmP4gpG9hDLkcXPa6LY2m00ER Sd/g== 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 89-v6si2669654pld.729.2018.02.23.17.51.19; Fri, 23 Feb 2018 17:51:33 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752571AbeBXBtj (ORCPT + 99 others); Fri, 23 Feb 2018 20:49:39 -0500 Received: from mga14.intel.com ([192.55.52.115]:24455 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751873AbeBXBti (ORCPT ); Fri, 23 Feb 2018 20:49:38 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 23 Feb 2018 17:49:38 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.47,385,1515484800"; d="scan'208";a="33201594" Received: from hsujosep-mobl.amr.corp.intel.com (HELO [10.252.132.243]) ([10.252.132.243]) by fmsmga001.fm.intel.com with ESMTP; 23 Feb 2018 17:49:37 -0800 Subject: Re: [RFC][PATCH 00/10] Use global pages with PTI To: Linus Torvalds References: <20180222203651.B776810C@viggo.jf.intel.com> Cc: Linux Kernel Mailing List , Andrea Arcangeli , Andrew Lutomirski , Kees Cook , Hugh Dickins , =?UTF-8?B?SsO8cmdlbiBHcm/Dnw==?= , the arch/x86 maintainers , namit@vmware.com From: Dave Hansen Message-ID: <7e81fb89-5908-7d31-9225-defc48dbfa41@linux.intel.com> Date: Fri, 23 Feb 2018 17:49:37 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 02/22/2018 01:52 PM, Linus Torvalds wrote: > Side note - and this may be crazy talk - I wonder if it might make > sense to have a mode where we allow executable read-only kernel pages > to be marked global too (but only in the kernel mapping). We did that accidentally, somewhere. It causes machine checks on K8's iirc, which is fun (52994c256df fixed it). So, we'd need to make sure we avoid it there, or just make it global in the user mapping too. > Of course, maybe the performance advantage from keeping the ITLB > entries around isn't huge, but this *may* be worth at least asking > some Intel architects about? I kinda doubt it's worth the trouble. Like you said, this probably doesn't even matter when we have PCID support. Also, we'll usually map all of this text with 2M pages, minus whatever hangs over into the last 2M page of text. My laptop looks like this: > 0xffffffff81000000-0xffffffff81c00000 12M ro PSE x pmd > 0xffffffff81c00000-0xffffffff81c0b000 44K ro x pte So, even if we've flushed these entries, we can get all of them back with a single cacheline worth of PMD entries. Just for fun, I tried a 4-core Skylake system with KPTI and nopcid and compiled a random kernel 10 times. I did three configs: no global, all kernel text global + cpu_entry_area, and only cpu_entry_area + entry text. The delta percentages are from the Baseline. The deltas are measurable, but the largest bang for our buck is obviously the entry text. User Time Kernel Time Clock Elapsed Baseline (33 GLB PTEs) 907.6 81.6 264.7 Entry (28 GLB PTEs) 910.9 (+0.4%) 84.0 (+2.9%) 265.2 (+0.2%) No global( 0 GLB PTEs) 914.2 (+0.7%) 89.2 (+9.3%) 267.8 (+1.2%) It's a single line of code to go from the "33" to "28" configuration, so it's totally doable. But, it means having and parsing another boot option that confuses people and then I have to go write actual documentation, which I detest. :) My inclination would be to just do the "entry" stuff as global just as this set left things and leave it at that. I also measured frontend stalls with the toplev.py tool[1]. They show roughly the same thing, but a bit magnified since I was only monitoring the kernel and because in some of these cases, even if we stop being iTLB bound we just bottleneck on something else. I ran: python ~/pmu-tools/toplev.py --kernel --level 3 make -j8 And looked for the relevant ITLB misses in the output: Baseline > FE Frontend_Bound: 24.33 % Slots [ 7.68%] > FE ITLB_Misses: 5.16 % Clocks [ 7.73%] Entry: > FE Frontend_Bound: 26.62 % Slots [ 7.75%] > FE ITLB_Misses: 12.50 % Clocks [ 7.74%] No global: > FE Frontend_Bound: 27.58 % Slots [ 7.65%] > FE ITLB_Misses: 14.74 % Clocks [ 7.71%] 1. https://github.com/andikleen/pmu-tools