From nobody Thu May 2 03:56:07 2024 Delivered-To: importer@patchew.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Authentication-Results: mx.zoho.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org; Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 149494520057341.40689632085093; Tue, 16 May 2017 07:33:20 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 3DFE121A16EED; Tue, 16 May 2017 07:33:16 -0700 (PDT) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 525EA21A16EE6 for ; Tue, 16 May 2017 07:33:14 -0700 (PDT) Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 16 May 2017 07:33:13 -0700 Received: from shwdeopenpsi068.ccr.corp.intel.com ([10.239.9.20]) by orsmga004.jf.intel.com with ESMTP; 16 May 2017 07:33:12 -0700 X-Original-To: edk2-devel@lists.01.org X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.38,349,1491289200"; d="scan'208";a="88002176" From: Star Zeng To: edk2-devel@lists.01.org Date: Tue, 16 May 2017 22:33:05 +0800 Message-Id: <1494945185-34504-1-git-send-email-star.zeng@intel.com> X-Mailer: git-send-email 2.7.0.windows.1 Subject: [edk2] [RFC] PCD: Database size optimization for multi-SKU X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Michael Kinney , Liming Gao , Star Zeng , Tim Lewis MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" - Requirement Reduce PCD database size for multi-SKU case to save image size at build tim= e and memory resource at boot time. - Current limitation When multiple SKUs are enabled, the full set of PCD values for all SKUs wil= l be generated into PCD database, and HOB will be created for the PCD database, the HOB will consume much mem= ory resource when many SKUs are specified, but the HOB length and pre-memory phase memory resource are limited. - Proposal BaseTools can generate the optimized PCD database to save the image size at= build time, the optimized PCD database layout will be like below, the PCD database will= be composed of the full default SKU data(PCD_DATABASE_INIT) and the non-default SKU delta data(PCD_= DATABASE_SKU_DELTA). PCD driver will build HOB to store the full default SKU data, and patch HOB= data based on non-default SKU delta data for the SKU set by SetSku(), it can save memory = resource at boot time. // // PCD database layout: // +---------------------------------+ // | PCD_DATABASE_INIT (DEFAULT SKU) | // +---------------------------------+ // | PCD_DATABASE_SKU_DELTA (SKU A) | // +---------------------------------+ // | PCD_DATABASE_SKU_DELTA (SKU B) | // +---------------------------------+ // | ...... | // +---------------------------------+ // The patch below shows the detailed PCD database format change. BaseTools, PCD database and driver updates are needed for this proposal. BaseTools can even be intelligent to generate smallest SKU delta based on t= he PCD values for different SKUs and the relationship between SKUs. For single SKU (default) case, this proposal is expected to have no impact. Note: For multi-SKU case, PCD database format will be changed, so PCD drive= r will have to be updated together with BaseTools. Cc: Michael Kinney Cc: Liming Gao Cc: Tim Lewis Cc: Yonghong Zhu --- .../Include/Guid/PcdDataBaseSignatureGuid.h | 32 +++++++++++++++++-= ---- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/MdeModulePkg/Include/Guid/PcdDataBaseSignatureGuid.h b/MdeModu= lePkg/Include/Guid/PcdDataBaseSignatureGuid.h index d2e848800b75..0069823458cd 100644 --- a/MdeModulePkg/Include/Guid/PcdDataBaseSignatureGuid.h +++ b/MdeModulePkg/Include/Guid/PcdDataBaseSignatureGuid.h @@ -62,11 +62,6 @@ typedef struct { } DYNAMICEX_MAPPING; =20 typedef struct { - UINT32 SkuDataStartOffset; // Offset(with DATUM TYPE info) from the P= CD_DB. - UINT32 SkuIdTableOffset; // Offset from the PCD_DB. -} SKU_HEAD; - -typedef struct { UINT32 StringIndex; // Offset in String Table in units of UINT= 8. UINT32 DefaultValueOffset; // Offset of the Default Value. UINT16 GuidTableIndex; // Offset in Guid Table in units of GUID. @@ -115,7 +110,6 @@ typedef struct { // Padding is needed to keep necessary alignment // //SKU_ID SkuIdTable[]; // SkuIds sy= stem supports. - //SKU_ID SkuIndexTable[]; // SkuIds fo= r each PCD with SKU enable. //UINT64 ValueUint64[]; //UINT32 ValueUint32[]; //VPD_HEAD VpdHead[]; // VPD Offset @@ -125,7 +119,6 @@ typedef struct { //STRING_HEAD StringHead[]; // String PCD //PCD_NAME_INDEX PcdNameTable[]; // PCD name = index info. It can be accessed by the PcdNameTableOffset. //VARIABLE_HEAD VariableHead[]; // HII PCD - //SKU_HEAD SkuHead[]; // Store SKU= info for each PCD with SKU enable. //UINT8 StringTable[]; // String fo= r String PCD value and HII PCD Variable Name. It can be accessed by StringT= ableOffset. //SIZE_INFO SizeTable[]; // MaxSize a= nd CurSize for String PCD. It can be accessed by SizeTableOffset. //UINT16 ValueUint16[]; @@ -134,6 +127,31 @@ typedef struct { =20 } PCD_DATABASE_INIT; =20 +typedef struct { + UINT32 Offset:24; + UINT32 Data:8; +} PCD_DATABASE_SKU_DELTA_DATA; + +typedef struct { + SKU_ID SkuId; + SKU_ID SkuIdCompared; + UINT32 Length; + //PCD_DATABASE_SKU_DELTA_DATA DeltaData[] +} PCD_DATABASE_SKU_DELTA; + +// +// PCD database layout: +// +---------------------------------+ +// | PCD_DATABASE_INIT (DEFAULT SKU) | +// +---------------------------------+ +// | PCD_DATABASE_SKU_DELTA (SKU A) | +// +---------------------------------+ +// | PCD_DATABASE_SKU_DELTA (SKU B) | +// +---------------------------------+ +// | ...... | +// +---------------------------------+ +// + // // PEI and DXE Pcd driver use the same PCD database // --=20 2.7.0.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel