)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4df76c799e5f29c2023c7c05e2adcdc96c69c030","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Previous logic was not handling the cases when the instance cell has an"},{"line_number":10,"context_line":"odd number of vcpus that is larger than any sibling set on the host. The"},{"line_number":11,"context_line":"logic would (accidentally) either reject to ping such an instance even"},{"line_number":12,"context_line":"though there is ample free cores, or would (in case there were enough"},{"line_number":13,"context_line":"free sibling sets on the host) spread the instance instead of pack it"},{"line_number":14,"context_line":"onto siblings as the default policy suggests."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"da85f559_c90ff9df","line":11,"updated":"2015-11-09 17:03:30.000000000","message":"reject to ping -\u003e reject to pin","commit_id":"b86f8314f54f9b4bc5f68abb578dc18f229999aa"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"e31862e638286cada89b94c36a097807a3ac91b7","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Previous logic was not handling the cases when the instance cell has an"},{"line_number":10,"context_line":"odd number of vcpus that is larger than any sibling set on the host. The"},{"line_number":11,"context_line":"logic would (accidentally) either reject to ping such an instance even"},{"line_number":12,"context_line":"though there is ample free cores, or would (in case there were enough"},{"line_number":13,"context_line":"free sibling sets on the host) spread the instance instead of pack it"},{"line_number":14,"context_line":"onto siblings as the default policy suggests."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a8ffd7b_470456bf","line":11,"in_reply_to":"da85f559_c90ff9df","updated":"2015-11-25 11:02:53.000000000","message":"Done","commit_id":"b86f8314f54f9b4bc5f68abb578dc18f229999aa"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4df76c799e5f29c2023c7c05e2adcdc96c69c030","unresolved":false,"context_lines":[{"line_number":11,"context_line":"logic would (accidentally) either reject to ping such an instance even"},{"line_number":12,"context_line":"though there is ample free cores, or would (in case there were enough"},{"line_number":13,"context_line":"free sibling sets on the host) spread the instance instead of pack it"},{"line_number":14,"context_line":"onto siblings as the default policy suggests."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This patch fixes some incorrect assumptions in the code, while also"},{"line_number":17,"context_line":"simplifying it. As an added bonus - we still attempt to expose"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"da85f559_6cb5bb2f","line":14,"updated":"2015-11-09 17:03:30.000000000","message":"the implementation provided a default policy but the specification does not.\n\nhttp://specs.openstack.org/openstack/nova-specs/specs/liberty/approved/virt-driver-cpu-pinning.html\n\nif the threading policy is not specified the behavior is undefined.\n\ni don\u0027t think it is appropriate to assume the desired default is prefer.","commit_id":"b86f8314f54f9b4bc5f68abb578dc18f229999aa"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"e31862e638286cada89b94c36a097807a3ac91b7","unresolved":false,"context_lines":[{"line_number":11,"context_line":"logic would (accidentally) either reject to ping such an instance even"},{"line_number":12,"context_line":"though there is ample free cores, or would (in case there were enough"},{"line_number":13,"context_line":"free sibling sets on the host) spread the instance instead of pack it"},{"line_number":14,"context_line":"onto siblings as the default policy suggests."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This patch fixes some incorrect assumptions in the code, while also"},{"line_number":17,"context_line":"simplifying it. As an added bonus - we still attempt to expose"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a8ffd7b_07ef2e88","line":14,"in_reply_to":"da85f559_6cb5bb2f","updated":"2015-11-25 11:02:53.000000000","message":"Not sure what you are saying here. \"Undefined\" is a term describing contract with the user, and has nothing to do with an actual implementation. So for example python dictionary API claims that iterating over .items() yields them in an undefined order, but implementations will sometimes have non-random order (this is in fact true for CPython).\n\nThis patch is actually not related at all to the spec you link but is a bug fix for the previous implementation described in http://specs.openstack.org/openstack/nova-specs/specs/kilo/implemented/virt-driver-cpu-pinning.html","commit_id":"b86f8314f54f9b4bc5f68abb578dc18f229999aa"}],"nova/tests/unit/virt/test_hardware.py":[{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"b9a6e62a92fc789b5b678f3d60dbf14486f2b8c8","unresolved":false,"context_lines":[{"line_number":2057,"context_line":"                                            memory\u003d2048)"},{"line_number":2058,"context_line":"        inst_pin \u003d hw._numa_fit_instance_cell_with_pinning(host_pin, inst_pin)"},{"line_number":2059,"context_line":"        self.assertInstanceCellPinned(inst_pin)"},{"line_number":2060,"context_line":"        got_topo \u003d objects.VirtCPUTopology(sockets\u003d1, cores\u003d3, threads\u003d2)"},{"line_number":2061,"context_line":"        self.assertEqualTopology(got_topo, inst_pin.cpu_topology)"},{"line_number":2062,"context_line":""},{"line_number":2063,"context_line":"    def test_get_pinning_host_siblings_instance_odd_fit_w_usage(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a2fa921_c2298c9c","line":2060,"updated":"2015-10-09 12:28:02.000000000","message":"This doesn\u0027t look like what we want if we\u0027re trying to optimise thread usage. Optimal placement in this case would be 2 cores, 3 threads.","commit_id":"cd9b383e03207dd296fa8c209c9a4db1d21c537a"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"55ce414e576e51bfe52fab395e196f1a1842cf7f","unresolved":false,"context_lines":[{"line_number":2057,"context_line":"                                            memory\u003d2048)"},{"line_number":2058,"context_line":"        inst_pin \u003d hw._numa_fit_instance_cell_with_pinning(host_pin, inst_pin)"},{"line_number":2059,"context_line":"        self.assertInstanceCellPinned(inst_pin)"},{"line_number":2060,"context_line":"        got_topo \u003d objects.VirtCPUTopology(sockets\u003d1, cores\u003d3, threads\u003d2)"},{"line_number":2061,"context_line":"        self.assertEqualTopology(got_topo, inst_pin.cpu_topology)"},{"line_number":2062,"context_line":""},{"line_number":2063,"context_line":"    def test_get_pinning_host_siblings_instance_odd_fit_w_usage(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a2fa921_d0fcf6b9","line":2060,"in_reply_to":"7a2fa921_05254e07","updated":"2015-10-09 12:55:29.000000000","message":"Just to be clear, I wasn\u0027t claiming this is a bad approach. I wasn\u0027t claiming it\u0027s a good approach either, because I don\u0027t know. Is there any relevant research you\u0027re aware of?\n\nHowever, it surprised me given the existence of assertPinningPreferThreads() above, which gave me the impression that we would like to optimise for threads. In fact, this test has \u0027optimize_threads\u0027 right there in the name :)\n\nPerhaps we could have a big comment block describing what we\u0027re trying to achieve here? Despite the code being relatively simple, the problem space is not simple!","commit_id":"cd9b383e03207dd296fa8c209c9a4db1d21c537a"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"e7f832d83c5ef0c1e309388d1eec0e09eeac2cb7","unresolved":false,"context_lines":[{"line_number":2057,"context_line":"                                            memory\u003d2048)"},{"line_number":2058,"context_line":"        inst_pin \u003d hw._numa_fit_instance_cell_with_pinning(host_pin, inst_pin)"},{"line_number":2059,"context_line":"        self.assertInstanceCellPinned(inst_pin)"},{"line_number":2060,"context_line":"        got_topo \u003d objects.VirtCPUTopology(sockets\u003d1, cores\u003d3, threads\u003d2)"},{"line_number":2061,"context_line":"        self.assertEqualTopology(got_topo, inst_pin.cpu_topology)"},{"line_number":2062,"context_line":""},{"line_number":2063,"context_line":"    def test_get_pinning_host_siblings_instance_odd_fit_w_usage(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a2fa921_05254e07","line":2060,"in_reply_to":"7a2fa921_c2298c9c","updated":"2015-10-09 12:43:07.000000000","message":"So the algo is actually greedy - it does not attempt optimal placement. What happens here is that we see 4 siblings per core, grab the firs core fully, and place the rest of the CPUs (2 left) on the second core. Then we decide to expose only 2 threads as.\n\nThis is basically a stacking appraoch, it\u0027s not attempting to be optimal it uses a simple heuristics - greed :).","commit_id":"cd9b383e03207dd296fa8c209c9a4db1d21c537a"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"61d55c74c3d5578cbb6ca11a4e6e8573f398425b","unresolved":false,"context_lines":[{"line_number":2089,"context_line":"        inst_pin \u003d hw._numa_fit_instance_cell_with_pinning(host_pin, inst_pin)"},{"line_number":2090,"context_line":"        self.assertInstanceCellPinned(inst_pin)"},{"line_number":2091,"context_line":"        got_topo \u003d objects.VirtCPUTopology(sockets\u003d1, cores\u003d3, threads\u003d1)"},{"line_number":2092,"context_line":"        self.assertEqualTopology(got_topo, inst_pin.cpu_topology)"},{"line_number":2093,"context_line":""},{"line_number":2094,"context_line":"    def test_get_pinning_host_siblings_large_instance_odd_fit(self):"},{"line_number":2095,"context_line":"        host_pin \u003d objects.NUMACell(id\u003d0, cpuset\u003dset([0, 1, 2, 3, 4, 5, 6, 7,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_bf1b87c9","line":2092,"updated":"2015-11-26 09:55:17.000000000","message":"It\u0027s also important to assert here where are pinned vcpus on host cpus.","commit_id":"ca5cdc9bc432601197553f17789c8a7f62049652"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"f41436607c22b2a050c77db5b29c52c03cb68efa","unresolved":false,"context_lines":[{"line_number":2089,"context_line":"        inst_pin \u003d hw._numa_fit_instance_cell_with_pinning(host_pin, inst_pin)"},{"line_number":2090,"context_line":"        self.assertInstanceCellPinned(inst_pin)"},{"line_number":2091,"context_line":"        got_topo \u003d objects.VirtCPUTopology(sockets\u003d1, cores\u003d3, threads\u003d1)"},{"line_number":2092,"context_line":"        self.assertEqualTopology(got_topo, inst_pin.cpu_topology)"},{"line_number":2093,"context_line":""},{"line_number":2094,"context_line":"    def test_get_pinning_host_siblings_large_instance_odd_fit(self):"},{"line_number":2095,"context_line":"        host_pin \u003d objects.NUMACell(id\u003d0, cpuset\u003dset([0, 1, 2, 3, 4, 5, 6, 7,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_a3b24de3","line":2092,"in_reply_to":"9a8ffd7b_06532c3a","updated":"2015-11-27 16:04:51.000000000","message":"Well that would be another test since it will not be _odd_ anymore. I can add it, sure. Thanks!","commit_id":"ca5cdc9bc432601197553f17789c8a7f62049652"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"3af84c88e8d76d10a8851e5fc04a36903a46fef1","unresolved":false,"context_lines":[{"line_number":2089,"context_line":"        inst_pin \u003d hw._numa_fit_instance_cell_with_pinning(host_pin, inst_pin)"},{"line_number":2090,"context_line":"        self.assertInstanceCellPinned(inst_pin)"},{"line_number":2091,"context_line":"        got_topo \u003d objects.VirtCPUTopology(sockets\u003d1, cores\u003d3, threads\u003d1)"},{"line_number":2092,"context_line":"        self.assertEqualTopology(got_topo, inst_pin.cpu_topology)"},{"line_number":2093,"context_line":""},{"line_number":2094,"context_line":"    def test_get_pinning_host_siblings_large_instance_odd_fit(self):"},{"line_number":2095,"context_line":"        host_pin \u003d objects.NUMACell(id\u003d0, cpuset\u003dset([0, 1, 2, 3, 4, 5, 6, 7,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_06532c3a","line":2092,"in_reply_to":"9a8ffd7b_860b9c23","updated":"2015-11-27 15:01:55.000000000","message":"\u003e (I chose this example for it\u0027s determinism)\nGuest can have vcpus pinned on host cpus like: 1, 3, 4 or 1, 3, 6 or 1, 3, 7, ...\n\nPerhaps you should to add \u00276\u0027 to host pinned cpus and make guest to request 4vcpus. so we will have only \"orphan\" and then we can assert guest vcpus pinned to 1, 3, 4, 7","commit_id":"ca5cdc9bc432601197553f17789c8a7f62049652"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"2f25b0f2ac86808c2a532dc874fbf371625df2a6","unresolved":false,"context_lines":[{"line_number":2089,"context_line":"        inst_pin \u003d hw._numa_fit_instance_cell_with_pinning(host_pin, inst_pin)"},{"line_number":2090,"context_line":"        self.assertInstanceCellPinned(inst_pin)"},{"line_number":2091,"context_line":"        got_topo \u003d objects.VirtCPUTopology(sockets\u003d1, cores\u003d3, threads\u003d1)"},{"line_number":2092,"context_line":"        self.assertEqualTopology(got_topo, inst_pin.cpu_topology)"},{"line_number":2093,"context_line":""},{"line_number":2094,"context_line":"    def test_get_pinning_host_siblings_large_instance_odd_fit(self):"},{"line_number":2095,"context_line":"        host_pin \u003d objects.NUMACell(id\u003d0, cpuset\u003dset([0, 1, 2, 3, 4, 5, 6, 7,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_860b9c23","line":2092,"in_reply_to":"9a8ffd7b_bf1b87c9","updated":"2015-11-27 14:42:18.000000000","message":"Hmmm I am not sure it is very useful in this particular case. Whichever way they get pinned, at least one vcpu will end up on a single thread (I chose this example for it\u0027s determinism)","commit_id":"ca5cdc9bc432601197553f17789c8a7f62049652"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"04146722f7ad391182ff6bf07ab2b5c703d6a123","unresolved":false,"context_lines":[{"line_number":2105,"context_line":"        inst_pin \u003d hw._numa_fit_instance_cell_with_pinning(host_pin, inst_pin)"},{"line_number":2106,"context_line":"        self.assertInstanceCellPinned(inst_pin)"},{"line_number":2107,"context_line":"        got_topo \u003d objects.VirtCPUTopology(sockets\u003d1, cores\u003d3, threads\u003d1)"},{"line_number":2108,"context_line":"        self.assertEqualTopology(got_topo, inst_pin.cpu_topology)"},{"line_number":2109,"context_line":""},{"line_number":2110,"context_line":"    def test_get_pinning_host_siblings_instance_odd_fit_orphan_only(self):"},{"line_number":2111,"context_line":"        host_pin \u003d objects.NUMACell(id\u003d0, cpuset\u003dset([0, 1, 2, 3, 4, 5, 6, 7]),"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_184fca93","line":2108,"updated":"2015-12-03 17:00:18.000000000","message":"There\u0027s a lot of similarity in these tests. We could probably abstract this out, but that\u0027s a problem for a future patch","commit_id":"c6f572f3127dc77fc40d7764a0ceba8c56cef303"}],"nova/virt/hardware.py":[{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"a63351eed10a40f054b3a44d560a448af760036f","unresolved":false,"context_lines":[{"line_number":720,"context_line":"    # We iterate over the can_pack dict in descending order of cores that"},{"line_number":721,"context_line":"    # can be packed - an attempt to get even distribution over time"},{"line_number":722,"context_line":"    for cores_per_sib, sib_list in sorted("},{"line_number":723,"context_line":"            (t for t in can_pack.items()), reverse\u003dTrue):"},{"line_number":724,"context_line":"        if _can_pack_instance_cell(instance_cell, cores_per_sib, sib_list):"},{"line_number":725,"context_line":"            sliced_sibs \u003d map(lambda s: list(s)[:cores_per_sib], sib_list)"},{"line_number":726,"context_line":"            pinning \u003d zip(sorted(instance_cell.cpuset),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a2fa921_2a6acb81","line":723,"updated":"2015-10-08 14:42:50.000000000","message":"If you\u0027re cleaning up anyway (see whitespace change in line below), you might consider replacing (t for t in can_pack.items()) with just can_pack.items().","commit_id":"cd9b383e03207dd296fa8c209c9a4db1d21c537a"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"1d7d3ad95ce7519646b7a0e137ffe71ebc8c0b2d","unresolved":false,"context_lines":[{"line_number":720,"context_line":"    # We iterate over the can_pack dict in descending order of cores that"},{"line_number":721,"context_line":"    # can be packed - an attempt to get even distribution over time"},{"line_number":722,"context_line":"    for cores_per_sib, sib_list in sorted("},{"line_number":723,"context_line":"            (t for t in can_pack.items()), reverse\u003dTrue):"},{"line_number":724,"context_line":"        if _can_pack_instance_cell(instance_cell, cores_per_sib, sib_list):"},{"line_number":725,"context_line":"            sliced_sibs \u003d map(lambda s: list(s)[:cores_per_sib], sib_list)"},{"line_number":726,"context_line":"            pinning \u003d zip(sorted(instance_cell.cpuset),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a2fa921_a48583cf","line":723,"in_reply_to":"7a2fa921_2a6acb81","updated":"2015-10-09 10:10:00.000000000","message":"Should probably drop the whitespace change :/ or it belongs to a previous patch","commit_id":"cd9b383e03207dd296fa8c209c9a4db1d21c537a"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"46dd354d466f34e41daa326d5cdb360f48985795","unresolved":false,"context_lines":[{"line_number":707,"context_line":""},{"line_number":708,"context_line":"        Best explained by an example: consider set of free host cores as such:"},{"line_number":709,"context_line":"            [(0, 1), (3, 5), (6, 7, 8)]"},{"line_number":710,"context_line":"        This would be a case of 2 threads_per_core AKA an entry for 2 in the"},{"line_number":711,"context_line":"        can_pack structure."},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"        If we attempt to pack a 5 core instance on it - we will end up with a"}],"source_content_type":"text/x-python","patch_set":2,"id":"da85f559_21eb31b2","line":710,"updated":"2015-11-09 21:52:15.000000000","message":"Here you specify 2 threads per core but above in your example you have a sibling with 3 cores.","commit_id":"b86f8314f54f9b4bc5f68abb578dc18f229999aa"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"e31862e638286cada89b94c36a097807a3ac91b7","unresolved":false,"context_lines":[{"line_number":707,"context_line":""},{"line_number":708,"context_line":"        Best explained by an example: consider set of free host cores as such:"},{"line_number":709,"context_line":"            [(0, 1), (3, 5), (6, 7, 8)]"},{"line_number":710,"context_line":"        This would be a case of 2 threads_per_core AKA an entry for 2 in the"},{"line_number":711,"context_line":"        can_pack structure."},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"        If we attempt to pack a 5 core instance on it - we will end up with a"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_4707761c","line":710,"in_reply_to":"da85f559_21eb31b2","updated":"2015-11-25 11:02:53.000000000","message":"Yes because this refers (as this sentence points out) to an entry in the can_pack dict for the key 2. If you look at the description above of the can_pack structure - it triest ot answer: \"given a number of threads - give me all the cores that can fit them\", so a core with 3 available threads can accommodate 2 threads and this is why a core with 3 available siblings will be found in the list.","commit_id":"b86f8314f54f9b4bc5f68abb578dc18f229999aa"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"46dd354d466f34e41daa326d5cdb360f48985795","unresolved":false,"context_lines":[{"line_number":719,"context_line":"    def _threads(instance_cell, threads_per_core):"},{"line_number":720,"context_line":"        \"\"\"Threads to expose to the instance via the VirtCPUTopology."},{"line_number":721,"context_line":""},{"line_number":722,"context_line":"        This is calculated by taking the GCD of the number of threads we are"},{"line_number":723,"context_line":"        considering at the moment, and the number of orphans. An example for"},{"line_number":724,"context_line":"            instance_cell \u003d 6"},{"line_number":725,"context_line":"            threads_per_core \u003d 4"}],"source_content_type":"text/x-python","patch_set":2,"id":"da85f559_dcf48c88","line":722,"updated":"2015-11-09 21:52:15.000000000","message":"It would be nice to describe why GCD is needed and describe what is the topology requirement wrt siblings.\n\nMaybe something like: All the cores exposed to the guest need to have the same amount of threads and all those threads need to be on the same physical core siblings set.","commit_id":"b86f8314f54f9b4bc5f68abb578dc18f229999aa"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"e31862e638286cada89b94c36a097807a3ac91b7","unresolved":false,"context_lines":[{"line_number":719,"context_line":"    def _threads(instance_cell, threads_per_core):"},{"line_number":720,"context_line":"        \"\"\"Threads to expose to the instance via the VirtCPUTopology."},{"line_number":721,"context_line":""},{"line_number":722,"context_line":"        This is calculated by taking the GCD of the number of threads we are"},{"line_number":723,"context_line":"        considering at the moment, and the number of orphans. An example for"},{"line_number":724,"context_line":"            instance_cell \u003d 6"},{"line_number":725,"context_line":"            threads_per_core \u003d 4"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_0ad17357","line":722,"in_reply_to":"da85f559_dcf48c88","updated":"2015-11-25 11:02:53.000000000","message":"\"All the cores exposed to the guest need to have the same amount of threads\" - this is what invalid topology means. I guess I can clarify that. Thanks.","commit_id":"b86f8314f54f9b4bc5f68abb578dc18f229999aa"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"a149bc4c98485fa2f6364ee2370a9dceafc9c973","unresolved":false,"context_lines":[{"line_number":730,"context_line":"              x  x  x  x    x  x"},{"line_number":731,"context_line":""},{"line_number":732,"context_line":"        We can\u0027t expose 4 threads, as that will not be a valid topology (all"},{"line_number":733,"context_line":"        cores exposed to the guest have to have an equal number of threads),"},{"line_number":734,"context_line":"        and 1 would be too restrictive, but we want all threads that guest sees"},{"line_number":735,"context_line":"        to be on the same physical core, so we take GCD of 4 (max number of"},{"line_number":736,"context_line":"        threads) and 2 (number of \u0027orphan\u0027 CPUs) and get 2 as the number of"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_52832003","line":733,"updated":"2015-12-03 14:32:51.000000000","message":"Nitpick:/have to have/must have/","commit_id":"3089d7a6243e79fc6c7a2f1a523cd665265609b3"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"914821b4ed5adcd9de09e35e70abc563c2d220f2","unresolved":false,"context_lines":[{"line_number":730,"context_line":"              x  x  x  x    x  x"},{"line_number":731,"context_line":""},{"line_number":732,"context_line":"        We can\u0027t expose 4 threads, as that will not be a valid topology (all"},{"line_number":733,"context_line":"        cores exposed to the guest have to have an equal number of threads),"},{"line_number":734,"context_line":"        and 1 would be too restrictive, but we want all threads that guest sees"},{"line_number":735,"context_line":"        to be on the same physical core, so we take GCD of 4 (max number of"},{"line_number":736,"context_line":"        threads) and 2 (number of \u0027orphan\u0027 CPUs) and get 2 as the number of"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_bd5b0b2e","line":733,"in_reply_to":"9a8ffd7b_52832003","updated":"2015-12-03 15:59:26.000000000","message":"I am respining so might as well","commit_id":"3089d7a6243e79fc6c7a2f1a523cd665265609b3"}]}
