diff --git a/debian/changelog b/debian/changelog index 2bfc953..3d65cf1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +openvz-nova-driver (1.3-01) precise; urgency=low + + * Added setting numtcpsock to instance sizing + + -- Daniel Salinas Wed, 26 June 2013 16:08:03 -0500 + + openvz-nova-driver (1.1-02) precise; urgency=low * Released for known working distributions. (Closes: #XXXXXX) diff --git a/nova/tests/openvz/test_driver.py b/nova/tests/openvz/test_driver.py index 63a5bc4..f0a8671 100644 --- a/nova/tests/openvz/test_driver.py +++ b/nova/tests/openvz/test_driver.py @@ -16,6 +16,7 @@ # under the License. import base64 +import json import mox from nova.compute import manager from nova.compute import power_state @@ -395,6 +396,36 @@ class OpenVzDriverTestCase(test.TestCase): manager.ComputeVirtAPI(None), False) ovz_conn._set_numfiles(fakes.INSTANCE, max_fd) + def test_set_numtcpsock(self): + instance_meta = ovz_utils.format_system_metadata( + fakes.INSTANCE['system_metadata']) + numtcpsock = json.loads( + CONF.ovz_numtcpsock_map + )[str(instance_meta['instance_type_memory_mb'])] + self.mox.StubOutWithMock(openvz_conn.ovz_utils, 'execute') + openvz_conn.ovz_utils.execute( + 'vzctl', 'set', fakes.INSTANCE['id'], '--save', '--numtcpsock', + numtcpsock, run_as_root=True).AndReturn(('', '')) + self.mox.ReplayAll() + ovz_conn = openvz_conn.OpenVzDriver( + manager.ComputeVirtAPI(None), False) + ovz_conn._set_numtcpsock( + fakes.INSTANCE, instance_meta['instance_type_memory_mb']) + + def test_set_numtcpsock_no_flag(self): + instance_meta = ovz_utils.format_system_metadata( + fakes.INSTANCE['system_metadata']) + self.mox.StubOutWithMock(openvz_conn.ovz_utils, 'execute') + openvz_conn.ovz_utils.execute( + 'vzctl', 'set', fakes.INSTANCE['id'], '--save', '--numtcpsock', + CONF.ovz_numtcpsock_default, run_as_root=True).AndReturn(('', '')) + self.mox.ReplayAll() + ovz_conn = openvz_conn.OpenVzDriver( + manager.ComputeVirtAPI(None), False) + ovz_conn._set_numtcpsock( + fakes.INSTANCE, + (instance_meta['instance_type_memory_mb'] + 1)) + def test_set_instance_size_with_instance_type_id(self): instance_memory_bytes = ((int(fakes.INSTANCETYPE['memory_mb']) * 1024) * 1024) diff --git a/nova/virt/openvz/driver.py b/nova/virt/openvz/driver.py index 8eb009a..852c454 100644 --- a/nova/virt/openvz/driver.py +++ b/nova/virt/openvz/driver.py @@ -169,13 +169,20 @@ openvz_conn_opts = [ cfg.IntOpt('ovz_rsync_iterations', default=1, help='Number of times to rsync a container when migrating'), + cfg.IntOpt('ovz_numtcpsock_default', + default=2000, + help='Default number of tcp sockets to give each container'), cfg.FloatOpt('ovz_disk_space_oversub_percent', default=1.10, help='Local disk over subscription percentage'), cfg.FloatOpt('ovz_cpulimit_overcommit_multiplier', default=1.0, help='Multiplier for cpulimit to facilitate over ' - 'committing cpu resources') + 'committing cpu resources'), + cfg.DictOpt('ovz_numtcpsock_map', + default={"8192": 3000, "1024": 2000, "4096": 2000, + "2048": 2000, "16384": 4000, "512": 2000}, + help='Mapped values for flavors based on memory allocation'), ] CONF = cfg.CONF @@ -813,6 +820,25 @@ class OpenVzDriver(driver.ComputeDriver): '--numfile', max_file_descriptors, run_as_root=True) + def _set_numtcpsock(self, instance, memory_mb): + """ + Run the commnand: + + vzctl set --save --numtcpsock + + :param instance: + :return: + """ + try: + tcp_sockets = CONF.ovz_numtcpsock_map[str(memory_mb)] + except (ValueError, TypeError, KeyError, cfg.NoSuchOptError): + LOG.error(_('There was no acceptable tcpsocket number found ' + 'defaulting to %s') % CONF.ovz_numtcpsock_default) + tcp_sockets = CONF.ovz_numtcpsock_default + + ovz_utils.execute('vzctl', 'set', instance['id'], '--save', + '--numtcpsock', tcp_sockets, run_as_root=True) + def _set_instance_size(self, instance, network_info=None, is_migration=False): """