plugin-xenserver: Apply patch to speed up writing config drive

This is to apply a patch to address the following problem:
bug: #1567857
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: I97e121800567efbce66ce1de8f8cbf9c788d12e5
This commit is contained in:
Jianghua Wang 2016-04-10 20:10:28 -07:00
parent 2556778917
commit c30bc7f8db
2 changed files with 43 additions and 1 deletions

View File

@ -382,7 +382,8 @@ def patch_compute_xenapi():
patchfile_list = ['%s/patchset/vif-plug.patch' % patchset_dir,
'%s/patchset/nova-neutron-race-condition.patch' % patchset_dir,
'%s/patchset/ovs-interim-bridge.patch' % patchset_dir,
'%s/patchset/neutron-security-group.patch' % patchset_dir]
'%s/patchset/neutron-security-group.patch' % patchset_dir,
'%s/patchset/speed-up-writing-config-drive.patch' % patchset_dir]
for patch_file in patchfile_list:
execute('patch', '-d', DIST_PACKAGES_DIR, '-p1', '-i', patch_file)

View File

@ -0,0 +1,41 @@
diff --git a/nova/tests/unit/virt/xenapi/test_vm_utils.py b/nova/tests/unit/virt/xenapi/test_vm_utils.py
index e15cc53..a777fcc 100644
--- a/nova/tests/unit/virt/xenapi/test_vm_utils.py
+++ b/nova/tests/unit/virt/xenapi/test_vm_utils.py
@@ -189,7 +189,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')
diff --git a/nova/virt/xenapi/vm_utils.py b/nova/virt/xenapi/vm_utils.py
index c8fdc52..9bbf173 100644
--- a/nova/virt/xenapi/vm_utils.py
+++ b/nova/virt/xenapi/vm_utils.py
@@ -138,6 +138,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
@@ -1162,6 +1163,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)
@@ -2429,6 +2431,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',