Assorted cleanups from numa-aware-vswitches series
Resolve open issues from preceding patches. Part of blueprint numa-aware-vswitches Change-Id: I0c35109b67aa94cf19a4d20a97bf5ab15cf3db4e
This commit is contained in:
parent
803f85d7e6
commit
24c016ed6c
@ -31,13 +31,13 @@ Simultaneous Multi-Threading (SMT)
|
|||||||
CPUs on the system and can execute workloads in parallel. However, as with
|
CPUs on the system and can execute workloads in parallel. However, as with
|
||||||
NUMA, threads compete for shared resources.
|
NUMA, threads compete for shared resources.
|
||||||
|
|
||||||
Non Uniform I/O Access (NUMA I/O)
|
Non-Uniform I/O Access (NUMA I/O)
|
||||||
In a NUMA system, I/O to a device mapped to a local memory region is more
|
In a NUMA system, I/O to a device mapped to a local memory region is more
|
||||||
efficient than I/O to a remote device. A device connected to the same socket
|
efficient than I/O to a remote device. A device connected to the same socket
|
||||||
providing the CPU and memory offers lower latencies for I/O operations due to
|
providing the CPU and memory offers lower latencies for I/O operations due to
|
||||||
its physical proximity. This generally manifests itself in devices connected
|
its physical proximity. This generally manifests itself in devices connected
|
||||||
to the PCIe bus, such as NICs or vGPUs, but applies to any device support
|
to the PCIe bus, such as NICs or vGPUs, but applies to any device support
|
||||||
memory mapped I/O.
|
memory-mapped I/O.
|
||||||
|
|
||||||
In OpenStack, SMP CPUs are known as *cores*, NUMA cells or nodes are known as
|
In OpenStack, SMP CPUs are known as *cores*, NUMA cells or nodes are known as
|
||||||
*sockets*, and SMT CPUs are known as *threads*. For example, a quad-socket,
|
*sockets*, and SMT CPUs are known as *threads*. For example, a quad-socket,
|
||||||
|
@ -818,9 +818,8 @@ class API(base.Base):
|
|||||||
# InstancePCIRequests object
|
# InstancePCIRequests object
|
||||||
pci_request_info = pci_request.get_pci_requests_from_flavor(
|
pci_request_info = pci_request.get_pci_requests_from_flavor(
|
||||||
instance_type)
|
instance_type)
|
||||||
|
network_metadata = self.network_api.create_resource_requests(
|
||||||
network_metadata = self.network_api.create_resource_requests(context,
|
context, requested_networks, pci_request_info)
|
||||||
requested_networks, pci_request_info)
|
|
||||||
|
|
||||||
base_options = {
|
base_options = {
|
||||||
'reservation_id': reservation_id,
|
'reservation_id': reservation_id,
|
||||||
|
@ -1753,9 +1753,6 @@ class API(base_api.NetworkAPI):
|
|||||||
segments, the first segment that defines a physnet value will be
|
segments, the first segment that defines a physnet value will be
|
||||||
used for the physnet name.
|
used for the physnet name.
|
||||||
"""
|
"""
|
||||||
def is_tunneled(net):
|
|
||||||
return net.get('provider:network_type') in L3_NETWORK_TYPES
|
|
||||||
|
|
||||||
if self._has_multi_provider_extension(context, neutron=neutron):
|
if self._has_multi_provider_extension(context, neutron=neutron):
|
||||||
network = neutron.show_network(net_id,
|
network = neutron.show_network(net_id,
|
||||||
fields='segments').get('network')
|
fields='segments').get('network')
|
||||||
@ -1772,7 +1769,7 @@ class API(base_api.NetworkAPI):
|
|||||||
# physical networks.
|
# physical networks.
|
||||||
physnet_name = net.get('provider:physical_network')
|
physnet_name = net.get('provider:physical_network')
|
||||||
if physnet_name:
|
if physnet_name:
|
||||||
return physnet_name, is_tunneled(net)
|
return physnet_name, False
|
||||||
|
|
||||||
# Raising here as at least one segment should
|
# Raising here as at least one segment should
|
||||||
# have a physical network provided.
|
# have a physical network provided.
|
||||||
@ -1784,7 +1781,8 @@ class API(base_api.NetworkAPI):
|
|||||||
net = neutron.show_network(
|
net = neutron.show_network(
|
||||||
net_id, fields=['provider:physical_network',
|
net_id, fields=['provider:physical_network',
|
||||||
'provider:network_type']).get('network')
|
'provider:network_type']).get('network')
|
||||||
return net.get('provider:physical_network'), is_tunneled(net)
|
return (net.get('provider:physical_network'),
|
||||||
|
net.get('provider:network_type') in L3_NETWORK_TYPES)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _get_trusted_mode_from_port(port):
|
def _get_trusted_mode_from_port(port):
|
||||||
|
@ -78,7 +78,6 @@ PCIAddressField = fields.PCIAddressField
|
|||||||
Enum = fields.Enum
|
Enum = fields.Enum
|
||||||
Field = fields.Field
|
Field = fields.Field
|
||||||
FieldType = fields.FieldType
|
FieldType = fields.FieldType
|
||||||
String = fields.String
|
|
||||||
Set = fields.Set
|
Set = fields.Set
|
||||||
Dict = fields.Dict
|
Dict = fields.Dict
|
||||||
List = fields.List
|
List = fields.List
|
||||||
@ -92,7 +91,7 @@ IPV6Network = fields.IPV6Network
|
|||||||
|
|
||||||
|
|
||||||
class SetOfStringsField(AutoTypedField):
|
class SetOfStringsField(AutoTypedField):
|
||||||
AUTO_TYPE = Set(String())
|
AUTO_TYPE = Set(fields.String())
|
||||||
|
|
||||||
|
|
||||||
class BaseNovaEnum(Enum):
|
class BaseNovaEnum(Enum):
|
||||||
|
@ -18,7 +18,7 @@ from nova.objects import fields
|
|||||||
|
|
||||||
@base.NovaObjectRegistry.register
|
@base.NovaObjectRegistry.register
|
||||||
class NetworkMetadata(base.NovaObject):
|
class NetworkMetadata(base.NovaObject):
|
||||||
"""Hold aggregate metadata for a collection on networks.
|
"""Hold aggregate metadata for a collection of networks.
|
||||||
|
|
||||||
This object holds aggregate information for a collection of neutron
|
This object holds aggregate information for a collection of neutron
|
||||||
networks. There are two types of network collections we care about and use
|
networks. There are two types of network collections we care about and use
|
||||||
|
@ -31,3 +31,5 @@ class NeutronConfTestCase(test.NoDBTestCase):
|
|||||||
|
|
||||||
self.assertIn('neutron_physnet_foo', CONF)
|
self.assertIn('neutron_physnet_foo', CONF)
|
||||||
self.assertIn('neutron_physnet_bar', CONF)
|
self.assertIn('neutron_physnet_bar', CONF)
|
||||||
|
self.assertIn('neutron_tunnel', CONF)
|
||||||
|
self.assertIn('numa_nodes', CONF.neutron_tunnel)
|
||||||
|
@ -3451,7 +3451,7 @@ class NetworkRequestSupportTestCase(test.NoDBTestCase):
|
|||||||
def test_multiple_networks(self):
|
def test_multiple_networks(self):
|
||||||
"""Validate behavior with multiple networks.
|
"""Validate behavior with multiple networks.
|
||||||
|
|
||||||
If a we request multiple networks that are spread across host NUMA
|
If we request multiple networks that are spread across host NUMA
|
||||||
nodes, we're going to need to use multiple host instances.
|
nodes, we're going to need to use multiple host instances.
|
||||||
"""
|
"""
|
||||||
network_metadata = objects.NetworkMetadata(
|
network_metadata = objects.NetworkMetadata(
|
||||||
|
Loading…
Reference in New Issue
Block a user