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:
parent
2556778917
commit
c30bc7f8db
|
@ -382,7 +382,8 @@ def patch_compute_xenapi():
|
||||||
patchfile_list = ['%s/patchset/vif-plug.patch' % patchset_dir,
|
patchfile_list = ['%s/patchset/vif-plug.patch' % patchset_dir,
|
||||||
'%s/patchset/nova-neutron-race-condition.patch' % patchset_dir,
|
'%s/patchset/nova-neutron-race-condition.patch' % patchset_dir,
|
||||||
'%s/patchset/ovs-interim-bridge.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:
|
for patch_file in patchfile_list:
|
||||||
execute('patch', '-d', DIST_PACKAGES_DIR, '-p1', '-i', patch_file)
|
execute('patch', '-d', DIST_PACKAGES_DIR, '-p1', '-i', patch_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',
|
Loading…
Reference in New Issue