From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mx.groups.io with SMTP id smtpd.web08.32762.1613984809803386791 for ; Mon, 22 Feb 2021 01:06:49 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=MJDVHDqQ; spf=pass (domain: intel.com, ip: 192.55.52.93, mailfrom: eric.dong@intel.com) IronPort-SDR: BClJghQvY/X9MN2QtWobrSOE1oqVVlLuTB8TeYg/lz4DznzPFgyEei1YXFBIgjnCQS29HTDOKw CxrY3AmMTflw== X-IronPort-AV: E=McAfee;i="6000,8403,9902"; a="180935141" X-IronPort-AV: E=Sophos;i="5.81,196,1610438400"; d="scan'208";a="180935141" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Feb 2021 01:06:49 -0800 IronPort-SDR: HN0RppcKXYEGKC3vOJAFnvFZdVPWIOoi3Hu0Vwu8rTsc1do0pQsUku8PS26QZrk4034G73B8+m lFEC5zpPe/Ng== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.81,196,1610438400"; d="scan'208";a="389744154" Received: from fmsmsx606.amr.corp.intel.com ([10.18.126.86]) by fmsmga008.fm.intel.com with ESMTP; 22 Feb 2021 01:06:48 -0800 Received: from fmsmsx608.amr.corp.intel.com (10.18.126.88) by fmsmsx606.amr.corp.intel.com (10.18.126.86) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Mon, 22 Feb 2021 01:06:48 -0800 Received: from fmsmsx603.amr.corp.intel.com (10.18.126.83) by fmsmsx608.amr.corp.intel.com (10.18.126.88) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Mon, 22 Feb 2021 01:06:47 -0800 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2 via Frontend Transport; Mon, 22 Feb 2021 01:06:47 -0800 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.175) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2106.2; Mon, 22 Feb 2021 01:06:45 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GK2EuA1eHXGfWXGmBy0X1dwg8o+Dy6USnBgFUUd4LYx17dGsAa2Ygm7EtEH/J0xSmsxL0XxvsKs2AAa8xyAk9rpPthvdXaCzlpkpYQd1Qtxak0kgQmi56C8H+y2WeWC5kFg7a2j966hmQEL3jTkWRzeniSCxFPxJX6Uuw3TtzwCmUEqouk29hXETT837QDH5faGcPx8oX2ovuR03i32QGpHMi0mcGRA6zVDJWvqMImBkTecsfysm11g45BVruHSeEV49Fx8D+dsJOep7T3p8ws+8AJ7VZiyq6hzi01xgZSGYGLStgCajsC43u+FE5Vb+iTQ6MhwtjvZk2oZ59DSwYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xsl1nc1Y8TaVX1OvZyEVt068SzzrduDvhNx9+mvr+tI=; b=oE7LXJhEE+SaCbQlqav45B/wGhj5t2F8tR6tzeLXrytwvuqgpDoSh6Fp2MNc46Q7ss+sPWc8g+d2YoZBhbN0IfIEA4fDgzMeMHzILDNIx7IXNhX8uGodc9/sIF6Lz3p00b6nJfz9kTRSaemtNrPWnNiI/6+mO0qBlFszLflILOf9U3Wvj4Zp69dAKxl6rgbwrCx4lON+UdszbSi5+DD/Rt9zfCV1VfJyYUxOa2NGlPVK1HmA3bEbce1n8eM+F9rNaaOmX4uwKCETKWrBfZKFrhJXdw+W0FvCxR/buem1F1pSYE24Yijcm5TpIg8jEyMr0ibHcwUwLSgJPqTP3/k6kA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xsl1nc1Y8TaVX1OvZyEVt068SzzrduDvhNx9+mvr+tI=; b=MJDVHDqQjusv6h01Jegm2ulNz24JqAuBlTyVNU1jdu2PJGy2Riq4Fxmo7R/S0gSi/bsrix1xI0sKJDjL9MF2KmXyEho94tcUa7HjoW+xe7Cq9FLu53nJr2N15gffClAyFrdPfZQ1dL5W7rMe9ObnLh9n8w4/bJwZKU04IySzdgc= Received: from CY4PR11MB1272.namprd11.prod.outlook.com (2603:10b6:903:29::9) by CY4PR11MB1319.namprd11.prod.outlook.com (2603:10b6:903:2e::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3846.31; Mon, 22 Feb 2021 09:06:44 +0000 Received: from CY4PR11MB1272.namprd11.prod.outlook.com ([fe80::918c:7df3:f688:d5e9]) by CY4PR11MB1272.namprd11.prod.outlook.com ([fe80::918c:7df3:f688:d5e9%5]) with mapi id 15.20.3868.032; Mon, 22 Feb 2021 09:06:44 +0000 From: "Dong, Eric" To: "Ni, Ray" , "devel@edk2.groups.io" CC: Laszlo Ersek , "Kumar, Rahul1" Subject: Re: [PATCH v3 1/4] UefiCpuPkg/MpInitLib: Use XADD to avoid lock acquire/release Thread-Topic: [PATCH v3 1/4] UefiCpuPkg/MpInitLib: Use XADD to avoid lock acquire/release Thread-Index: AQHW/u4ysG4m4V4v1USHncHYZOiLUqpj9hsQ Date: Mon, 22 Feb 2021 09:06:44 +0000 Message-ID: References: <20210209141634.1999-1-ray.ni@intel.com> <20210209141634.1999-2-ray.ni@intel.com> In-Reply-To: <20210209141634.1999-2-ray.ni@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.102.204.37] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 290e3e65-2548-4665-5bc2-08d8d7112d54 x-ms-traffictypediagnostic: CY4PR11MB1319: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: t+rox1oaxQpzu9CbcIGkdSAiEj4RbEg4gZbESa0+9OSkG9kfmq+XaNJ5ytn0fUssX+4MKR+aWNzmzDQSOEeR64w1EXIsBX6qwvLLsDpDF9DMF5QOXdNFFpMIjVWOc3l3PPSyjvVI+wwkwNePkhDHytc0hiZvUB4es1u1aovEcB5AzSCgx4YqF+1ZjMIRn8VB/fEkQJ71Ccc2/uD4sPJle+VJCbTyKm/nrHIvQregGYzuR6qWHLfv5cQt5Tuv3lApkvFVTuggK/J61GMqWbvKC/cQ6dbIylc1w4J5l9MT8kFsLr6AKKg3R/GL6upAaSgRQohbnrc7VSW6NOB8HU6SRu/3xm/YVBN0blUcGAFKwXs5up1ZzxkSOi7+67rznjuRP3hJpOmEYVw27Tom/dTn6wsXt7DncVmBsLDEwblX1Prx5LAJZGRUjfLIKHRcKmlnFr5y6rXsog5iknxT3DWyusF+6qIxAtEaTAWJwvdR8a98XwptMLYz0rUctmZcGNPLMMsHOYFHfEkNCbNctBvUUg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY4PR11MB1272.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(6029001)(346002)(136003)(39860400002)(366004)(396003)(376002)(66556008)(76116006)(66476007)(33656002)(66946007)(4326008)(19627235002)(86362001)(316002)(110136005)(71200400001)(52536014)(55016002)(7696005)(478600001)(53546011)(26005)(107886003)(6506007)(8676002)(5660300002)(8936002)(2906002)(64756008)(54906003)(186003)(66446008)(83380400001)(9686003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: =?us-ascii?Q?NIz+hZuVUC+2VvWvEk6GzjXbDjmFUxcVQ0/fwz5WiriEtFLQTfkpnpgTamR4?= =?us-ascii?Q?L3qJ2YDmUpsdWrcv6DdPDMsTtpGmx2YVzzaOXP1NeaKEBLUs1dPZLJlq1Nmu?= =?us-ascii?Q?2VaZMoG189TP5F+UsynDi386Pt9C2zbWf3lPi7iwyp8pkabOy7ZlamdA8QuC?= =?us-ascii?Q?IU6IY2xxKRPBiENRXS/rqIhHxT5VqgAWuhQ2f0wgH08ag4khOH8u4So/Uw5c?= =?us-ascii?Q?jiOO2tXDfK34FJG8n1KMHH0YIFLwexk/Z0VcGZv7UE7OM1FsroATx1AUvRZI?= =?us-ascii?Q?Pwv8Khf8jMfZwgc6b3Zgy0r4CZweofCdWsEE8Lj3Hz1Ji6ZP127OAxfYvR6U?= =?us-ascii?Q?czB7+jvyGFq2/xCV/MdRdtIeWLuVL8cXZszob5GzzUIh10qqOlvo6nznhIX1?= =?us-ascii?Q?Uif8DadLFYboxQClgUwe6pVpDIiqQbP7yZymZDrYSY3FFCngCzcPGV9BW6iR?= =?us-ascii?Q?L5vsPtpyDxwD5ysDlAPxY0d8xmiX8il0QIPakOkIuQwJv/7sbkVwd4umF6fi?= =?us-ascii?Q?yZPQkc++DEWLeXTwOFybcWlYGpIv5amDnrr+Vh3SWd6D+l4Rr544zHuaRhzo?= =?us-ascii?Q?iA5iRwTdXBJnFnUJ2BXW1WftKnk9S19yhzocPYk5kPsi2oaBsy8D107CG789?= =?us-ascii?Q?x3SLv8x0cWYP2kDQW1KfM8J8EZOxwdVa9tPPgti3jZ0PEtKQvcScoXi9DYLj?= =?us-ascii?Q?SDDXYzd4cJsrijpOL2JnAhues8GaGix+MkdF+MAWexYyEueUTgWTUIgtQqLD?= =?us-ascii?Q?5trljwpq4Bi45wulJUJZ1WRZc2OsGHw6M0kOI5TuP5DZXwHqfLM5So8Tmu6N?= =?us-ascii?Q?J88JFBTMHJTzlDLTqnVtcS2djt4T1E95/ijBg72l9xurY6j0U98yYMSZiMNC?= =?us-ascii?Q?H88xTpiAzis3J0Qt/06jHcJgCtTtrw+LPP0C6vRI43VanNt73Re9HOuq3n0m?= =?us-ascii?Q?+zgSdZbHZ4NJWOknpJftvCwn0AIk2yBcwISBsVoNNLYZURinbQ84nwOfSniu?= =?us-ascii?Q?Q6j1b//wNuy1CtwWcObj+BmmK7LGmgGTo9Q3/N+AlzIevSuAJ3cIwZcMyjCa?= =?us-ascii?Q?ZvdSKKF9SHcRiIIU6Zub8Rxq0PDF2U8L0bb03E2jotZV7HvUSvy/ZAcy8jEn?= =?us-ascii?Q?KBNDjn4vJNKjaT1XLR38uwU8jWwZNRXJEStAfiTo0RfU2kWSOuYlhqFZhJeS?= =?us-ascii?Q?2iiZZYT4AZpTcpENOSJvYYmINgNFQPnOlaqCsdaE1Zcl/Wq2QBbgYYTnZVwK?= =?us-ascii?Q?x2J6T37DUfBupdCHwumcmIUIht/ehpCoInOYjexXXKa5nPEZ1jf7QfDmKg+T?= =?us-ascii?Q?uMFZsSfVbCvT0A0ktZBtaVTM?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY4PR11MB1272.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 290e3e65-2548-4665-5bc2-08d8d7112d54 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Feb 2021 09:06:44.7354 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: /++q3fQJ2obrlI0FqAUqO65KoggL6WVD5i5GxUK48eR13dHn6MBLPF5BVIzm1G8XuEjn5nVnyD5CmxTkdk3e7g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR11MB1319 Return-Path: eric.dong@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Eric Dong -----Original Message----- From: Ni, Ray =20 Sent: Tuesday, February 9, 2021 10:17 PM To: devel@edk2.groups.io Cc: Dong, Eric ; Laszlo Ersek ; Kum= ar, Rahul1 Subject: [PATCH v3 1/4] UefiCpuPkg/MpInitLib: Use XADD to avoid lock acquir= e/release When AP firstly wakes up, MpFuncs.nasm contains below logic to assign an un= ique ApIndex to each AP according to who comes first: ---ASM--- TestLock: xchg [edi], eax cmp eax, NotVacantFlag jz TestLock mov ecx, esi add ecx, ApIndexLocation inc dword [ecx] mov ebx, [ecx] Releaselock: mov eax, VacantFlag xchg [edi], eax ---ASM END--- "lock inc" cannot be used to increase ApIndex because not only the global A= pIndex should be increased, but also the result should be stored to a local= general purpose register EBX. This patch learns from the NASM implementation of InternalSyncIncrement() to use "XADD" instruction which can increase the gl= obal ApIndex and store the original ApIndex to EBX in one instruction. With this patch, OVMF when running in a 255 threads QEMU spends about one s= econd to wakeup all APs. Original implementation needs more than 10 seconds. Signed-off-by: Ray Ni Cc: Eric Dong Cc: Laszlo Ersek Cc: Rahul Kumar --- .../Library/MpInitLib/Ia32/MpFuncs.nasm | 20 ++++++------------- UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm | 18 ++++++----------- 2 files changed, 12 insertions(+), 26 deletions(-) diff --git a/UefiCpuPkg/Library/MpInitLib/Ia32/MpFuncs.nasm b/UefiCpuPkg/Li= brary/MpInitLib/Ia32/MpFuncs.nasm index 7e81d24aa6..2eaddc93bc 100644 --- a/UefiCpuPkg/Library/MpInitLib/Ia32/MpFuncs.nasm +++ b/UefiCpuPkg/Library/MpInitLib/Ia32/MpFuncs.nasm @@ -1,5 +1,5 @@ ;-------------------------------------------------------------------------= ----- ;-; Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved= .
+; Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.<= BR> ; SPDX-License-Identifier: BSD-2-Clause-Patent ; ; Module Name:@@ -125,= 19 +125,11 @@ SkipEnableExecuteDisable: add edi, LockLocation mov eax, NotVacantFlag -TestLo= ck:- xchg [edi], eax- cmp eax, NotVacantFlag- jz = TestLock-- mov ecx, esi- add ecx, ApIndexLocation- = inc dword [ecx]- mov ebx, [ecx]--Releaselock:- mov = eax, VacantFlag- xchg [edi], eax+ mov edi, esi+ = add edi, ApIndexLocation+ mov ebx, 1+ lock xadd dword= [edi], ebx ; EBX =3D ApIndex+++ inc ebx = ; EBX is CpuNumber mov edi, esi add = edi, StackSizeLocationdiff --git a/UefiCpuPkg/Library/MpInitLib/X64/Mp= Funcs.nasm b/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm index aecfd07bc0..5b588f2dcb 100644 --- a/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm +++ b/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm @@ -1,5 +1,5 @@ ;-------------------------------------------------------------------------= ----- ;-; Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved= .
+; Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.<= BR> ; SPDX-License-Identifier: BSD-2-Clause-Patent ; ; Module Name:@@ -161,= 18 +161,12 @@ LongModeStart: add edi, LockLocation mov rax, NotVacantFlag -TestLo= ck:- xchg qword [edi], rax- cmp rax, NotVacantFlag- j= z TestLock-- lea ecx, [esi + ApIndexLocation]- inc = dword [ecx]- mov ebx, [ecx]+ mov edi, esi+ add = edi, ApIndexLocation+ mov ebx, 1+ lock xadd dword [edi]= , ebx ; EBX =3D ApIndex+++ inc ebx = ; EBX is CpuNumber -Releaselock:- mov rax, VacantF= lag- xchg qword [edi], rax ; program stack mov edi,= esi add edi, StackSizeLocation--=20 2.27.0.windows.1