)]}'
{"specs/ocata/approved/nested-resource-providers.rst":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"febd09a598feae893ddec0de1be1c3e08f90f0db","unresolved":false,"context_lines":[{"line_number":48,"context_line":"two banks of DIMMs attached to different NUMA nodes results in sub-optimal"},{"line_number":49,"context_line":"performance, and for certain high-performance guest workloads this penalty is"},{"line_number":50,"context_line":"not acceptable."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Another example is the SRIOV_NET_VF resource class, which is provided by"},{"line_number":53,"context_line":"SRIOV-enabled network interface cards. In the case of multiple SRIOV-enabled"},{"line_number":54,"context_line":"NICs on a compute host, different qualitative traits may be tagged to each NIC."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a77a97e_1f6836f5","line":51,"updated":"2016-11-15 09:39:13.000000000","message":"It\u0027s not really clear for me because you mix vCPUs with host NUMA nodes and I don\u0027t think we should see such resources as vCPU but instead as pCPU because we could use them differently (see spec emulator threads)\n\nAlso I think in case of NUMA the relationship is little more complex; we should see for a NUMA node the PCI devices related and huge pages. Also in case of HT we should consider pCPUs with related siblings","commit_id":"393d48566caa26a88fea15a6a5cfea7671798c30"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d820347aaf23bf9f2213a25ee3fd01007a147d79","unresolved":false,"context_lines":[{"line_number":48,"context_line":"two banks of DIMMs attached to different NUMA nodes results in sub-optimal"},{"line_number":49,"context_line":"performance, and for certain high-performance guest workloads this penalty is"},{"line_number":50,"context_line":"not acceptable."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Another example is the SRIOV_NET_VF resource class, which is provided by"},{"line_number":53,"context_line":"SRIOV-enabled network interface cards. In the case of multiple SRIOV-enabled"},{"line_number":54,"context_line":"NICs on a compute host, different qualitative traits may be tagged to each NIC."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a77a97e_98762705","line":51,"in_reply_to":"7a77a97e_0f0aa826","updated":"2016-11-21 14:49:11.000000000","message":"For the emulator thread, in my head its simply that a 4 vCPU flavour + emulator thread requires 5 vCPU resources. They should all come from the same resource pool, i.e. same NUMA node.\n\nMaybe we should really have called vCPU resources pCPU resources. But I don\u0027t think it really matters here.","commit_id":"393d48566caa26a88fea15a6a5cfea7671798c30"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"283674ca3aac94e638dd12a7f3d0eb3be3d669e7","unresolved":false,"context_lines":[{"line_number":48,"context_line":"two banks of DIMMs attached to different NUMA nodes results in sub-optimal"},{"line_number":49,"context_line":"performance, and for certain high-performance guest workloads this penalty is"},{"line_number":50,"context_line":"not acceptable."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Another example is the SRIOV_NET_VF resource class, which is provided by"},{"line_number":53,"context_line":"SRIOV-enabled network interface cards. In the case of multiple SRIOV-enabled"},{"line_number":54,"context_line":"NICs on a compute host, different qualitative traits may be tagged to each NIC."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a77a97e_0f0aa826","line":51,"in_reply_to":"7a77a97e_1f6836f5","updated":"2016-11-15 21:25:18.000000000","message":"The NUMA nodes are resource providers, not resources.\n\nOn the emulator thread thing, I recommended a long-term solution that introduces a new resource class called HOST_EMULATOR_CPU that NUMA node resource providers (child providers of the compute node parent provider) would have an inventory record for.\n\nSo, for the emulator thread scenario, you would have a situation like so:\n\n compute_node (parent provider)\n |\n -\u003e numa node 0 (child provider)\n |   |\n |   -\u003e inventory: (4) HOST_EMULATOR_CPU\n |   -\u003e inventory: (4) VCPU\n |\n -\u003e numa node 1 (child provider)\n     |\n     -\u003e inventory: (4) VCPU\n\nThe user would select a flavor that requests 2 VCPU and an image that specifies a need for the host emulation threads to be pinned to a node that is *not* servicing the realtime I/O threads.\n\nThe scheduler would look for resource providers that had an available capacity of 1 HOST_EMULATOR_CPU and a *different* resource provider on the same compute node (root provider) that had available capacity of 2 VCPU.\n\nThe SQL for such a request would look like this:\n\n SELECT DISTINCT root_provider_uuid\n FROM (\n SELECT\n   rp.id,\n   rp.root_provider_uuid\n FROM resource_providers AS rp\n INNER JOIN inventories AS inv\n   ON rp.id \u003d inv.resource_provider_id\n   AND inv.resource_class_id \u003d HOST_EMULATOR_CPU\n LEFT JOIN (\n   SELECT\n     resource_provider_id,\n     SUM(used) as used\n   FROM allocations\n   WHERE resource_class_id \u003d HOST_EMULATOR_CPU\n   GROUP BY\n     resource_provider_id\n ) AS allocs\n   ON inv.resource_provider_id \u003d allocs.resource_provider_id\n WHERE\n (\n   (inv.total - inv.reserved) *\n   inv.allocation_ratio \u003e\u003d COALESCE(allocs.used, 0) + 1\n )\n ) AS filtered_emul\n LEFT JOIN (\n SELECT\n   rp.id,\n   rp.root_provider_uuid\n FROM resource_providers AS rp\n INNER JOIN inventories AS inv\n   ON rp.id \u003d inv.resource_provider_id\n   AND inv.resource_class_id \u003d VCPU\n LEFT JOIN (\n   SELECT\n     resource_provider_id,\n     SUM(used) as used\n   FROM allocations\n   WHERE resource_class_id \u003d VCPU\n   GROUP BY\n     resource_provider_id\n ) AS allocs\n   ON inv.resource_provider_id \u003d allocs.resource_provider_id\n WHERE\n (\n   (inv.total - inv.reserved) *\n   inv.allocation_ratio \u003e\u003d COALESCE(allocs.used, 0) + 2\n )\n ) AS filtered_vcpu\n  ON filtered_emul.root_provider_uuid \u003d filtered_vcpu.root_provider_uuid\n  # Ensure DIFFERENT providers are providing\n  # HOST_EMULATOR_CPU and VCPU resources...\n  AND filtered_emul.id !\u003d filtered_vcpu.id\n\nI know the above SQL looks complex but in reality it\u0027s not all that complicated. It\u0027s just looking for resource providers that have capacity for 1 HOST_EMULATOR_CPU resource and then finding providers that are in the same root provider tree (i.e. the same compute node) that have 2 VCPU available but are *not* the same provider of the HOST_EMULATOR_CPU resource.","commit_id":"393d48566caa26a88fea15a6a5cfea7671798c30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6ad003982ba38b54daca224a16de5ec0632a95e8","unresolved":false,"context_lines":[{"line_number":62,"context_line":"qualitative traits is the **resource provider** object. Therefore, we require a"},{"line_number":63,"context_line":"way of representing that the SRIOV-enabled NICs are themselves resource"},{"line_number":64,"context_line":"providers with inventories of SRIOV_NET_VF resources. Those resource providers"},{"line_number":65,"context_line":"are contained on a compute host which has is a resource provider that has"},{"line_number":66,"context_line":"inventory records for *other* types of resources such as VCPU, MEMORY_MB or"},{"line_number":67,"context_line":"DISK_GB."},{"line_number":68,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a74a57a_2a52f967","line":65,"range":{"start_line":65,"start_character":38,"end_line":65,"end_character":41},"updated":"2016-11-23 20:26:08.000000000","message":"s/has//","commit_id":"393d48566caa26a88fea15a6a5cfea7671798c30"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"81f2477b6998330902a7c482c8e3e155c1440372","unresolved":false,"context_lines":[{"line_number":64,"context_line":"providers with inventories of SRIOV_NET_VF resources. Those resource providers"},{"line_number":65,"context_line":"are contained on a compute host which has is a resource provider that has"},{"line_number":66,"context_line":"inventory records for *other* types of resources such as VCPU, MEMORY_MB or"},{"line_number":67,"context_line":"DISK_GB."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Use Cases"},{"line_number":70,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa6399be_3846227b","line":67,"updated":"2016-10-17 02:59:16.000000000","message":"++","commit_id":"393d48566caa26a88fea15a6a5cfea7671798c30"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"8dc971f33b3b655276aba42e61846f382813662a","unresolved":false,"context_lines":[{"line_number":64,"context_line":"providers with inventories of SRIOV_NET_VF resources. Those resource providers"},{"line_number":65,"context_line":"are contained on a compute host which has is a resource provider that has"},{"line_number":66,"context_line":"inventory records for *other* types of resources such as VCPU, MEMORY_MB or"},{"line_number":67,"context_line":"DISK_GB."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Use Cases"},{"line_number":70,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3a71b18c_3b741f9b","line":67,"in_reply_to":"7a77a97e_de80874c","updated":"2016-12-01 17:03:58.000000000","message":"OK, that works. I guess I was thinking we would group on the network trait under the NUMA node, but thats basically pointless.\n\nI think we probably want to have either one PF or a selection of VFs in each group, depending on whats possible with the hardware (and current whitelist). That stuff is messy right now, but the structure seems sound, so we could tweak that later.","commit_id":"393d48566caa26a88fea15a6a5cfea7671798c30"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2142a0bd2fd42e1700b19e9b59f3f6d3e36bc3c4","unresolved":false,"context_lines":[{"line_number":64,"context_line":"providers with inventories of SRIOV_NET_VF resources. Those resource providers"},{"line_number":65,"context_line":"are contained on a compute host which has is a resource provider that has"},{"line_number":66,"context_line":"inventory records for *other* types of resources such as VCPU, MEMORY_MB or"},{"line_number":67,"context_line":"DISK_GB."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Use Cases"},{"line_number":70,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a77a97e_de80874c","line":67,"in_reply_to":"7a77a97e_f81b9b7e","updated":"2016-11-21 15:04:25.000000000","message":"@johnthetubaguy: no, not quite. Each compute node will have child resource providers for each NUMA node. Those child providers will have child resource providers representing the physical function affined to that NUMA node. Those leaf-level providers will that have an inventory amount of SRIOV_NET_VF.","commit_id":"393d48566caa26a88fea15a6a5cfea7671798c30"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d820347aaf23bf9f2213a25ee3fd01007a147d79","unresolved":false,"context_lines":[{"line_number":64,"context_line":"providers with inventories of SRIOV_NET_VF resources. Those resource providers"},{"line_number":65,"context_line":"are contained on a compute host which has is a resource provider that has"},{"line_number":66,"context_line":"inventory records for *other* types of resources such as VCPU, MEMORY_MB or"},{"line_number":67,"context_line":"DISK_GB."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Use Cases"},{"line_number":70,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a77a97e_f81b9b7e","line":67,"in_reply_to":"fa6399be_3846227b","updated":"2016-11-21 14:49:11.000000000","message":"So we have host -\u003e NUMA node -\u003e SRIOV_NET_VIF_NET_GROUP?\n\ni.e. each NUMA node has a resource provider for each network?\n\nThat sounds correct.","commit_id":"393d48566caa26a88fea15a6a5cfea7671798c30"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d820347aaf23bf9f2213a25ee3fd01007a147d79","unresolved":false,"context_lines":[{"line_number":77,"context_line":"As an NFV cloud operator, I wish to ensure that the memory and vCPU assigned to"},{"line_number":78,"context_line":"my workload is local to a particular NUMA topology and that those resources are"},{"line_number":79,"context_line":"represented in unique inventories per NUMA node and reported as separate"},{"line_number":80,"context_line":"allocations."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Proposed change"},{"line_number":83,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a77a97e_d386c015","line":80,"updated":"2016-11-21 14:49:11.000000000","message":"I think you also want the VNF on the same NUMA node as your other resources?","commit_id":"393d48566caa26a88fea15a6a5cfea7671798c30"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"8dc971f33b3b655276aba42e61846f382813662a","unresolved":false,"context_lines":[{"line_number":77,"context_line":"As an NFV cloud operator, I wish to ensure that the memory and vCPU assigned to"},{"line_number":78,"context_line":"my workload is local to a particular NUMA topology and that those resources are"},{"line_number":79,"context_line":"represented in unique inventories per NUMA node and reported as separate"},{"line_number":80,"context_line":"allocations."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Proposed change"},{"line_number":83,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3a71b18c_1b6043ce","line":80,"in_reply_to":"7a77a97e_be166bef","updated":"2016-12-01 17:03:58.000000000","message":"oops, yeah.","commit_id":"393d48566caa26a88fea15a6a5cfea7671798c30"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2142a0bd2fd42e1700b19e9b59f3f6d3e36bc3c4","unresolved":false,"context_lines":[{"line_number":77,"context_line":"As an NFV cloud operator, I wish to ensure that the memory and vCPU assigned to"},{"line_number":78,"context_line":"my workload is local to a particular NUMA topology and that those resources are"},{"line_number":79,"context_line":"represented in unique inventories per NUMA node and reported as separate"},{"line_number":80,"context_line":"allocations."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Proposed change"},{"line_number":83,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a77a97e_be166bef","line":80,"in_reply_to":"7a77a97e_d386c015","updated":"2016-11-21 15:04:25.000000000","message":"You mean VF, not VNF, right? :) And yes, that is a correct assumption.","commit_id":"393d48566caa26a88fea15a6a5cfea7671798c30"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d820347aaf23bf9f2213a25ee3fd01007a147d79","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"The scheduler reporting client shall be modified to track NUMA nodes and"},{"line_number":99,"context_line":"SRIOV-enabled NICs as child resource providers to a parent compute host"},{"line_number":100,"context_line":"resource provider."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Alternatives"},{"line_number":103,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a77a97e_53dab0ea","line":100,"updated":"2016-11-21 14:49:11.000000000","message":"I think it was this bit I had a question about. With shared storage, I think we were going to stop reporting local storage.\n\nIn a similar way, when you have NUMA aware reporting of capacity, do we want to stop reporting the global pool of RAM and vCPU, so we don\u0027t do double reporting of resources?\n\nMaybe I am wondering about the requesting of NUMA vs non-NUMA resources? How do we select what kind of resource pool or resource we are using? Do the NUMA nodes only contained PINNED_VCPU and PINNED_MEMORY_GB instead of VCPU and MEMORY_GB maybe? That way we are just reporting two related resources, not double reporting?","commit_id":"393d48566caa26a88fea15a6a5cfea7671798c30"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"8dc971f33b3b655276aba42e61846f382813662a","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"The scheduler reporting client shall be modified to track NUMA nodes and"},{"line_number":99,"context_line":"SRIOV-enabled NICs as child resource providers to a parent compute host"},{"line_number":100,"context_line":"resource provider."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Alternatives"},{"line_number":103,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3a71b18c_fb90e797","line":100,"in_reply_to":"5a74a57a_8d74079d","updated":"2016-12-01 17:03:58.000000000","message":"Yeah, thanks for capturing that in the update, it makes sense now.","commit_id":"393d48566caa26a88fea15a6a5cfea7671798c30"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2142a0bd2fd42e1700b19e9b59f3f6d3e36bc3c4","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"The scheduler reporting client shall be modified to track NUMA nodes and"},{"line_number":99,"context_line":"SRIOV-enabled NICs as child resource providers to a parent compute host"},{"line_number":100,"context_line":"resource provider."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Alternatives"},{"line_number":103,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a77a97e_7e9f7350","line":100,"in_reply_to":"7a77a97e_53dab0ea","updated":"2016-11-21 15:04:25.000000000","message":"Good questions. I discussed this with edleafe and danpb in BCN. What we agreed to in our little whiteboarding session is that a compute node with multiple NUMA nodes will either be set up to not care about placement of VCPU, MEMORY_MB and other resource classes across those NUMA nodes or they will be set up to care. In other words, we will not support workloads that want NUMA placement and workloads that don\u0027t care about NUMA placement on the same compute host.\n\nWe will use the pci_passthrough_whitelist nova.conf CONF option to trigger whether a compute host\u0027s multiple NUMA nodes will be created as child providers (same for SRIOV PFs). It\u0027s a bit hacky, but this is currently the only way we could think of to determine if a compute host should be used for NUMA-aware workloads or not.","commit_id":"393d48566caa26a88fea15a6a5cfea7671798c30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6ad003982ba38b54daca224a16de5ec0632a95e8","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"The scheduler reporting client shall be modified to track NUMA nodes and"},{"line_number":99,"context_line":"SRIOV-enabled NICs as child resource providers to a parent compute host"},{"line_number":100,"context_line":"resource provider."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Alternatives"},{"line_number":103,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a74a57a_8d74079d","line":100,"in_reply_to":"7a77a97e_7e9f7350","updated":"2016-11-23 20:26:08.000000000","message":"This is probably something worth calling out in the spec so we don\u0027t lose it.","commit_id":"393d48566caa26a88fea15a6a5cfea7671798c30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6ad003982ba38b54daca224a16de5ec0632a95e8","unresolved":false,"context_lines":[{"line_number":124,"context_line":"-----------------"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"Two new fields will be added to the `resource_providers` DB table:"},{"line_number":127,"context_line":"* `root_provider_uuid`: This will be populated using an online data migration"},{"line_number":128,"context_line":"  that sets `root_provider_uuid` to the value of the `resource_providers.uuid`"},{"line_number":129,"context_line":"  field for all existing resource providers."},{"line_number":130,"context_line":"* `parent_provider_uuid`: This will be a NULLable field and default to NULL"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a74a57a_2d3f73b5","line":127,"updated":"2016-11-23 20:26:08.000000000","message":"Need a blank line before this else it doesn\u0027t render properly.","commit_id":"393d48566caa26a88fea15a6a5cfea7671798c30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6ad003982ba38b54daca224a16de5ec0632a95e8","unresolved":false,"context_lines":[{"line_number":219,"context_line":"History"},{"line_number":220,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"None/"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a74a57a_4dbaef24","line":222,"range":{"start_line":222,"start_character":4,"end_line":222,"end_character":5},"updated":"2016-11-23 20:26:08.000000000","message":"nit: s/\\///","commit_id":"393d48566caa26a88fea15a6a5cfea7671798c30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"85fcd5151c7c7ecdb7974ca6ff6d1b931c7c4936","unresolved":false,"context_lines":[{"line_number":62,"context_line":"qualitative traits is the **resource provider** object. Therefore, we require a"},{"line_number":63,"context_line":"way of representing that the SRIOV-enabled NICs are themselves resource"},{"line_number":64,"context_line":"providers with inventories of SRIOV_NET_VF resources. Those resource providers"},{"line_number":65,"context_line":"are contained on a compute host which has is a resource provider that has"},{"line_number":66,"context_line":"inventory records for *other* types of resources such as VCPU, MEMORY_MB or"},{"line_number":67,"context_line":"DISK_GB."},{"line_number":68,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a74a57a_eaa14647","line":65,"range":{"start_line":65,"start_character":38,"end_line":65,"end_character":41},"updated":"2016-11-28 17:56:30.000000000","message":"Drop the \u0027has\u0027.","commit_id":"d9f5346d01633b4df15af1a53cdef9c0fdad0f0f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"85fcd5151c7c7ecdb7974ca6ff6d1b931c7c4936","unresolved":false,"context_lines":[{"line_number":110,"context_line":"out of scope for this spec. This spec is only about the inventorying of the"},{"line_number":111,"context_line":"various child providers with appropriate resource classes."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"On the CPU-pinning side of the equation, We do not plan to allow a compute node"},{"line_number":114,"context_line":"to serve as *either* a general-purpose compute node *or* as a target for"},{"line_number":115,"context_line":"NUMA-specific (pinned) workloads. A compute node will be either a target for"},{"line_number":116,"context_line":"pinned workloads or it will be a target for generic (floating CPU) workloads."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a74a57a_2a6c1e34","line":113,"range":{"start_line":113,"start_character":41,"end_line":113,"end_character":43},"updated":"2016-11-28 17:56:30.000000000","message":"s/We/we/ unless you mean the royal we.","commit_id":"d9f5346d01633b4df15af1a53cdef9c0fdad0f0f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"85fcd5151c7c7ecdb7974ca6ff6d1b931c7c4936","unresolved":false,"context_lines":[{"line_number":150,"context_line":"-----------------"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"Two new fields will be added to the `resource_providers` DB table:"},{"line_number":153,"context_line":"* `root_provider_uuid`: This will be populated using an online data migration"},{"line_number":154,"context_line":"  that sets `root_provider_uuid` to the value of the `resource_providers.uuid`"},{"line_number":155,"context_line":"  field for all existing resource providers."},{"line_number":156,"context_line":"* `parent_provider_uuid`: This will be a NULLable field and default to NULL"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a74a57a_aaf4ae5a","line":153,"updated":"2016-11-28 17:56:30.000000000","message":"Need a blank line before the bullet list.","commit_id":"d9f5346d01633b4df15af1a53cdef9c0fdad0f0f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"85fcd5151c7c7ecdb7974ca6ff6d1b931c7c4936","unresolved":false,"context_lines":[{"line_number":245,"context_line":"History"},{"line_number":246,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"None/"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a74a57a_eaea2673","line":248,"range":{"start_line":248,"start_character":4,"end_line":248,"end_character":5},"updated":"2016-11-28 17:56:30.000000000","message":"Drop the /","commit_id":"d9f5346d01633b4df15af1a53cdef9c0fdad0f0f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b2005ede23df83fb29d522cb41e261afc7fdbe8b","unresolved":false,"context_lines":[{"line_number":62,"context_line":"qualitative traits is the **resource provider** object. Therefore, we require a"},{"line_number":63,"context_line":"way of representing that the SRIOV-enabled NICs are themselves resource"},{"line_number":64,"context_line":"providers with inventories of SRIOV_NET_VF resources. Those resource providers"},{"line_number":65,"context_line":"are contained on a compute host which is a resource provider that has"},{"line_number":66,"context_line":"inventory records for *other* types of resources such as VCPU, MEMORY_MB or"},{"line_number":67,"context_line":"DISK_GB."},{"line_number":68,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"3a71b18c_72415b39","line":65,"range":{"start_line":65,"start_character":4,"end_line":65,"end_character":31},"updated":"2016-12-01 17:05:32.000000000","message":"Nit: the NUMA relationship isn\u0027t quite captured here, but we seem to agree on the notes of the previous version, so not blocking on that.","commit_id":"1706db5ccf696f00c9cd871658ace2d3db576211"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b2005ede23df83fb29d522cb41e261afc7fdbe8b","unresolved":false,"context_lines":[{"line_number":90,"context_line":"* `root_provider_uuid`: Indicates the UUID of the resource provider that is at"},{"line_number":91,"context_line":"  the \"root\" of the tree of providers. This field allows us to implement"},{"line_number":92,"context_line":"  efficient tree-access queries and avoid use of recursive queries to follow"},{"line_number":93,"context_line":"  child-\u003eparent relations."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"A new microversion will be added to the placement REST API that adds the above"},{"line_number":96,"context_line":"attributes to the appropriate request and response payloads."}],"source_content_type":"text/x-rst","patch_set":4,"id":"3a71b18c_d2e4ef3c","line":93,"updated":"2016-12-01 17:05:32.000000000","message":"oh, good call.","commit_id":"1706db5ccf696f00c9cd871658ace2d3db576211"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b2005ede23df83fb29d522cb41e261afc7fdbe8b","unresolved":false,"context_lines":[{"line_number":102,"context_line":"The `VCPU` and `MEMORY_MB` resource classes will continue to be inventoried on"},{"line_number":103,"context_line":"the parent resource provider (i.e the compute node resource provider) and not"},{"line_number":104,"context_line":"the NUMA node child providers. The NUMA node child providers will have"},{"line_number":105,"context_line":"inventory records populated for the `NUMA_CORE`, `NUMA_THREAD` and"},{"line_number":106,"context_line":"`NUMA_MEMORY_MB` resource classes. When a boot request is received, the Nova"},{"line_number":107,"context_line":"API service will need to determine whether the request (flavor and image)"},{"line_number":108,"context_line":"specifies a particular NUMA topology and, if so, construct the request to the"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3a71b18c_72b07b8c","line":105,"range":{"start_line":105,"start_character":36,"end_line":105,"end_character":62},"updated":"2016-12-01 17:05:32.000000000","message":"Hmm, I was expecting NUMA_VCPU. But we do need the distinction, as you can pin to a thread of the whole core, as I understand it. A trivial example here might be useful, like:\n\n* two sockets, each CPU socket has a two core chip with hyperthreading, it could look like...\n* Node 1 resource provider: NUMA_CORE\u003d2, NUMA_THREAD\u003d4, NUMA_MEM\u003d16GB (the reservations for CPU and memory are all applied to Node 1, used for runing nova-compute, etc)\n* Node 2 resource provider: NUMA_CORE\u003d2, NUMA_THREAD\u003d4, NUMA_MEM\u003d8GB (this one has some free ram slots)","commit_id":"1706db5ccf696f00c9cd871658ace2d3db576211"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b2005ede23df83fb29d522cb41e261afc7fdbe8b","unresolved":false,"context_lines":[{"line_number":117,"context_line":"It is not yet clear what we will use to indicate that a compute node targets"},{"line_number":118,"context_line":"floating workloads or not. Initial thoughts were to use the"},{"line_number":119,"context_line":"pci_passthrough_whitelist CONF option to determine this however this still"},{"line_number":120,"context_line":"needs to be debated."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"This spec will simply ensure that if a virt driver returns a NUMATopology"},{"line_number":123,"context_line":"object in the result of its get_available_resource() call, then we will create"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3a71b18c_3874259b","line":120,"updated":"2016-12-01 17:05:32.000000000","message":"Feels like a new config to me, like host_pin_strategy or something, but like you say, it doesn\u0027t really matter for now. Its tempting to report Threads or Cores, for example. Anyways, laters.","commit_id":"1706db5ccf696f00c9cd871658ace2d3db576211"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b2005ede23df83fb29d522cb41e261afc7fdbe8b","unresolved":false,"context_lines":[{"line_number":144,"context_line":"SRIOV_NET_VF resource class. Secondly, we are coupling the qualitative and"},{"line_number":145,"context_line":"quantitative aspects of a provider together again, which is part of the problem"},{"line_number":146,"context_line":"with the existing Nova codebase and why it has been hard to standardize the"},{"line_number":147,"context_line":"tracking and scheduling of resources in the first place."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"Data model impact"},{"line_number":150,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3a71b18c_d8a09193","line":147,"updated":"2016-12-01 17:05:32.000000000","message":"+1","commit_id":"1706db5ccf696f00c9cd871658ace2d3db576211"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b2005ede23df83fb29d522cb41e261afc7fdbe8b","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"* `root_provider_uuid`: This will be populated using an online data migration"},{"line_number":155,"context_line":"  that sets `root_provider_uuid` to the value of the `resource_providers.uuid`"},{"line_number":156,"context_line":"  field for all existing resource providers."},{"line_number":157,"context_line":"* `parent_provider_uuid`: This will be a NULLable field and default to NULL"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"REST API impact"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3a71b18c_780cdd94","line":156,"updated":"2016-12-01 17:05:32.000000000","message":"yeah, next cycle we can stop that being a NULLable field.","commit_id":"1706db5ccf696f00c9cd871658ace2d3db576211"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b2005ede23df83fb29d522cb41e261afc7fdbe8b","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"The `GET /resource-providers` call will get a new filter on `root\u003d{uuid}` that,"},{"line_number":166,"context_line":"when present, will return all resource provider records, inclusive of the root,"},{"line_number":167,"context_line":"having a `root_provider_uuid` equal to `{uuid}`."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"Security impact"},{"line_number":170,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3a71b18c_985ff971","line":167,"updated":"2016-12-01 17:05:32.000000000","message":"I would normally ask for more detail here, but honestly I trust you all to do the right thing, more so than myself, so I am not going to.","commit_id":"1706db5ccf696f00c9cd871658ace2d3db576211"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b2005ede23df83fb29d522cb41e261afc7fdbe8b","unresolved":false,"context_lines":[{"line_number":246,"context_line":"History"},{"line_number":247,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"None."}],"source_content_type":"text/x-rst","patch_set":4,"id":"3a71b18c_98a45958","line":249,"updated":"2016-12-01 17:05:32.000000000","message":"This really doesn\u0027t represent the journey we have all gone through to get here, but that doesn\u0027t go here :)","commit_id":"1706db5ccf696f00c9cd871658ace2d3db576211"}]}
