From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753113AbcHQUIQ (ORCPT ); Wed, 17 Aug 2016 16:08:16 -0400 Received: from mail-co1nam03on0067.outbound.protection.outlook.com ([104.47.40.67]:6656 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752545AbcHQUIO (ORCPT ); Wed, 17 Aug 2016 16:08:14 -0400 X-Greylist: delayed 3579 seconds by postgrey-1.27 at vger.kernel.org; Wed, 17 Aug 2016 16:07:49 EDT Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Christian.Koenig@amd.com; Subject: Re: RFC: Petition Intel/AMD to add POPF_IF insn To: Denys Vlasenko , Ingo Molnar , Andy Lutomirski , Dan Williams , Alex Deucher , "Rafael J. Wysocki" , Vinod Koul , "Johannes Berg" , Sara Sharon , "Adrian Hunter" , Linus Torvalds References: CC: , LKML From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: <64bd8281-aeb4-391b-90c6-3f5e44f0ce07@amd.com> Date: Wed, 17 Aug 2016 19:30:54 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [2a02:908:1251:7981:a42f:f399:5eb6:a11c] X-ClientProxiedBy: DB5PR10CA0041.EURPRD10.PROD.OUTLOOK.COM (10.165.4.179) To CY4PR12MB1304.namprd12.prod.outlook.com (10.168.168.141) X-MS-Office365-Filtering-Correlation-Id: 8f87363c-2208-428d-d2db-08d3c6c44571 X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1304;2:2bD75Vjfc1w3BqyMY4XxagHxDSp0ZxhFnE2QA8GpFzWHJBed7uj8jdjhX5r6L/PtHvywWLXSu23bZz8//PAf1l6hZGdKgvG4NwXmQQ1fIllKL014a9fJadTZDxdLh29hUzqf9BF9MFIavFvWzPVCIkMxByKX5W5ho/rThJR7b0EECbv3nL0sEAqJTt5WzMgh;3:rVFLVyS7Wovcg0pyv0BhelD6f2jQfP1T0yBH9YvO9kftf18kO64vUGnKnNho3QirPdVZQTWT+tCt79elKRIgK4OI5ugpdWsX/HW5+L/ZK7wD4P93s8kvkID1FvfyUX/m X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY4PR12MB1304; X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1304;25:akfiQyBPcRQrP47vQscFNIm2ldA/GpTZvxsVEsIXP8CrnM3qhm1KW7L/ERN4gtummJvhWR8QkyrUDsP5YY24qyRAOytdNmBwyRG8BYrU2wGo4qMrSRfMYAO27KbyJ0TCo/rc2yS/WRrn/ZPI8aGmKsGHaRWL8CGHTND+PNcCKWygL/QcNLno5tb42VVBTzCownxuiH3LYIzeGlHjcuGvJ6jFfuM6l2uE7EawZPyYoRA7W4LA/GAiQQ9wtVa3p9mEE4bRGevGoLNr/ZAGVds1zZF8n8kSURXl0dEroVsmmObTGW3CRDW5CzwXgUFxqZHIb3OWcEwV/xPZiN2O6dZHRO3++n2v7JkbnVDE1TGrFKFplnAlpt98nen/0odk63Pgz+SnSMoyjz82leBwFyBrEDxG2qemHlkEY4fkIE2PuJMoUx8KH/GRv01djh/D4l8BUkraxwHb2cDidpBh8x/TUj2UPIVCa4r14IyrhceM2Rptjl/hyCXPuDFkgOdhIMRATxWy/YNEg0kB9ML20XMomMeqZdsslxkTJbnHVa5C1AjP+C0A5kC6g+jmfQrK7/mpV/X5BcvjZHtg8fLFIkxX8sPmaKV1KZULAM9f1nzPhRwDti059I8kL3TSqK+vdYWuf6tx4jEnUs/mYTcZlkw3sYnVJmdNFLUjvVuDAfJu9d1aMFIwwYHsi24GBD5QRhuYFVkP6c6iaOlG1mKWxJYkk2aBavP4AXFk8Wwz104bzhuYiRGnKVuTDNKOIL8KnqfXFLPowuVDS4y5AoR9Gijuw717PRw1icC22MjQTvT5shU3NBX3CfowLZmlk8Aaqdzn7GRvpcsu+85q0siIKL6nK/MM9+PQCCf/jdHIC93e+88= X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1304;31:qnaEeQxbMK30+N5HbcyV/O0/kKS0te82SWVmWb7JVHv8IsDG/70TmFajiPCphLMaD8FAYBZ6DWS3jxmxZRnFWFV6nFp2nP50DFv077RJGiRpiR1X2UcsCCF1Qre2pOnBG+uO2iMUkWPOjcTPnHIHHx/tX4Bn6leEtcxmVzY9lxiJkfCqGUu7jSRvUcxg7mKKsESLaII/7z7qeXZMLpcNzFQEl6po1NX5PFMqq1MNzpI=;20:szMw5lv7rxjcLl5v0SRKQZS+oDDmjhnXE9PHPVhsuDdOjfdReXR/UmfpsG2haCqzTp6EqGNNm/iiG/N6noQDh7NHE/n3evktXrDlrgBDXepZsaNSowLkIXdgCZGDNXbX5TcpLdctimZSxPsr2QsnJa4fOvVCpqKbZpVHL6Z/B4wQvrx3HGdxYaQOOiOdESGMC8lSC2c1WouvK5dteMLDaOOuwUsn/KXlg12BkffPxfSnKSZz9iNPdkGaiNbNfYmAyyB+aP/eCAqaoHLXRNmxXhGH1VJuzSBpYTv9/SpgMSNj9uXjiCcEbL0T/Pn49WtSRPjvRy9dOaLskIjPwF1nTSKnvnhotg/OcI6E19nPIfTkuRdR5gzY2CHEfIeP6GhB9jpBW0h2eWK83O2WAbViQvwsVlqq1naFISZ6eNLBPNNNTMG0xag3nZOYPd32e1dvmJbE6A1O8BCMhX0afCicF+NeDinIQIwB9zpvI6iPdZ9hkkm1DMOnx3i0/hVf0c7R X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(788757137089); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6055026);SRVR:CY4PR12MB1304;BCL:0;PCL:0;RULEID:;SRVR:CY4PR12MB1304; X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1304;4:qVYczRwN3Ao7QD3m/zO9dNYp5XC8tA8rGtJSwLtg6lLvKKdGS79n9hBA0vgNmRai0H8ztAeXX0qjxCp1p1c0rlxAqvHr34w6JBX5Ur7pldNiQUdStw76fyfEoQZsT1RYI55EauHFTJC2viXckmjX+5m64lSeFbo8gUrsw3PnPea13hsCJAJOVMidsM3VztFcR76Ibg+If4Djp2ZaWqHro9xawUxcm22cFv6pxsoJE0Bz04+wGjnbapU+XZ7Z5J+AiCW4NTRbxLL2O+U/GXljOseYZq+O/K2pnUceKvSu2sySzYAn3DGNROS1sfFgMyOYfpgcAdBcibegJ32gKwyOfWKOkSKXKParjlFjOjPIy50ErEYGf7RONQItWwsnnBEvG0uApaLOTlJ2rNP4u159BbesopRAE5YjMJnviwV50ePYVrDr+5KK++mKSuVuoqbO X-Forefront-PRVS: 0037FD6480 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(7916002)(24454002)(199003)(189002)(77096005)(81166006)(68736007)(97736004)(19580395003)(81156014)(7416002)(36756003)(19580405001)(31696002)(586003)(92566002)(7846002)(42186005)(8676002)(5001770100001)(33646002)(1706002)(105586002)(2950100001)(230700001)(7736002)(4001350100001)(305945005)(106356001)(31686004)(4326007)(15975445007)(47776003)(83506001)(50466002)(65806001)(23676002)(65956001)(64126003)(86362001)(561944003)(189998001)(101416001)(76176999)(2906002)(50986999)(6116002)(54356999)(65826006)(921003)(3826002)(1121003);DIR:OUT;SFP:1101;SCL:1;SRVR:CY4PR12MB1304;H:[IPv6:2a02:908:1251:7981:a42f:f399:5eb6:a11c];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjEyTUIxMzA0OzIzOjBWU0dMUTRBemVFbnVxUzFZNnViQWtHN25F?= =?utf-8?B?R00xQXpBbEZkRGFlY2hrckt4b1hIYzQ5R2JRck5wbEV0SGVCWGxMVDNSS09n?= =?utf-8?B?OUFpK3ZFV2dhQUJOL3VoNkFhaUY4VkZwdmZrRVhIaWp5dmllTm5uMGd2M3dU?= =?utf-8?B?T3pKRVlkVE1xV3U4QjRlbzV5M0NXNERTQUd0UU03elFieWtKWUw5c0U2K1Fl?= =?utf-8?B?eTVRbTZLUk84SmhEVlQvNkpTVHNTU2hnRVZhS2JoY2ZJVEUvMUtqU1FiMmZQ?= =?utf-8?B?RHNBMnhvcVdyV0ZoYUQ5cHFMMXQzR0RuZG5TODdSdTRpMEU0NkpJNGEyRnpR?= =?utf-8?B?MmJtcDgraUcxTHVuOVJYU1VFTkxSQTNVMzZIcVp6OUFzQ0d6ZEpqOWxrZGp2?= =?utf-8?B?NGNBdFpVeUZkeWUzcFpYdklKOUZhWGFuemg4VzliZ3BSTGl4Sjk5Y2dFNTB5?= =?utf-8?B?bUo5UUREeWl1MzlLZVR2MHhZemN2a0loNlUzSlUrOS9IdExmaWtjQ0JQVWVT?= =?utf-8?B?Y2VuNUtyY0s5aWNtY2dmL2FGb0hYWlhOa2pLU0lLRFVEN0RBeXNKZ1dCQjQz?= =?utf-8?B?aWVJVVBqNEVEV1V3Wnc4cXArK3FwVU1TU0Z1em9OYVV1dE9LZlE0WkFNa1JY?= =?utf-8?B?UGhXbXovQUFZUWdEUGozN1F0cnFYWFBDaU9vMXhTTEhuNEltdGVxN1pVOGlU?= =?utf-8?B?QzFNTnAvNitmc2hhd05lYXBMUUVIVE9EeDRTVXdnVG53ZTRhVVI0QVkxQkZ4?= =?utf-8?B?MUJjUml0WFlQdUw4UHdhTjdjc3lhbTcwZUJBQWhYM25BVForUkdOSWV2aHlv?= =?utf-8?B?MXpocUVrZUZOa052VzZDTHdEZS80b0d1MjBkdnRwUU5vNGNCWkl3bmNIQ1pF?= =?utf-8?B?ak5LM2c3NmZhQlpuOHNoaTBBZzgzL08wMWUvdlBYaUtyNlZGWFVjSVU4Lzc3?= =?utf-8?B?UE44U1J4dzVYTDQwZ1hpMlhRM25maFEzQ3h0Sy9tNCs3U2dnZVZLODQ2bkoy?= =?utf-8?B?bnVwd1ZpOUhseDZoMXNubGxaTkN2dmM3eFp0Y1I4bUtCd0pZNzEzSWh1eldl?= =?utf-8?B?ZFhLT2F1R0YvZHQ3RVFUeDVGTTJIWnRSekVxS0Q0OWlxVlRhMzV1NjI1T3pJ?= =?utf-8?B?eW1tNWdPZVZxdzJvNXFWVDYzWmlrYkFWN0g5d01BdGV4NDR3aytQTGNjbVNG?= =?utf-8?B?R0I0RDkvMnViWlpuNGZOMUUyT0FuM0V6VWhqdVY2M1F4QTZQenUveXlPY0dE?= =?utf-8?B?SnV6Q1dOcS95am5LVU5OWmV0UU9tMW94L2RFSFJEcjlsVStNSEZ4ZEptL2tu?= =?utf-8?B?REx6ZU9kc0l0NzZId0JFQzY0OFRxR21QRUFvVExOdmkvTThLOHFxZmZmL015?= =?utf-8?B?R2ZBS205eUU1czEyNmtQY1dmaGg1UzMwWFJlQy9wMmxVYnVCMVEwNnZTZHcv?= =?utf-8?B?aHV4SmRWQkswcFpqU1czWkNBTE1XLytHMFV4VkN0RTROaFhxQ1g1RU56aXZV?= =?utf-8?B?cGxBbTM5TWlrWmh2UGg5RDljeUR1d1FnVTg1Q29sODdsbndxZ1RlVXIvcGpK?= =?utf-8?B?WGU2ODJaQ2Q3eVQxWlk5ZU1OYTJxZmJxcEJLT0t2UTRockxoaUVSUGFoejVS?= =?utf-8?B?cGJIMDVJU2N4bTNSSitSa3BpNmQxUmNiMyswNU0wZ1dyUWJiR0ZMQ0cvV2Q5?= =?utf-8?B?VDV5TTBubXg1L2w5dWlTYlFLTkhteDdjMm85aFlDWHBOVlh1QnlXVU1lMHRK?= =?utf-8?B?UlhPWTk1NVQzdFg4UUxGYUpYMHBIejlYSFFoa3FNdUM4Q3FxZ3JzZVlYMm96?= =?utf-8?Q?qeke2q9uwcbu8?= X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1304;6:3QLzCqkC3FYCAjIwfFUUWib08dzbJc0g2KvJSxuwnnIA+pMwv/tColV3kVMfSjApJGIhqxUGYmFFVhxMc56hkMOtD/fClyvIOPRueVmY8klLAKsFQM9qWjZYcTHUCiH2zTldXFXraTktGTa+P0UmS7PgWZ3ehO9ctPUJgvGGJcq6bGJLG49vk2FUzDto6CfEcPO9noLPXArVn4fiaIY8GymYkO5m9c2SCnki3aOaV27usd0L1Q88o8ErYYp7GPWiDYFRe9N3gwdBQZYhX+rMPpXC06u9Az7fQXJLLNjaKo8DERrcvv5H2zbU1ttAiyBmf1FSo6zGwpvZXikSK+HBNA==;5:A1BpNJQmlOlwk0dx3xAYt4OTkbA8XM9Zi+yBYPHx/O2VcL2Xw9ozeX/Ple2/uMw/r1+Z6s63y0eY4yexwYIVmTPpKIsqlBWTcxXFfF9/SH3H7SLamfBxBV48FieA2H1EMuxDhaPYs/Apv+gOSpepaw==;24:br0UKa3edpZOrFa5XssI2FfgK2ghfvT/QWQDV5PlM/fryaCIorynIjMDk692H59bojIwHZExkNQfrrHEgB4myJdKhlGpDOfIdqlVYIYCkKU=;7:r77Xgf4DWgk7lRzO1QbdDUMpPotA5TzQxY0wSGIALSJqpCLwPx7n4zMsk8vsWr5HtAbfKXwwTtVtA01PTjRQ8S9MGR7FLGKZgfpTnsv93foiF/X01M00cSpUdtaqv4FHTGjYwui6K25D8DlQgA+oFXFKTZouBL5ftKFRxQAI7p3jM6EynW7YEHd8dI4Wf+3PpBqdpCAGc276GmkobDuLkneZ/KUWPHHpjprtqm8IFAIZjws4W3EZvy3tmummDn0x SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1304;20:U0cShk9poDrvqA/h8aXLradN3HDR6ADU4lrAIg83lo0OOMR/C1Nm0WAcCG71YS4SUaYh41oubFLPCPXSOzhIN3YccvVrdCrha7drZqQUt6KmlIe8aAdm1v9IRMC4gxWc6cPfqBDefz+9PtwHbbwN3W8zh9K2FYi2e5dc/zlR0gcPFmjW87fx4rfLXhdBSIMUy4Nh1NOicmekpbjE7jZRD2t/Gypn4CemEopTZeMaslNClMpGkpK4dz/RTOUw+pf0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2016 17:31:04.6128 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1304 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Well first of all you actually CCed AMDs graphics developers. So Alex and I can't say much about CPU optimizations. Additional to that a comment below. Am 17.08.2016 um 19:20 schrieb Denys Vlasenko: > Last year, a proposal was floated to avoid costly POPF. > In particular, each spin_unlock_irqrestore() does it, > a rather common operation. > > https://lkml.org/lkml/2015/4/21/290 > [RFC PATCH] x86/asm/irq: Don't use POPF but STI > > * Andy Lutomirski wrote: >> > Another different approach would be to formally state that >> > pv_irq_ops.save_fl() needs to return all the flags, which would >> > make local_irq_save() safe to use in this circumstance, but that >> > makes a hotpath longer for the sake of a single boot time check. >> >> ...which reminds me: >> >> Why does native_restore_fl restore anything other than IF? A branch >> and sti should be considerably faster than popf. > > > Ingo agreed: > ==== > Yes, this has come up in the past, something like the patch below? > > Totally untested and not signed off yet: because we'd first have to > make sure (via irq flags debugging) that it's not used in reverse, to > re-disable interrupts: > local_irq_save(flags); > local_irq_enable(); > ... > local_irq_restore(flags); /* effective local_irq_disable() */ > I don't think we have many (any?) such patterns left, but it has to be > checked first. If we have such cases then we'll have to use different > primitives there. > ==== > > Linus replied: > ===== > "popf" is fast for the "no changes to IF" case, and is a smaller > instruction anyway. > ==== > > > This basically shot down the proposal. > > But in my measurements POPF is not fast even in the case where restored > flags are not changes at all: > > mov $200*1000*1000, %eax > pushf > pop %rbx > .balign 64 > loop: push %rbx > popf > dec %eax > jnz loop > > # perf stat -r20 ./popf_1g > 4,929,012,093 cycles # 3.412 > GHz ( +- 0.02% ) > 835,721,371 instructions # 0.17 insn per > cycle ( +- 0.02% ) > 1.446185359 seconds time > elapsed ( +- 0.46% ) > > If I replace POPF with a pop into an unused register, I get this: You are comparing apples and bananas here. The microcode path in the CPUs will probably through away the read if you don't actually use the register value. Regards, Christian. > > loop: push %rbx > pop %rcx > dec %eax > jnz loop > > 209,247,645 cycles # 3.209 > GHz ( +- 0.11% ) > 801,898,016 instructions # 3.83 insn per > cycle ( +- 0.00% ) > 0.066210725 seconds time > elapsed ( +- 0.59% ) > > > IOW, POPF takes at least 6 cycles. > > > Linus does have a point that a "test+branch+STI" may end up not a > clear win because of the branch. > > But the need to restore IF flag exists, it is necessary not only for > Linux, but for any OS > running on x86: they all have some sort of spinlock. > > The addition of a POPF instruction variant which looks only at IF bit > and changes > only that bit in EFLAGS may be a good idea, for all OSes. > > I propose that we ask Intel / AMD to do that. > > Maybe by the "ignored prefix" trick which was used when LZCNT insn was > introduced > as REPZ-prefixed BSR? > Currently, REPZ POPF (f3 9d) insn does execute. Redefine this opcode as > POPF_IF. Then the same kernel will work on old and new CPUs. > > CC'ing some @intel and @amd emails...