XenAPI: specify block size for writing config drive.

When writing config drive, dd by default uses 512B as the block
size. It costs more than 3mins to write the 64M config drive.
It's longer than expected: Some health checking(fuel's heat
checking) on XenServer may failed due to timeout. So we need
improve the performance via specifying a bigger block size
with dd.

Change-Id: I359e17d6d5838f4028df0bd47e4825de420eb383
Closes-Bug: #1567857
This commit is contained in:
Jianghua Wang 2016-04-08 11:14:23 +01:00
parent d38410ea6f
commit bc10d29e41
2 changed files with 4 additions and 1 deletions

View File

@ -190,7 +190,7 @@ class GenerateConfigDriveTestCase(VMUtilsTestBase):
'-publisher', mox.IgnoreArg(), '-quiet',
'-J', '-r', '-V', 'config-2', mox.IgnoreArg(),
attempts=1, run_as_root=False).AndReturn(None)
utils.execute('dd', mox.IgnoreArg(), mox.IgnoreArg(),
utils.execute('dd', mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(),
mox.IgnoreArg(), run_as_root=True).AndReturn(None)
self.mox.StubOutWithMock(vm_utils, 'create_vbd')

View File

@ -78,6 +78,7 @@ MBR_SIZE_BYTES = MBR_SIZE_SECTORS * SECTOR_SIZE
KERNEL_DIR = '/boot/guest'
MAX_VDI_CHAIN_SIZE = 16
PROGRESS_INTERVAL_SECONDS = 300
DD_BLOCKSIZE = 65536
# Fudge factor to allow for the VHD chain to be slightly larger than
# the partitioned space. Otherwise, legitimate images near their
@ -1100,6 +1101,7 @@ def generate_configdrive(session, instance, vm_ref, userdevice,
utils.execute('dd',
'if=%s' % tmp_file,
'of=%s' % dev_path,
'bs=%d' % DD_BLOCKSIZE,
'oflag=direct,sync',
run_as_root=True)
@ -2367,6 +2369,7 @@ def _copy_partition(session, src_ref, dst_ref, partition, virtual_size):
utils.execute('dd',
'if=%s' % src_path,
'of=%s' % dst_path,
'bs=%d' % DD_BLOCKSIZE,
'count=%d' % num_blocks,
'iflag=direct,sync',
'oflag=direct,sync',