Acidanthera UEFI Development Kit based on EDK II edk2-stable202311
Go to file
Laszlo Ersek bd907fb638 BaseTools/GenFds: speed up Region.PadBuffer()
The current implementation calls both pack() and Buffer.write() Size
times. The new implementation calls both of these methods only once; the
full data to write are constructed locally [1]. The range() function is
replaced by xrange() because the latter is supposed to be faster / lighter
weight [2].

On my laptop, I tested the change as follows: I pre-built the series at
[3] with

  build -a X64 -p OvmfPkg/OvmfPkgX64.dsc -t GCC48 -b DEBUG \
      -D HTTP_BOOT_ENABLE -D SECURE_BOOT_ENABLE

(The series at [3] is relevant because it increases the size of one of the
padded regions by 8.5 MB, slowing down the build quite a bit.)

With all source code already compiled, repeating the above command takes
approximately 45 seconds. With the patch applied, it goes down to 29
seconds.

[1] http://stackoverflow.com/questions/27384093/fastest-way-to-write-huge-data-in-file
[2] https://docs.python.org/2/library/functions.html?highlight=xrange#xrange
[3] http://thread.gmane.org/gmane.comp.bios.edk2.devel/14214

We can also measure the impact with a synthetic test:

> import timeit
>
> test_old = """
> import struct, string, StringIO
> Size = (8 * 1024 + 512) * 1024
> Buffer = StringIO.StringIO()
> PadData = 0xFF
> for i in range(0, Size):
>     Buffer.write(struct.pack('B', PadData))
> """
>
> test_new = """
> import struct, string, StringIO
> Size = (8 * 1024 + 512) * 1024
> Buffer = StringIO.StringIO()
> PadByte = struct.pack('B', 0xFF)
> PadData = string.join(PadByte for i in xrange(0, Size))
> Buffer.write(PadData)
> """
>
> print(timeit.repeat(stmt=test_old, number=1, repeat=3))
> print(timeit.repeat(stmt=test_new, number=1, repeat=3))

The output is

