@@ -61,6 +61,10 @@ def setUp(self):
61
61
}
62
62
self .pcpu_flavor_id = self ._create_flavor (
63
63
vcpu = 4 , extra_spec = self .extra_spec )
64
+ self .isolate_flavor_id = self ._create_flavor (
65
+ vcpu = 4 , extra_spec = {'hw:cpu_policy' : 'dedicated' ,
66
+ 'hw:cpu_thread_policy' : 'prefer' ,
67
+ 'hw:emulator_threads_policy' : 'isolate' })
64
68
65
69
def _assert_server_cpus_state (self , server , expected = 'online' ):
66
70
inst = objects .Instance .get_by_uuid (self .ctxt , server ['id' ])
@@ -130,6 +134,23 @@ def test_create_server(self):
130
134
unused_cpus = cpu_dedicated_set - instance_pcpus
131
135
self ._assert_cpu_set_state (unused_cpus , expected = 'offline' )
132
136
137
+ def test_create_server_with_emulator_threads_isolate (self ):
138
+ server = self ._create_server (
139
+ flavor_id = self .isolate_flavor_id ,
140
+ expected_state = 'ACTIVE' )
141
+ # Let's verify that the pinned CPUs are now online
142
+ self ._assert_server_cpus_state (server , expected = 'online' )
143
+ instance = objects .Instance .get_by_uuid (self .ctxt , server ['id' ])
144
+ numa_topology = instance .numa_topology
145
+ # Make sure we've pinned the emulator threads to a separate core
146
+ self .assertTrue (numa_topology .cpuset_reserved )
147
+ self .assertTrue (
148
+ numa_topology .cpu_pinning .isdisjoint (
149
+ numa_topology .cpuset_reserved ))
150
+ # FIXME(artom) We've not actually powered on the emulator threads core
151
+ self ._assert_cpu_set_state (numa_topology .cpuset_reserved ,
152
+ expected = 'offline' )
153
+
133
154
def test_stop_start_server (self ):
134
155
server = self ._create_server (
135
156
flavor_id = self .pcpu_flavor_id ,
0 commit comments