[8.231637001037598, 8.81188416481018, 8.948754072189331]
[0.5503702163696289, 0.5461571216583252, 0.578315019607544]

Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
2016-07-12 13:19:27 +02:00
AppPkg AppPkg/.../Python: Clean up and document how to escape the -# option. 2016-01-06 01:00:19 +00:00
ArmPkg ArmPkg: Fix typos in comments 2016-07-11 10:29:44 +08:00
ArmPlatformPkg ArmPlatformPkg: Set Juno debug serial port defaults 2016-07-07 17:55:34 +01:00
ArmVirtPkg ArmVirtPkg/PlatformBootManagerLib: Postpone the shell registration 2016-07-08 13:11:31 +02:00
BaseTools BaseTools/GenFds: speed up Region.PadBuffer() 2016-07-12 13:19:27 +02:00
BeagleBoardPkg BeagleBoardPkg: Convert to build FatPkg from source 2016-04-07 20:45:39 +02:00
Conf
CorebootModulePkg CorebootModulePkg: Remove unused PCI non-enumeration drivers 2016-05-27 14:26:16 -07:00
CorebootPayloadPkg CorebootModulePkg/PciHostBridgeLib: Fix PCI 64bit memory BAR size issue 2016-05-27 14:28:37 -07:00
CryptoPkg CryptoPkg BaseCryptLib: Init the content of struct 'CertCtx' before use 2016-07-12 08:53:19 +08:00
DuetPkg DuetPkg FSVariable: return error for empty str VariableName to GetVariable 2016-05-15 17:48:53 +08:00
EdkCompatibilityPkg EdkCompatibilityPkg: Fix typos in comments 2016-07-11 10:29:45 +08:00
EdkShellBinPkg
EdkShellPkg
EmbeddedPkg EmbeddedPkg/AcpiLib: add GICC table init macro for ACPI 6.0 2016-07-06 10:51:38 +02:00
EmulatorPkg EmulatorPkg/EmuGopDxe: Use correct FROM_THIS macro for TextInEx 2016-05-16 18:25:17 -07:00
FatBinPkg FatBinPkg: Change to 2-clause BSD license 2016-04-22 00:55:21 -07:00
FatPkg FatPkg: Add Contributions.txt 2016-04-22 00:55:21 -07:00
IntelFrameworkModulePkg IntelFrameworkModulePkg: Fix typos in comments 2016-07-11 10:29:48 +08:00
IntelFrameworkPkg IntelFrameworkPkg/FrameworkUefiLib: implement EfiEventGroupSignal 2016-03-23 12:05:45 +01:00
IntelFsp2Pkg IntelFsp2Pkg SecFspSecPlatformLibNull: Remove MASM/GAS files 2016-07-11 13:53:57 +08:00
IntelFsp2WrapperPkg IntelFsp2WrapperPkg SecFspWrapperPlatformSecLibSample: Remove MASM/GAS files 2016-07-11 13:53:48 +08:00
IntelFspPkg IntelFspPkg: Add NOOPT target in IntelFspPkg.dsc 2016-01-21 02:14:43 +00:00
IntelFspWrapperPkg IntelFspWrapperPkg: PeiFspHobProcessLibSample: remove set but unused variables 2016-03-25 10:52:21 +01:00
IntelSiliconPkg IntelSiliconPkg/IgdOpRegion: Add definition for Intel IGD 2016-06-16 08:42:44 +08:00
MdeModulePkg MdeModulePkg: Fix build error in the PXE driver. 2016-07-12 10:00:05 +08:00
MdePkg MdePkg: Fix typos in comments 2016-07-11 10:29:49 +08:00
NetworkPkg NetworkPkg: Update PXE driver to follow edk2 coding standards. 2016-07-12 08:50:36 +08:00
Nt32Pkg Nt32Pkg: Fix typos in comments 2016-07-11 10:29:45 +08:00
Omap35xxPkg Omap35xxPkg: drop CpuExceptionHandlerLib library class resolution 2016-03-17 09:15:11 +01:00
OptionRomPkg OptionRomPkg: Fix typos in comments 2016-07-11 10:29:47 +08:00
OvmfPkg OvmfPkg: Fix typos in comments 2016-07-08 10:11:15 +02:00
PcAtChipsetPkg PcAtChipsetPkg: Fix typos in comments 2016-07-11 10:29:47 +08:00
PerformancePkg PerformancePkg: Replace UnicodeStrToAsciiStr/AsciiStrToUnicodeStr 2016-06-21 12:46:25 +08:00
QuarkPlatformPkg QuarkPlatformPkg: fix ASSERT_EFI_ERROR() typos 2016-06-30 13:08:14 +02:00
QuarkSocPkg QuarkSocPkg/SmmCpuFeaturesLib: Add SMRR PhysBase/PhysMask fields check 2016-05-19 10:04:34 -07:00
SecurityPkg SecurityPkg OpalPasswordSmm: Remove useless code. 2016-07-11 10:38:20 +08:00
ShellBinPkg ShellBinPkg: Ia32/X64 Shell binary update. 2016-07-12 15:10:09 +08:00
ShellPkg Revert "ShellPkg: Make the USB mouse behavior in 'edit' consistent with 'hexedit'." 2016-07-08 14:54:30 +08:00
SourceLevelDebugPkg SourceLevelDebugPkg DebugAgentLib: Add nasm source file into LIB INF files. 2016-06-28 09:52:25 +08:00
StdLib StdLib: Series of patches to fix typos - availabe to available 2016-07-07 15:23:19 -07:00
StdLibPrivateInternalFiles StdLib: Clarify and improve comments. 2016-01-06 00:31:42 +00:00
UefiCpuPkg UefiCpuPkg CpuMpPei: Update INF to refer to NASM source file 2016-07-11 13:20:22 +08:00
UnixPkg
Vlv2DeviceRefCodePkg Vlv2DeviceRefCodePkg&Vlv2TbltDevicePkg:Add setup option of LPE Audio. 2016-06-21 11:20:54 +08:00
Vlv2TbltDevicePkg Vlv2TbltDevicePkg: fix ASSERT_EFI_ERROR() typos 2016-06-30 17:27:38 +02:00
.gitignore
BuildNotes2.txt BaseTools: Updated BuildNotes URLs 2016-03-25 09:46:44 +08:00
Edk2Setup.bat BaseTools: Update Edk2Setup.bat to support multiple workspaces 2015-10-08 09:29:36 +00:00
Maintainers.txt Change ShellPkg&ShellBinPkg maintainer 2016-07-06 08:05:21 -07:00
edksetup.bat Update edksetup.bat to check EDK_TOOLS_PATH before set it. 2016-04-11 16:20:28 +08:00
edksetup.sh BaseTools: Update edksetup.sh to support multiple workspaces 2015-10-08 09:29:56 +00:00