)]}'
{"specs/queens/approved/nested-resource-providers.rst":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c1e2ead71d201514dc04e1f69d9c7d2604d2e444","unresolved":false,"context_lines":[{"line_number":74,"context_line":"want to be able to view the resource consumption of SRIOV virtual functions on"},{"line_number":75,"context_line":"a per-physical-network basis."},{"line_number":76,"context_line":""},{"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":"ff5d4b2f_1b552451","line":80,"range":{"start_line":77,"start_character":0,"end_line":80,"end_character":12},"updated":"2017-09-19 16:01:00.000000000","message":"As far as I understood from the PTG discussion we are not aiming for supporting the NUMA use case in Queens just the SRIOV one. Can we somehow note this?","commit_id":"426f6c9d035c65e4bd342b8d5ac9cefc8473c043"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e1db65e77b3373b98eb8ab36e6b52f9f87028252","unresolved":false,"context_lines":[{"line_number":164,"context_line":"`root_provider_uuid` and `parent_provider_uuid` fields will be added to the"},{"line_number":165,"context_line":"corresponding request and response payloads of appropriate placement REST APIs."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"The `GET /resource-providers` and `GET /allocation_candidates` calls will get a"},{"line_number":168,"context_line":"new filter on `root\u003d{uuid}` that, when present, will return all resource"},{"line_number":169,"context_line":"provider records, inclusive of the root, having a `root_provider_uuid` equal to"},{"line_number":170,"context_line":"`{uuid}`."}],"source_content_type":"text/x-rst","patch_set":1,"id":"ff5d4b2f_1bc2c186","line":167,"range":{"start_line":167,"start_character":9,"end_line":167,"end_character":28},"updated":"2017-09-19 14:52:53.000000000","message":"nit: should actually be GET /resource_providers.","commit_id":"426f6c9d035c65e4bd342b8d5ac9cefc8473c043"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e1db65e77b3373b98eb8ab36e6b52f9f87028252","unresolved":false,"context_lines":[{"line_number":218,"context_line":"* Add DB schema and object model changes"},{"line_number":219,"context_line":"* Add REST API microversion adding new attributes for resource providers"},{"line_number":220,"context_line":"* Add REST API microversion adding new `root\u003d{uuid}` filter on `GET"},{"line_number":221,"context_line":"  /resource-providers`"},{"line_number":222,"context_line":"* Add code in scheduler reporting client to track NUMA nodes as child resource"},{"line_number":223,"context_line":"  providers on the parent compute host resource provider"},{"line_number":224,"context_line":"* Add code in scheduler reporting client to track SRIOV PFs as child resource"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ff5d4b2f_5b45d916","line":221,"range":{"start_line":221,"start_character":2,"end_line":221,"end_character":21},"updated":"2017-09-19 14:52:53.000000000","message":"same, plus missing GET /allocation_candidates.","commit_id":"426f6c9d035c65e4bd342b8d5ac9cefc8473c043"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c1e2ead71d201514dc04e1f69d9c7d2604d2e444","unresolved":false,"context_lines":[{"line_number":219,"context_line":"* Add REST API microversion adding new attributes for resource providers"},{"line_number":220,"context_line":"* Add REST API microversion adding new `root\u003d{uuid}` filter on `GET"},{"line_number":221,"context_line":"  /resource_providers` and `GET /allocation_candidates`"},{"line_number":222,"context_line":"* Add code in scheduler reporting client to track NUMA nodes as child resource"},{"line_number":223,"context_line":"  providers on the parent compute host resource provider"},{"line_number":224,"context_line":"* Add code in scheduler reporting client to track SRIOV PFs as child resource"},{"line_number":225,"context_line":"  providers on the parent compute host resource provider"},{"line_number":226,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ff5d4b2f_2152f268","line":223,"range":{"start_line":222,"start_character":2,"end_line":223,"end_character":56},"updated":"2017-09-19 16:01:00.000000000","message":"As far as I understand from the PTG we are not intended to do this in Queens.","commit_id":"020e4a9e563c56cf162eec3a8cd572bb83a19b83"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"6feccea8079acc0d2423ef6c563bfacf927f0e15","unresolved":false,"context_lines":[{"line_number":219,"context_line":"* Add REST API microversion adding new attributes for resource providers"},{"line_number":220,"context_line":"* Add REST API microversion adding new `root\u003d{uuid}` filter on `GET"},{"line_number":221,"context_line":"  /resource_providers` and `GET /allocation_candidates`"},{"line_number":222,"context_line":"* Add code in scheduler reporting client to track NUMA nodes as child resource"},{"line_number":223,"context_line":"  providers on the parent compute host resource provider"},{"line_number":224,"context_line":"* Add code in scheduler reporting client to track SRIOV PFs as child resource"},{"line_number":225,"context_line":"  providers on the parent compute host resource provider"},{"line_number":226,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ff5d4b2f_075c9e49","line":223,"range":{"start_line":222,"start_character":2,"end_line":223,"end_character":56},"in_reply_to":"ff5d4b2f_2152f268","updated":"2017-09-19 17:28:50.000000000","message":"We typically list the work items for the entire spec, even if it isn\u0027t expected that it will be completed in a single release cycle, as that gives a more complete picture of why this is important. I\u0027ll add wording that clarifies that this is expected to take more than just the Queens cycle to complete.","commit_id":"020e4a9e563c56cf162eec3a8cd572bb83a19b83"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cbc10377aa19d66a7a66fa3eb83bbab9d151b7","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/nested-resource-providers"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"We propose changing the database schema, object model and REST API of resource"},{"line_number":14,"context_line":"providers to allow a hierarchical relationship between different resource"},{"line_number":15,"context_line":"providers to be represented."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_15af3e95","line":14,"range":{"start_line":14,"start_character":47,"end_line":14,"end_character":54},"updated":"2017-09-21 22:48:19.000000000","message":"or even among","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a47c7f1f18406e44771e929a9ebcdc1f96076006","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/nested-resource-providers"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"We propose changing the database schema, object model and REST API of resource"},{"line_number":14,"context_line":"providers to allow a hierarchical relationship between different resource"},{"line_number":15,"context_line":"providers to be represented."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_7f31650b","line":14,"range":{"start_line":14,"start_character":47,"end_line":14,"end_character":54},"in_reply_to":"7f515b1d_15af3e95","updated":"2017-09-25 21:13:02.000000000","message":"Done","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cbc10377aa19d66a7a66fa3eb83bbab9d151b7","unresolved":false,"context_lines":[{"line_number":24,"context_line":"answer the questions:"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"* \"how many of a type of resource does this provider have available?\""},{"line_number":27,"context_line":"* \"how much of a type of resource is being consumed in the system?\""},{"line_number":28,"context_line":"* \"what level of over-commit does each provider expose for each type of"},{"line_number":29,"context_line":"  resource?\""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_d59e4653","line":27,"updated":"2017-09-21 22:48:19.000000000","message":"Worth mentioning traits here?\n\n * \"what are the characteristics of this provider\u0027s resources?\"\n\n[Later] Yeah, cause you start talking about traits on L54.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d21779949426872584d977105049ce9b59b10f94","unresolved":false,"context_lines":[{"line_number":24,"context_line":"answer the questions:"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"* \"how many of a type of resource does this provider have available?\""},{"line_number":27,"context_line":"* \"how much of a type of resource is being consumed in the system?\""},{"line_number":28,"context_line":"* \"what level of over-commit does each provider expose for each type of"},{"line_number":29,"context_line":"  resource?\""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_24c0837b","line":27,"in_reply_to":"7f515b1d_24bc11db","updated":"2017-09-25 18:36:20.000000000","message":"Well, that spec should only explain *why* we need nested resource providers, ie. because we need /moar/ ways to count resources and differenciate between them, aka. talking about consumable things (and not about *describing* things).\n+1 with Jay about the grammar FWIW too.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e530e9b6fc0f3e941ba2445719817bba7a102f4","unresolved":false,"context_lines":[{"line_number":24,"context_line":"answer the questions:"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"* \"how many of a type of resource does this provider have available?\""},{"line_number":27,"context_line":"* \"how much of a type of resource is being consumed in the system?\""},{"line_number":28,"context_line":"* \"what level of over-commit does each provider expose for each type of"},{"line_number":29,"context_line":"  resource?\""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_3a3c1ebe","line":27,"in_reply_to":"7f515b1d_24c0837b","updated":"2017-09-25 19:18:57.000000000","message":"Sorry, the intro paragraph is explicitly talking about inventory amonuts; traits don\u0027t apply here.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a47c7f1f18406e44771e929a9ebcdc1f96076006","unresolved":false,"context_lines":[{"line_number":24,"context_line":"answer the questions:"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"* \"how many of a type of resource does this provider have available?\""},{"line_number":27,"context_line":"* \"how much of a type of resource is being consumed in the system?\""},{"line_number":28,"context_line":"* \"what level of over-commit does each provider expose for each type of"},{"line_number":29,"context_line":"  resource?\""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_bf591d5b","line":27,"in_reply_to":"7f515b1d_3a3c1ebe","updated":"2017-09-25 21:13:02.000000000","message":"L20-21 says \"we now have a new way to account for quantitative resources in the system\". So no, traits don\u0027t belong here. And really, this is a complex spec that\u0027s been approved twice already, and you\u0027re worrying about this wording?","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"23cf978f4f6a94bd24cfd497698a36381b42aedf","unresolved":false,"context_lines":[{"line_number":24,"context_line":"answer the questions:"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"* \"how many of a type of resource does this provider have available?\""},{"line_number":27,"context_line":"* \"how much of a type of resource is being consumed in the system?\""},{"line_number":28,"context_line":"* \"what level of over-commit does each provider expose for each type of"},{"line_number":29,"context_line":"  resource?\""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_a21c60c1","line":27,"in_reply_to":"7f515b1d_bf591d5b","updated":"2017-09-25 21:47:18.000000000","message":"Nope, agreed above, I retract my original comment.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"46a2868b782be0fee41cb1c9873fee3189dcf3d6","unresolved":false,"context_lines":[{"line_number":24,"context_line":"answer the questions:"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"* \"how many of a type of resource does this provider have available?\""},{"line_number":27,"context_line":"* \"how much of a type of resource is being consumed in the system?\""},{"line_number":28,"context_line":"* \"what level of over-commit does each provider expose for each type of"},{"line_number":29,"context_line":"  resource?\""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_24bc11db","line":27,"in_reply_to":"7f515b1d_d59e4653","updated":"2017-09-25 12:09:01.000000000","message":"The aren\u0027t characteristics of the provider\u0027s resources. They are characteristics of the provider itself.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cbc10377aa19d66a7a66fa3eb83bbab9d151b7","unresolved":false,"context_lines":[{"line_number":43,"context_line":"when handling SRIOV_NET_VF resources for NICs on a compute host."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"In the case of NUMA nodes, the system must be able to track how many VCPU and"},{"line_number":46,"context_line":"MEMORY_MB have been allocated to each individual NUMA node on the host."},{"line_number":47,"context_line":"Allocating memory to a guest and having that memory span address space across"},{"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"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_35b11ae3","line":46,"range":{"start_line":46,"start_character":30,"end_line":46,"end_character":32},"updated":"2017-09-21 22:48:19.000000000","message":"from","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a47c7f1f18406e44771e929a9ebcdc1f96076006","unresolved":false,"context_lines":[{"line_number":43,"context_line":"when handling SRIOV_NET_VF resources for NICs on a compute host."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"In the case of NUMA nodes, the system must be able to track how many VCPU and"},{"line_number":46,"context_line":"MEMORY_MB have been allocated to each individual NUMA node on the host."},{"line_number":47,"context_line":"Allocating memory to a guest and having that memory span address space across"},{"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"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_df1f396e","line":46,"range":{"start_line":46,"start_character":30,"end_line":46,"end_character":32},"in_reply_to":"7f515b1d_35b11ae3","updated":"2017-09-25 21:13:02.000000000","message":"Done","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cbc10377aa19d66a7a66fa3eb83bbab9d151b7","unresolved":false,"context_lines":[{"line_number":47,"context_line":"Allocating memory to a guest and having that memory span address space across"},{"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"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_7578b2f7","line":50,"updated":"2017-09-21 22:48:19.000000000","message":"Then again, some workloads don\u0027t care, and shouldn\u0027t be limited to getting all of their MEMORY_MB resource from a single RP.\n\nI bring this up for the case where e.g. I request MEMORY_MB:2048, but I\u0027m down to four NUMA nodes with 1024 each.  That request should succeed unless I\u0027ve explicitly asked for NUMA affinity.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d21779949426872584d977105049ce9b59b10f94","unresolved":false,"context_lines":[{"line_number":47,"context_line":"Allocating memory to a guest and having that memory span address space across"},{"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"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_c4088fda","line":50,"in_reply_to":"7f515b1d_6587c7d9","updated":"2017-09-25 18:36:20.000000000","message":"Before telling whether we should get rid of a very specific filter, we should at least wait for seeing what we could do with nested RPs. Looks a bit premature to talk about that here and now :-)","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c202ca692b0a423a272ff23b538bb1d7a83406cd","unresolved":false,"context_lines":[{"line_number":47,"context_line":"Allocating memory to a guest and having that memory span address space across"},{"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"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_a9892327","line":50,"in_reply_to":"7f515b1d_7578b2f7","updated":"2017-09-22 12:24:21.000000000","message":"Does this case also make sense for VFs? So asking for two VFs but not specifying any constraint about how many PFs that two VFs should belong to (e.g. not specifying different traits) means that this request can be fulfilled with one VF from two PFs each or two VFs from the same PF.\n\n\nOn the other hand it worth to mention that nova does not work  this way regarding NUMA today. If NumaTopologyFilter is enabled and the flavor does not specify  hw:numa_nodes then that value is default to 1. This means that if you request two 1G huge pages and the host has two free 1G huge pages but they are connected to two different NUMA nodes then that host will not be returned by the NumaTopologyFilter. There is no way to specify in the flavor that you don\u0027t care about the number of NUMA nodes the requested huge pages are connected.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7d52920627f2681391fe7f5c9ba0252ccea2c27e","unresolved":false,"context_lines":[{"line_number":47,"context_line":"Allocating memory to a guest and having that memory span address space across"},{"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"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_6587c7d9","line":50,"in_reply_to":"7f515b1d_a9892327","updated":"2017-09-22 16:01:41.000000000","message":"@gibi, yes, it also applies to VFs just as you\u0027ve described.\n\nAnd yes, that is exactly (part of) my point: If NumaTopologyFilter is in play, that request *should* fail; but if NumaTopologyFilter is *not* in play, it should absolutely succeed (and give me memory that spans NUMA nodes).\n\nThat said, just because there\u0027s no way to do make that distinction in the flavor today doesn\u0027t mean we have to preserve that limitation.  I think that\u0027s one of the benefits we can get out of generic/nested RPs if we do it right.  It\u0027s clear we need the syntax that allows me to ask for resources from a) the same RP, b) explicitly different RPs (via traits), and c) wherever, don\u0027t care.  Once we have that, it can apply just as well to NUMA configurations as to SR-IOV VFs (or whatever).  So maybe we can get rid of the NumaTopologyFilter entirely at that point, because we can express NUMA-ness per flavor.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a47c7f1f18406e44771e929a9ebcdc1f96076006","unresolved":false,"context_lines":[{"line_number":47,"context_line":"Allocating memory to a guest and having that memory span address space across"},{"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"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_c21cfc6b","line":50,"in_reply_to":"7f515b1d_c4088fda","updated":"2017-09-25 21:13:02.000000000","message":"@Sylvain +1\n\nLet\u0027s not get lost in the minutiae. This spec is saying that we will add the ability to select based on nested providers. It is not mandating how a deployment must be set up.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cbc10377aa19d66a7a66fa3eb83bbab9d151b7","unresolved":false,"context_lines":[{"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."},{"line_number":55,"context_line":"For example, the NIC called enp2s0 might have a trait \"network:public\""},{"line_number":56,"context_line":"indicating that the NIC is attached to a physical network called \"public\". The"},{"line_number":57,"context_line":"NIC enp2s1 might have a trait \"network:intranet\" that indicates the NIC is"},{"line_number":58,"context_line":"attached to the physical network called \"Intranet\". We need a way of"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_b5d98a23","line":55,"range":{"start_line":55,"start_character":55,"end_line":55,"end_character":69},"updated":"2017-09-21 22:48:19.000000000","message":"Convert these to the new format (\"CUSTOM_PHYSNET_PUBLIC\") for the sanity of the guy who hasn\u0027t experienced the whole design history. (Throughout)","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a47c7f1f18406e44771e929a9ebcdc1f96076006","unresolved":false,"context_lines":[{"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."},{"line_number":55,"context_line":"For example, the NIC called enp2s0 might have a trait \"network:public\""},{"line_number":56,"context_line":"indicating that the NIC is attached to a physical network called \"public\". The"},{"line_number":57,"context_line":"NIC enp2s1 might have a trait \"network:intranet\" that indicates the NIC is"},{"line_number":58,"context_line":"attached to the physical network called \"Intranet\". We need a way of"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_e236d8e7","line":55,"range":{"start_line":55,"start_character":55,"end_line":55,"end_character":69},"in_reply_to":"7f515b1d_248f7124","updated":"2017-09-25 21:13:02.000000000","message":"Done","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"46a2868b782be0fee41cb1c9873fee3189dcf3d6","unresolved":false,"context_lines":[{"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."},{"line_number":55,"context_line":"For example, the NIC called enp2s0 might have a trait \"network:public\""},{"line_number":56,"context_line":"indicating that the NIC is attached to a physical network called \"public\". The"},{"line_number":57,"context_line":"NIC enp2s1 might have a trait \"network:intranet\" that indicates the NIC is"},{"line_number":58,"context_line":"attached to the physical network called \"Intranet\". We need a way of"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_248f7124","line":55,"range":{"start_line":55,"start_character":55,"end_line":55,"end_character":69},"in_reply_to":"7f515b1d_b5d98a23","updated":"2017-09-25 12:09:01.000000000","message":"ack, good point.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a47c7f1f18406e44771e929a9ebcdc1f96076006","unresolved":false,"context_lines":[{"line_number":54,"context_line":"NICs on a compute host, different qualitative traits may be tagged to each NIC."},{"line_number":55,"context_line":"For example, the NIC called enp2s0 might have a trait \"network:public\""},{"line_number":56,"context_line":"indicating that the NIC is attached to a physical network called \"public\". The"},{"line_number":57,"context_line":"NIC enp2s1 might have a trait \"network:intranet\" that indicates the NIC is"},{"line_number":58,"context_line":"attached to the physical network called \"Intranet\". We need a way of"},{"line_number":59,"context_line":"representing that these NICs each provide SRIOV_NET_VF resources but those"},{"line_number":60,"context_line":"virtual functions are associated with different physical networks. In the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_827604a4","line":57,"range":{"start_line":57,"start_character":31,"end_line":57,"end_character":47},"updated":"2017-09-25 21:13:02.000000000","message":"Also changed this one.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9db82ded2f2bc03d3691f6ace777b49279332e80","unresolved":false,"context_lines":[{"line_number":89,"context_line":"  providers, this will most likely be the compute host\u0027s UUID. To be clear,"},{"line_number":90,"context_line":"  a resource provider can have 0 or 1 parents. We will not support multiple"},{"line_number":91,"context_line":"  parents for a resource provider."},{"line_number":92,"context_line":"* `root_provider_uuid`: Indicates the UUID of the resource provider that is at"},{"line_number":93,"context_line":"  the \"root\" of the tree of providers. This field allows us to implement"},{"line_number":94,"context_line":"  efficient tree-access queries and avoid use of recursive queries to follow"},{"line_number":95,"context_line":"  child-\u003eparent relations."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"A new microversion will be added to the placement REST API that adds the above"},{"line_number":98,"context_line":"attributes to the appropriate request and response payloads."}],"source_content_type":"text/x-rst","patch_set":3,"id":"bf57530f_c3f9e54d","line":95,"range":{"start_line":92,"start_character":1,"end_line":95,"end_character":26},"updated":"2017-09-20 09:13:38.000000000","message":"So for a compute provider the root_provider_uuid will be set to its own uuid. For a nested provider it will be set to the compute provider uuid the nested provider connected to. Will it be set to Null in case of a shared provider? Or do we have to have multiple root provider uuids set for a shared provider as it can be connected to multiple root providers? \n(I know that shared is out of the picture right now but I\u0027d like to see that this model is meaningful in the future as well)","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c202ca692b0a423a272ff23b538bb1d7a83406cd","unresolved":false,"context_lines":[{"line_number":89,"context_line":"  providers, this will most likely be the compute host\u0027s UUID. To be clear,"},{"line_number":90,"context_line":"  a resource provider can have 0 or 1 parents. We will not support multiple"},{"line_number":91,"context_line":"  parents for a resource provider."},{"line_number":92,"context_line":"* `root_provider_uuid`: Indicates the UUID of the resource provider that is at"},{"line_number":93,"context_line":"  the \"root\" of the tree of providers. This field allows us to implement"},{"line_number":94,"context_line":"  efficient tree-access queries and avoid use of recursive queries to follow"},{"line_number":95,"context_line":"  child-\u003eparent relations."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"A new microversion will be added to the placement REST API that adds the above"},{"line_number":98,"context_line":"attributes to the appropriate request and response payloads."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_c9a8df78","line":95,"range":{"start_line":92,"start_character":1,"end_line":95,"end_character":26},"in_reply_to":"7f515b1d_7a9421e9","updated":"2017-09-22 12:24:21.000000000","message":"OK, that make sense. Thanks.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c73f8a1a9bc960c54dd787deb5a5c0179271560f","unresolved":false,"context_lines":[{"line_number":89,"context_line":"  providers, this will most likely be the compute host\u0027s UUID. To be clear,"},{"line_number":90,"context_line":"  a resource provider can have 0 or 1 parents. We will not support multiple"},{"line_number":91,"context_line":"  parents for a resource provider."},{"line_number":92,"context_line":"* `root_provider_uuid`: Indicates the UUID of the resource provider that is at"},{"line_number":93,"context_line":"  the \"root\" of the tree of providers. This field allows us to implement"},{"line_number":94,"context_line":"  efficient tree-access queries and avoid use of recursive queries to follow"},{"line_number":95,"context_line":"  child-\u003eparent relations."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"A new microversion will be added to the placement REST API that adds the above"},{"line_number":98,"context_line":"attributes to the appropriate request and response payloads."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_7a9421e9","line":95,"range":{"start_line":92,"start_character":1,"end_line":95,"end_character":26},"in_reply_to":"bf57530f_c3f9e54d","updated":"2017-09-21 21:45:30.000000000","message":"Since a shared resource is not \"inside\" a compute node, it\u0027s root_provider_uuid will be its own. The allocation returned from placement for, say, a shared disk would have the compute node as the root RP for ram, cpu, and any nested PCI devices, and the shared disk as the root RP for the disk.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cbc10377aa19d66a7a66fa3eb83bbab9d151b7","unresolved":false,"context_lines":[{"line_number":97,"context_line":"A new microversion will be added to the placement REST API that adds the above"},{"line_number":98,"context_line":"attributes to the appropriate request and response payloads."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"The scheduler reporting client shall be modified to track NUMA nodes and"},{"line_number":101,"context_line":"SRIOV-enabled NICs as child resource providers to a parent compute host"},{"line_number":102,"context_line":"resource provider."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"The `VCPU` and `MEMORY_MB` resource classes will continue to be inventoried on"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_c01b2271","line":101,"range":{"start_line":100,"start_character":58,"end_line":101,"end_character":18},"updated":"2017-09-21 22:48:19.000000000","message":"Oh?  I thought this work was out of scope for Q.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a47c7f1f18406e44771e929a9ebcdc1f96076006","unresolved":false,"context_lines":[{"line_number":97,"context_line":"A new microversion will be added to the placement REST API that adds the above"},{"line_number":98,"context_line":"attributes to the appropriate request and response payloads."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"The scheduler reporting client shall be modified to track NUMA nodes and"},{"line_number":101,"context_line":"SRIOV-enabled NICs as child resource providers to a parent compute host"},{"line_number":102,"context_line":"resource provider."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"The `VCPU` and `MEMORY_MB` resource classes will continue to be inventoried on"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_c263dcdb","line":101,"range":{"start_line":100,"start_character":58,"end_line":101,"end_character":18},"in_reply_to":"7f515b1d_84e057fc","updated":"2017-09-25 21:13:02.000000000","message":"It helps to describe the full picture in the spec.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d21779949426872584d977105049ce9b59b10f94","unresolved":false,"context_lines":[{"line_number":97,"context_line":"A new microversion will be added to the placement REST API that adds the above"},{"line_number":98,"context_line":"attributes to the appropriate request and response payloads."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"The scheduler reporting client shall be modified to track NUMA nodes and"},{"line_number":101,"context_line":"SRIOV-enabled NICs as child resource providers to a parent compute host"},{"line_number":102,"context_line":"resource provider."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"The `VCPU` and `MEMORY_MB` resource classes will continue to be inventoried on"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_84e057fc","line":101,"range":{"start_line":100,"start_character":58,"end_line":101,"end_character":18},"in_reply_to":"7f515b1d_c01b2271","updated":"2017-09-25 18:36:20.000000000","message":"Well, we can leave it in the spec as a possible usecase for the future tho.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cbc10377aa19d66a7a66fa3eb83bbab9d151b7","unresolved":false,"context_lines":[{"line_number":101,"context_line":"SRIOV-enabled NICs as child resource providers to a parent compute host"},{"line_number":102,"context_line":"resource provider."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"The `VCPU` and `MEMORY_MB` resource classes will continue to be inventoried on"},{"line_number":105,"context_line":"the parent resource provider (i.e the compute node resource provider) and not"},{"line_number":106,"context_line":"the NUMA node child providers. The NUMA node child providers will have"},{"line_number":107,"context_line":"inventory records populated for the `NUMA_CORE`, `NUMA_THREAD` and"},{"line_number":108,"context_line":"`NUMA_MEMORY_MB` resource classes. When a boot request is received, the Nova"},{"line_number":109,"context_line":"API service will need to determine whether the request (flavor and image)"},{"line_number":110,"context_line":"specifies a particular NUMA topology and, if so, construct the request to the"},{"line_number":111,"context_line":"placement service for the appropriate `NUMA_XXX` resources. This is currently"},{"line_number":112,"context_line":"out of scope for this spec. This spec is only about the inventorying of the"},{"line_number":113,"context_line":"various child providers with appropriate resource classes."},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_e0685e22","line":111,"range":{"start_line":104,"start_character":0,"end_line":111,"end_character":59},"updated":"2017-09-21 22:48:19.000000000","message":"Okay, I don\u0027t agree with this.  Then when you do an allocation with NUMA_XXX resources, you would also need to allocate against the corresponding XXX in the parent RP.  In addition to being more paperwork (with all the complexity and error-prone-ness that entails), it requires placement to have an understanding of the internals of the model.\n\nInstead, the compute RP should *not* have VCPU and MEMORY_MB inventory; and each NUMA node should have inventory in the VCPU and MEMORY_MB classes (i.e. not named differently).\n\nNow when I ask for e.g. VCPU:2,MEMORY_MB:2048, I have to let placement know whether I need it all to be from the same RP (presumably the default is \"no\").  This relates to [DP4] here: https://etherpad.openstack.org/p/nova-ptg-queens-generic-device-management\n\nSince the next sentence declares all of this to be out of scope, you could just punt and remove this chunk.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a47c7f1f18406e44771e929a9ebcdc1f96076006","unresolved":false,"context_lines":[{"line_number":101,"context_line":"SRIOV-enabled NICs as child resource providers to a parent compute host"},{"line_number":102,"context_line":"resource provider."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"The `VCPU` and `MEMORY_MB` resource classes will continue to be inventoried on"},{"line_number":105,"context_line":"the parent resource provider (i.e the compute node resource provider) and not"},{"line_number":106,"context_line":"the NUMA node child providers. The NUMA node child providers will have"},{"line_number":107,"context_line":"inventory records populated for the `NUMA_CORE`, `NUMA_THREAD` and"},{"line_number":108,"context_line":"`NUMA_MEMORY_MB` resource classes. When a boot request is received, the Nova"},{"line_number":109,"context_line":"API service will need to determine whether the request (flavor and image)"},{"line_number":110,"context_line":"specifies a particular NUMA topology and, if so, construct the request to the"},{"line_number":111,"context_line":"placement service for the appropriate `NUMA_XXX` resources. This is currently"},{"line_number":112,"context_line":"out of scope for this spec. This spec is only about the inventorying of the"},{"line_number":113,"context_line":"various child providers with appropriate resource classes."},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_8284c45f","line":111,"range":{"start_line":104,"start_character":0,"end_line":111,"end_character":59},"in_reply_to":"7f515b1d_149384a5","updated":"2017-09-25 21:13:02.000000000","message":"@Chris:\n\n \u003e we don\u0027t want to pain ourselves into a corner.\n\nFreudian slip? :)","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d21779949426872584d977105049ce9b59b10f94","unresolved":false,"context_lines":[{"line_number":101,"context_line":"SRIOV-enabled NICs as child resource providers to a parent compute host"},{"line_number":102,"context_line":"resource provider."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"The `VCPU` and `MEMORY_MB` resource classes will continue to be inventoried on"},{"line_number":105,"context_line":"the parent resource provider (i.e the compute node resource provider) and not"},{"line_number":106,"context_line":"the NUMA node child providers. The NUMA node child providers will have"},{"line_number":107,"context_line":"inventory records populated for the `NUMA_CORE`, `NUMA_THREAD` and"},{"line_number":108,"context_line":"`NUMA_MEMORY_MB` resource classes. When a boot request is received, the Nova"},{"line_number":109,"context_line":"API service will need to determine whether the request (flavor and image)"},{"line_number":110,"context_line":"specifies a particular NUMA topology and, if so, construct the request to the"},{"line_number":111,"context_line":"placement service for the appropriate `NUMA_XXX` resources. This is currently"},{"line_number":112,"context_line":"out of scope for this spec. This spec is only about the inventorying of the"},{"line_number":113,"context_line":"various child providers with appropriate resource classes."},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_64cc3b6a","line":111,"range":{"start_line":104,"start_character":0,"end_line":111,"end_character":59},"in_reply_to":"7f515b1d_149384a5","updated":"2017-09-25 18:36:20.000000000","message":"The data model the virt driver will return to the compute service will actually be, I guess, driven by the need of a per-NUMA cell accounting if you consider the possible usecases.\n\nThe thing that worries me a bit is that if we go along this way, there are needs for aggregating the usages of all chidren of a specific parent so that a request could either consume it as a general purpose, or be NUMA-targeted if the flavor expresses it.\n\nMaybe clarifying the spec for that purpose by describing how we could request :\n* either an \u0027aggregated\u0027 (take-me-all-my-children) resource consumption query\n* or a child-specific resource class consumption quety","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e530e9b6fc0f3e941ba2445719817bba7a102f4","unresolved":false,"context_lines":[{"line_number":101,"context_line":"SRIOV-enabled NICs as child resource providers to a parent compute host"},{"line_number":102,"context_line":"resource provider."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"The `VCPU` and `MEMORY_MB` resource classes will continue to be inventoried on"},{"line_number":105,"context_line":"the parent resource provider (i.e the compute node resource provider) and not"},{"line_number":106,"context_line":"the NUMA node child providers. The NUMA node child providers will have"},{"line_number":107,"context_line":"inventory records populated for the `NUMA_CORE`, `NUMA_THREAD` and"},{"line_number":108,"context_line":"`NUMA_MEMORY_MB` resource classes. When a boot request is received, the Nova"},{"line_number":109,"context_line":"API service will need to determine whether the request (flavor and image)"},{"line_number":110,"context_line":"specifies a particular NUMA topology and, if so, construct the request to the"},{"line_number":111,"context_line":"placement service for the appropriate `NUMA_XXX` resources. This is currently"},{"line_number":112,"context_line":"out of scope for this spec. This spec is only about the inventorying of the"},{"line_number":113,"context_line":"various child providers with appropriate resource classes."},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_bfbb60c2","line":111,"range":{"start_line":104,"start_character":0,"end_line":111,"end_character":59},"in_reply_to":"7f515b1d_44093f2f","updated":"2017-09-25 19:18:57.000000000","message":"@cdent, I\u0027d like to see it as your second bullet.  It\u0027s generic (works for situations involving SR-IOV, vGPU, etc. as well as NUMA), and it\u0027s flexible (the operator gets to design flavors whichever way suits).  See https://etherpad.openstack.org/p/nova-multi-alloc-request-syntax-brainstorm","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"2c885dd607e267aedb888245b1e85577ea492b7a","unresolved":false,"context_lines":[{"line_number":101,"context_line":"SRIOV-enabled NICs as child resource providers to a parent compute host"},{"line_number":102,"context_line":"resource provider."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"The `VCPU` and `MEMORY_MB` resource classes will continue to be inventoried on"},{"line_number":105,"context_line":"the parent resource provider (i.e the compute node resource provider) and not"},{"line_number":106,"context_line":"the NUMA node child providers. The NUMA node child providers will have"},{"line_number":107,"context_line":"inventory records populated for the `NUMA_CORE`, `NUMA_THREAD` and"},{"line_number":108,"context_line":"`NUMA_MEMORY_MB` resource classes. When a boot request is received, the Nova"},{"line_number":109,"context_line":"API service will need to determine whether the request (flavor and image)"},{"line_number":110,"context_line":"specifies a particular NUMA topology and, if so, construct the request to the"},{"line_number":111,"context_line":"placement service for the appropriate `NUMA_XXX` resources. This is currently"},{"line_number":112,"context_line":"out of scope for this spec. This spec is only about the inventorying of the"},{"line_number":113,"context_line":"various child providers with appropriate resource classes."},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_44093f2f","line":111,"range":{"start_line":104,"start_character":0,"end_line":111,"end_character":59},"in_reply_to":"7f515b1d_64cc3b6a","updated":"2017-09-25 18:47:09.000000000","message":"\"an \u0027aggregated\u0027 (take-me-all-my-children) resource consumption query\" is exactly what I\u0027m hoping to avoid.\n\nThe queries on the server are already very difficult to understand. Now we want to branch by whether we are descending trees or not? I hope not.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"3c2760d0fdde43c8bdee91903f1c864e1501c751","unresolved":false,"context_lines":[{"line_number":101,"context_line":"SRIOV-enabled NICs as child resource providers to a parent compute host"},{"line_number":102,"context_line":"resource provider."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"The `VCPU` and `MEMORY_MB` resource classes will continue to be inventoried on"},{"line_number":105,"context_line":"the parent resource provider (i.e the compute node resource provider) and not"},{"line_number":106,"context_line":"the NUMA node child providers. The NUMA node child providers will have"},{"line_number":107,"context_line":"inventory records populated for the `NUMA_CORE`, `NUMA_THREAD` and"},{"line_number":108,"context_line":"`NUMA_MEMORY_MB` resource classes. When a boot request is received, the Nova"},{"line_number":109,"context_line":"API service will need to determine whether the request (flavor and image)"},{"line_number":110,"context_line":"specifies a particular NUMA topology and, if so, construct the request to the"},{"line_number":111,"context_line":"placement service for the appropriate `NUMA_XXX` resources. This is currently"},{"line_number":112,"context_line":"out of scope for this spec. This spec is only about the inventorying of the"},{"line_number":113,"context_line":"various child providers with appropriate resource classes."},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_05d0de1e","line":111,"range":{"start_line":104,"start_character":0,"end_line":111,"end_character":59},"in_reply_to":"7f515b1d_8284c45f","updated":"2017-09-25 21:45:34.000000000","message":"Freudian flip over the handle bars and road rash on the chest.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"23cf978f4f6a94bd24cfd497698a36381b42aedf","unresolved":false,"context_lines":[{"line_number":101,"context_line":"SRIOV-enabled NICs as child resource providers to a parent compute host"},{"line_number":102,"context_line":"resource provider."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"The `VCPU` and `MEMORY_MB` resource classes will continue to be inventoried on"},{"line_number":105,"context_line":"the parent resource provider (i.e the compute node resource provider) and not"},{"line_number":106,"context_line":"the NUMA node child providers. The NUMA node child providers will have"},{"line_number":107,"context_line":"inventory records populated for the `NUMA_CORE`, `NUMA_THREAD` and"},{"line_number":108,"context_line":"`NUMA_MEMORY_MB` resource classes. When a boot request is received, the Nova"},{"line_number":109,"context_line":"API service will need to determine whether the request (flavor and image)"},{"line_number":110,"context_line":"specifies a particular NUMA topology and, if so, construct the request to the"},{"line_number":111,"context_line":"placement service for the appropriate `NUMA_XXX` resources. This is currently"},{"line_number":112,"context_line":"out of scope for this spec. This spec is only about the inventorying of the"},{"line_number":113,"context_line":"various child providers with appropriate resource classes."},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_621d4872","line":111,"range":{"start_line":104,"start_character":0,"end_line":111,"end_character":59},"in_reply_to":"7f515b1d_a2fd80b2","updated":"2017-09-25 21:47:18.000000000","message":"No, I don\u0027t see it as a two-phase query at all.  It would always be a single OUTER JOIN+ON/WHERE, constructed the same way based on the request no matter what.  The result will always contain\n- zero or more rows where the resources come from a single RP; and\n- zero or more rows where the resources are spread across multiple RPs.\n\nAnd, to be clear, I definitely also don\u0027t want special handling for NUMA, special handling for VFs, etc.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a47c7f1f18406e44771e929a9ebcdc1f96076006","unresolved":false,"context_lines":[{"line_number":101,"context_line":"SRIOV-enabled NICs as child resource providers to a parent compute host"},{"line_number":102,"context_line":"resource provider."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"The `VCPU` and `MEMORY_MB` resource classes will continue to be inventoried on"},{"line_number":105,"context_line":"the parent resource provider (i.e the compute node resource provider) and not"},{"line_number":106,"context_line":"the NUMA node child providers. The NUMA node child providers will have"},{"line_number":107,"context_line":"inventory records populated for the `NUMA_CORE`, `NUMA_THREAD` and"},{"line_number":108,"context_line":"`NUMA_MEMORY_MB` resource classes. When a boot request is received, the Nova"},{"line_number":109,"context_line":"API service will need to determine whether the request (flavor and image)"},{"line_number":110,"context_line":"specifies a particular NUMA topology and, if so, construct the request to the"},{"line_number":111,"context_line":"placement service for the appropriate `NUMA_XXX` resources. This is currently"},{"line_number":112,"context_line":"out of scope for this spec. This spec is only about the inventorying of the"},{"line_number":113,"context_line":"various child providers with appropriate resource classes."},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_a2fd80b2","line":111,"range":{"start_line":104,"start_character":0,"end_line":111,"end_character":59},"in_reply_to":"7f515b1d_bfbb60c2","updated":"2017-09-25 21:13:02.000000000","message":"So this would be some sort of a two-phase query? IOW, first run the query where the memory is determined per NUMA node, and then, if that query returns no matches, run another query \"rolling up\" the memory of the nodes to the root provider to see if any can match? This, of course, would have to be generic enough that it would work for *any* nested resource, such as VFs per PF, etc. I\u0027m not sure how that flexibility would be coded to work in all cases. And I sure don\u0027t want a lot of one-off conditionals such as\n\n  if RC\u003d\u003d\"MEMORY_MB\" and NUMA_is_involved:\n    special_snowflake_handling()","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d8a7b2ce7a054b33f6226696b926d0a080d3ed69","unresolved":false,"context_lines":[{"line_number":101,"context_line":"SRIOV-enabled NICs as child resource providers to a parent compute host"},{"line_number":102,"context_line":"resource provider."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"The `VCPU` and `MEMORY_MB` resource classes will continue to be inventoried on"},{"line_number":105,"context_line":"the parent resource provider (i.e the compute node resource provider) and not"},{"line_number":106,"context_line":"the NUMA node child providers. The NUMA node child providers will have"},{"line_number":107,"context_line":"inventory records populated for the `NUMA_CORE`, `NUMA_THREAD` and"},{"line_number":108,"context_line":"`NUMA_MEMORY_MB` resource classes. When a boot request is received, the Nova"},{"line_number":109,"context_line":"API service will need to determine whether the request (flavor and image)"},{"line_number":110,"context_line":"specifies a particular NUMA topology and, if so, construct the request to the"},{"line_number":111,"context_line":"placement service for the appropriate `NUMA_XXX` resources. This is currently"},{"line_number":112,"context_line":"out of scope for this spec. This spec is only about the inventorying of the"},{"line_number":113,"context_line":"various child providers with appropriate resource classes."},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_149384a5","line":111,"range":{"start_line":104,"start_character":0,"end_line":111,"end_character":59},"in_reply_to":"7f515b1d_e0685e22","updated":"2017-09-25 13:40:12.000000000","message":"Eric which of the following are you suggesting:\n\n* a compute node would optionally choose whether to inventory its memory and cpus as on numa nodes (effectively declaring itself a numa driven node)\n* a compute node which is numa would report its inventory of memory and cpus on numa nodes but if someone wanted a large workload that spanned nodes (and didn\u0027t care about numa) the claiming tool would need to allocate on all nodes?\n* something else?\n\nThe next paragraph suggests the former, which is perhaps okay and perhaps works with your model.\n\nMostly just curious so we all keep our brains moving. I agree this is out of scope for now but we don\u0027t want to pain ourselves into a corner.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cbc10377aa19d66a7a66fa3eb83bbab9d151b7","unresolved":false,"context_lines":[{"line_number":126,"context_line":"child resource providers representing those NUMA nodes. Similarly, if the PCI"},{"line_number":127,"context_line":"device manager returns a set of SR-IOV physical functions on the compute host,"},{"line_number":128,"context_line":"we will create child resource provider records for those SR-IOV PFs."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"Alternatives"},{"line_number":131,"context_line":"------------"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_204af67f","line":129,"updated":"2017-09-21 22:48:19.000000000","message":"Issues that should be addressed by this spec:\n\n* How does trait inheritance work?  E.g. in the NUMA example, if the VCPUs are owned by the NUMA RP, can I stick a trait on the compute RP that applies to all the CPUs on the system (e.g. \"HW_CPU_X86_AVX2\"), or do I have to duplicate that trait on each child RP?\n* As mentioned above (see coment L50), placement should be able to allocate resource of a given type across different RPs (traits permitting).  E.g. my two SR-IOV NICs are different speeds, but otherwise the same; if I ask for two VFs, but don\u0027t specify a speed trait, I should be able to get one from each NIC (especially if there\u0027s only one left on each).","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c202ca692b0a423a272ff23b538bb1d7a83406cd","unresolved":false,"context_lines":[{"line_number":126,"context_line":"child resource providers representing those NUMA nodes. Similarly, if the PCI"},{"line_number":127,"context_line":"device manager returns a set of SR-IOV physical functions on the compute host,"},{"line_number":128,"context_line":"we will create child resource provider records for those SR-IOV PFs."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"Alternatives"},{"line_number":131,"context_line":"------------"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_a905a37c","line":129,"in_reply_to":"7f515b1d_204af67f","updated":"2017-09-22 12:24:21.000000000","message":"The second bullet point is exactly what I tried to ask in L50. So I guess that case make sense at least for Eric and for me. :)","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"23cf978f4f6a94bd24cfd497698a36381b42aedf","unresolved":false,"context_lines":[{"line_number":126,"context_line":"child resource providers representing those NUMA nodes. Similarly, if the PCI"},{"line_number":127,"context_line":"device manager returns a set of SR-IOV physical functions on the compute host,"},{"line_number":128,"context_line":"we will create child resource provider records for those SR-IOV PFs."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"Alternatives"},{"line_number":131,"context_line":"------------"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_22175054","line":129,"in_reply_to":"7f515b1d_62bf88d0","updated":"2017-09-25 21:47:18.000000000","message":"No, see above.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a47c7f1f18406e44771e929a9ebcdc1f96076006","unresolved":false,"context_lines":[{"line_number":126,"context_line":"child resource providers representing those NUMA nodes. Similarly, if the PCI"},{"line_number":127,"context_line":"device manager returns a set of SR-IOV physical functions on the compute host,"},{"line_number":128,"context_line":"we will create child resource provider records for those SR-IOV PFs."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"Alternatives"},{"line_number":131,"context_line":"------------"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_62bf88d0","line":129,"in_reply_to":"7f515b1d_a905a37c","updated":"2017-09-25 21:13:02.000000000","message":"So this sounds like another variation of the \"rollup\" query: if there are no RPs that have 2 VFs, roll up the number of VFs for each root provider to see if any root has 2 in total.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cbc10377aa19d66a7a66fa3eb83bbab9d151b7","unresolved":false,"context_lines":[{"line_number":158,"context_line":"  field for all existing resource providers."},{"line_number":159,"context_line":"* `parent_provider_uuid`: This will be a NULLable field and default to NULL"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"REST API impact"},{"line_number":162,"context_line":"---------------"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"`root_provider_uuid` and `parent_provider_uuid` fields will be added to the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_7b9ae3c5","line":161,"range":{"start_line":161,"start_character":0,"end_line":161,"end_character":15},"updated":"2017-09-21 22:48:19.000000000","message":"Feel like this section could use some more meat.  Or do we leave that to implementation time?","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a47c7f1f18406e44771e929a9ebcdc1f96076006","unresolved":false,"context_lines":[{"line_number":158,"context_line":"  field for all existing resource providers."},{"line_number":159,"context_line":"* `parent_provider_uuid`: This will be a NULLable field and default to NULL"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"REST API impact"},{"line_number":162,"context_line":"---------------"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"`root_provider_uuid` and `parent_provider_uuid` fields will be added to the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_a2c46060","line":161,"range":{"start_line":161,"start_character":0,"end_line":161,"end_character":15},"in_reply_to":"7f515b1d_7b9ae3c5","updated":"2017-09-25 21:13:02.000000000","message":"I don\u0027t envision any other changes to the API. Do you? The fact that a lot more may be happening \"under the hood\" when an API call is made doesn\u0027t mean that either the call or response will change.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"23cf978f4f6a94bd24cfd497698a36381b42aedf","unresolved":false,"context_lines":[{"line_number":158,"context_line":"  field for all existing resource providers."},{"line_number":159,"context_line":"* `parent_provider_uuid`: This will be a NULLable field and default to NULL"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"REST API impact"},{"line_number":162,"context_line":"---------------"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"`root_provider_uuid` and `parent_provider_uuid` fields will be added to the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_45f3760b","line":161,"range":{"start_line":161,"start_character":0,"end_line":161,"end_character":15},"in_reply_to":"7f515b1d_a2c46060","updated":"2017-09-25 21:47:18.000000000","message":"Well, it would be neat to see request/response examples for the cases described below.\n\nDoes the shape of the /allocation_candidates response change?  Does provider_summaries show the new fields or any other indication of the tree structure?\n\nDitto /allocations and /resource_providers/{uuid}/allocations.  And is there any way to get the whole tree there?","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9db82ded2f2bc03d3691f6ace777b49279332e80","unresolved":false,"context_lines":[{"line_number":164,"context_line":"`root_provider_uuid` and `parent_provider_uuid` fields will be added to the"},{"line_number":165,"context_line":"corresponding request and response payloads of appropriate placement REST APIs."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"The `GET /resource_providers` and `GET /allocation_candidates` calls will get a"},{"line_number":168,"context_line":"new filter on `root\u003d{uuid}` that, when present, will return all resource"},{"line_number":169,"context_line":"provider records, inclusive of the root, having a `root_provider_uuid` equal to"},{"line_number":170,"context_line":"`{uuid}`."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"Security impact"},{"line_number":173,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"bf57530f_a3195189","line":170,"range":{"start_line":167,"start_character":34,"end_line":170,"end_character":9},"updated":"2017-09-20 09:13:38.000000000","message":"Is there a separate spec that describe how the allocation_candidates API needs to be change to allow us to request two distinct set of resources from two different nested providers connected to the same parent provider? (i.e. the two VFs, one from each PF case)","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cbc10377aa19d66a7a66fa3eb83bbab9d151b7","unresolved":false,"context_lines":[{"line_number":164,"context_line":"`root_provider_uuid` and `parent_provider_uuid` fields will be added to the"},{"line_number":165,"context_line":"corresponding request and response payloads of appropriate placement REST APIs."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"The `GET /resource_providers` and `GET /allocation_candidates` calls will get a"},{"line_number":168,"context_line":"new filter on `root\u003d{uuid}` that, when present, will return all resource"},{"line_number":169,"context_line":"provider records, inclusive of the root, having a `root_provider_uuid` equal to"},{"line_number":170,"context_line":"`{uuid}`."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"Security impact"},{"line_number":173,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_bb34dbdf","line":170,"range":{"start_line":167,"start_character":34,"end_line":170,"end_character":9},"in_reply_to":"7f515b1d_550936db","updated":"2017-09-21 22:48:19.000000000","message":"@gibi, it may be going in a different spec, which jaypipes volunteered to write - see https://etherpad.openstack.org/p/nova-ptg-queens-generic-device-management [DP4] (L80 as of this writing) - but should probably at least be mentioned here, as well as [DP1] from the same etherpad (how to ask for resources to be kept together - e.g. make sure my VCPU and MEMORY_MB come from the same NUMA node).","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c73f8a1a9bc960c54dd787deb5a5c0179271560f","unresolved":false,"context_lines":[{"line_number":164,"context_line":"`root_provider_uuid` and `parent_provider_uuid` fields will be added to the"},{"line_number":165,"context_line":"corresponding request and response payloads of appropriate placement REST APIs."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"The `GET /resource_providers` and `GET /allocation_candidates` calls will get a"},{"line_number":168,"context_line":"new filter on `root\u003d{uuid}` that, when present, will return all resource"},{"line_number":169,"context_line":"provider records, inclusive of the root, having a `root_provider_uuid` equal to"},{"line_number":170,"context_line":"`{uuid}`."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"Security impact"},{"line_number":173,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_550936db","line":170,"range":{"start_line":167,"start_character":34,"end_line":170,"end_character":9},"in_reply_to":"bf57530f_a3195189","updated":"2017-09-21 21:45:30.000000000","message":"This is in addition to the normal filtering, where we request resources with certain classes/amounts/traits. I\u0027m actually thinking that we shouldn\u0027t add this new filter to GET /allocation_candidates, since that API is intended for a single purpose, and not a general RESTful API like GET /resource_providers, where it would be necessary to see the tree of RPs for a given root.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a8cbc10377aa19d66a7a66fa3eb83bbab9d151b7","unresolved":false,"context_lines":[{"line_number":224,"context_line":"* Add code in scheduler reporting client to track SRIOV PFs as child resource"},{"line_number":225,"context_line":"  providers on the parent compute host resource provider"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Please note that not all of this spec is expected to be implemented in a single"},{"line_number":228,"context_line":"release cycle. At the Queens PTG we agreed that fully suppporting NUMA will"},{"line_number":229,"context_line":"probably have to be deferred to the next release."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"Dependencies"},{"line_number":232,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_bb497b61","line":229,"range":{"start_line":227,"start_character":0,"end_line":229,"end_character":49},"updated":"2017-09-21 22:48:19.000000000","message":"Oh, okay.","commit_id":"304ef828e67ae8972e474fb7d723f603cb9bd2b0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"dc048759b5a352c6cd1398d7677cb0a2aa289426","unresolved":false,"context_lines":[{"line_number":57,"context_line":"NIC enp2s1 might have a trait \"CUSTOM_PHYSNET_PRIVATE\" that indicates the NIC"},{"line_number":58,"context_line":"is attached to the physical network called \"Intranet\". We need a way of"},{"line_number":59,"context_line":"representing that these NICs each provide SRIOV_NET_VF resources but those"},{"line_number":60,"context_line":"virtual functions are associated with different physical networks. In the"},{"line_number":61,"context_line":"resource providers data modeling, the entity which is associated with"},{"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"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_b1deb76a","line":60,"updated":"2017-09-27 10:53:29.000000000","message":"I just want to note here that the model can be even more complex as soon as we will model NUMA awareness of PFs providing VFs (after Queens).\n\nThe possible cases there\n** Two VFs from the same PF (due to the need of different physnet)\n** Two VFs from different PFs but both selected PF should be from the same NUMA node\n** Two VFs from different PFs but both selected PF from different NUMA nodes but from the same ComputeProvider\n\nThis complexity might be needed as it could be beneficial performance wise to allocate cpus and memory from the same numa node as the VF which is handled by those cpus.\n\nI don\u0027t see any problems with the current proposal regarding this future use case except that this also make the rolling up case even more painful. But that is already out of scope.","commit_id":"6bd85da43cbf6a3976a92698c45f9cecf6c9e404"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"dc048759b5a352c6cd1398d7677cb0a2aa289426","unresolved":false,"context_lines":[{"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 inventory"},{"line_number":66,"context_line":"records for *other* types of resources such as VCPU, MEMORY_MB or DISK_GB."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"This spec proposes that nested resource providers be created to allow for"},{"line_number":69,"context_line":"distinguishing details of complex components of some resource providers. During"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_d10b7321","line":66,"updated":"2017-09-27 10:53:29.000000000","message":"This allows two neighboring providers in a resource provider tree to provide the resources from the same resource class with different qualitative attributes. However the model also allow a parent provider to provide resources from the same resource class as its descendants also provides. Now in this case having different qualitative attributes on the parent provider and on the descendant provider plus having the inheritance of the qualitative attributes from parent to descendant makes my brain hurt. Will it cause some kind of weird edge case when we want to decide which allocated resource has which qualitative attribute?\n\nHonestly I don\u0027t see any use case right now that needs that both a parent and a descendant provider provide the same type of resources (except the virtual roll up case below). So, can we explicitly forbid this setup in placement?\n\nThis is also a bit similar to the rolling up case described below. As there we also need that virtually some resources are  provided by both the parent and the descendant provider.\nYou stated that rolling up is out of the scope of this spec so this also push me to the direction that we might want to forbid modeling of the situation explicitly.","commit_id":"6bd85da43cbf6a3976a92698c45f9cecf6c9e404"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"1e5612f3655c0a4d822e149b17547a705d30398b","unresolved":false,"context_lines":[{"line_number":75,"context_line":"the root provider \"owns\" 2 VFs. This spec does not propose any sort of \"rolling"},{"line_number":76,"context_line":"up\" of inventory, but this may be something to consider in the future. If it is"},{"line_number":77,"context_line":"an idea that has support, another BP/spec can be created then to add this"},{"line_number":78,"context_line":"behavior."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Use Cases"},{"line_number":81,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_05a33ea0","line":78,"updated":"2017-09-25 21:50:10.000000000","message":"Yeah, so I suspect this is gonna break early once we start actually exercising nested RPs.\n\nSee continuing discussion at PS3 L104-111.","commit_id":"6bd85da43cbf6a3976a92698c45f9cecf6c9e404"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1117004cbf458936742737480e97e58cd219f0b4","unresolved":false,"context_lines":[{"line_number":75,"context_line":"the root provider \"owns\" 2 VFs. This spec does not propose any sort of \"rolling"},{"line_number":76,"context_line":"up\" of inventory, but this may be something to consider in the future. If it is"},{"line_number":77,"context_line":"an idea that has support, another BP/spec can be created then to add this"},{"line_number":78,"context_line":"behavior."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Use Cases"},{"line_number":81,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_10c877a3","line":78,"in_reply_to":"7f515b1d_05a33ea0","updated":"2017-10-03 07:53:31.000000000","message":"Thanks for detailing this and saying it won\u0027t be done by this spec.\nThat\u0027s a concern by me, but I\u0027m fine with not having this by this cycle, so okay for a another spec for Rocky.","commit_id":"6bd85da43cbf6a3976a92698c45f9cecf6c9e404"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"076c5734d1eb8d0db453d30236f2283751c6f82f","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"The `GET /resource_providers` call will get a new filter on `root\u003d{uuid}` that,"},{"line_number":179,"context_line":"when present, will return all resource provider records, inclusive of the root,"},{"line_number":180,"context_line":"having a `root_provider_uuid` equal to `{uuid}`. There is no change proposed to"},{"line_number":181,"context_line":"`GET /allocation_candidates`, as this call is for a specific use case for the"},{"line_number":182,"context_line":"Nova scheduler, and there is no use case for it."},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"Security impact"},{"line_number":185,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_1ad40dbd","line":182,"range":{"start_line":180,"start_character":49,"end_line":182,"end_character":48},"updated":"2017-10-03 16:15:00.000000000","message":"Jay just said, \"The provider_summaries section of the GET /allocation_candidates response will show a parent_provider_uuid for each provider, allowing the caller to reconstruct (if needed) the provider trees.\" so there is a change to the response body of that API, right? There is just not a new filter parameter on GET /allocation_candidates, yes?","commit_id":"6bd85da43cbf6a3976a92698c45f9cecf6c9e404"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ca3afdc6c1981608026c5b136119d7fdc231e20e","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"The `GET /resource_providers` call will get a new filter on `root\u003d{uuid}` that,"},{"line_number":179,"context_line":"when present, will return all resource provider records, inclusive of the root,"},{"line_number":180,"context_line":"having a `root_provider_uuid` equal to `{uuid}`. There is no change proposed to"},{"line_number":181,"context_line":"`GET /allocation_candidates`, as this call is for a specific use case for the"},{"line_number":182,"context_line":"Nova scheduler, and there is no use case for it."},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"Security impact"},{"line_number":185,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_bafbb945","line":182,"range":{"start_line":180,"start_character":49,"end_line":182,"end_character":48},"in_reply_to":"7f515b1d_1ad40dbd","updated":"2017-10-03 16:16:14.000000000","message":"That is correct, Matt.","commit_id":"6bd85da43cbf6a3976a92698c45f9cecf6c9e404"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"d227d5a01fbc2c886a683448962cd3e4d4c2b834","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"The `GET /resource_providers` call will get a new filter on `root\u003d{uuid}` that,"},{"line_number":179,"context_line":"when present, will return all resource provider records, inclusive of the root,"},{"line_number":180,"context_line":"having a `root_provider_uuid` equal to `{uuid}`. There is no change proposed to"},{"line_number":181,"context_line":"`GET /allocation_candidates`, as this call is for a specific use case for the"},{"line_number":182,"context_line":"Nova scheduler, and there is no use case for it."},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"Security impact"},{"line_number":185,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_7a2f81a7","line":182,"range":{"start_line":180,"start_character":49,"end_line":182,"end_character":48},"in_reply_to":"7f515b1d_bafbb945","updated":"2017-10-03 16:21:42.000000000","message":"See the first paragraph of this section that details changes to the response. This paragraph is concerned with an additional change to GET /resource_providers to filter on root_uuid. There is no corresponding change to GET /allocation_candidates API call. But yeah, the wording could be better.","commit_id":"6bd85da43cbf6a3976a92698c45f9cecf6c9e404"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"dc048759b5a352c6cd1398d7677cb0a2aa289426","unresolved":false,"context_lines":[{"line_number":180,"context_line":"having a `root_provider_uuid` equal to `{uuid}`. There is no change proposed to"},{"line_number":181,"context_line":"`GET /allocation_candidates`, as this call is for a specific use case for the"},{"line_number":182,"context_line":"Nova scheduler, and there is no use case for it."},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"Security impact"},{"line_number":185,"context_line":"---------------"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_d659298e","line":183,"updated":"2017-09-27 10:53:29.000000000","message":"Do we implicitly assume in the scheduler that that the allocation request returned in the response of a GET /allocation_candidate  defines a compute node provider? \n\nWith nested providers I can imagine a situation when allocation request, returned from GET /allocation_candidates, does not contain any compute node providers just descendant providers of a compute node provider. Then the scheduler either needs to call GET /resource_providers to find out which is the root provider or the allocation_candidate response needs to be modified to contain the root provider but with empty `resources` field. Or is this why the implementation start caching the whole resource provider tree?","commit_id":"6bd85da43cbf6a3976a92698c45f9cecf6c9e404"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c97d2dc5f5f2388b7d1e0ad01f7bcd1c23bb8f29","unresolved":false,"context_lines":[{"line_number":180,"context_line":"having a `root_provider_uuid` equal to `{uuid}`. There is no change proposed to"},{"line_number":181,"context_line":"`GET /allocation_candidates`, as this call is for a specific use case for the"},{"line_number":182,"context_line":"Nova scheduler, and there is no use case for it."},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"Security impact"},{"line_number":185,"context_line":"---------------"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_3fa0e941","line":183,"in_reply_to":"7f515b1d_d659298e","updated":"2017-10-03 00:01:58.000000000","message":"The provider_summaries section of the GET /allocation_candidates response will show a parent_provider_uuid for each provider, allowing the caller to reconstruct (if needed) the provider trees.","commit_id":"6bd85da43cbf6a3976a92698c45f9cecf6c9e404"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"076c5734d1eb8d0db453d30236f2283751c6f82f","unresolved":false,"context_lines":[{"line_number":230,"context_line":"* Add DB schema and object model changes"},{"line_number":231,"context_line":"* Add REST API microversion adding new attributes for resource providers"},{"line_number":232,"context_line":"* Add REST API microversion adding new `root\u003d{uuid}` filter on `GET"},{"line_number":233,"context_line":"  /resource_providers` and `GET /allocation_candidates`"},{"line_number":234,"context_line":"* Add code in scheduler reporting client to track NUMA nodes as child resource"},{"line_number":235,"context_line":"  providers on the parent compute host resource provider"},{"line_number":236,"context_line":"* Add code in scheduler reporting client to track SRIOV PFs as child resource"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_7a77810a","line":233,"range":{"start_line":233,"start_character":23,"end_line":233,"end_character":55},"updated":"2017-10-03 16:15:00.000000000","message":"On L180 it says \"There is no change proposed to\n`GET /allocation_candidates`, as this call is for a specific use case for the Nova scheduler, and there is no use case for it.\" so which is it? Will /allocation_candidates include nested RPs or not?\n\nReading more, I guess Jay said, \"The provider_summaries section of the GET /allocation_candidates response will show a parent_provider_uuid for each provider, allowing the caller to reconstruct (if needed) the provider trees.\"\n\nSo there is sort of a change to that API, just not a new filter parameter.","commit_id":"6bd85da43cbf6a3976a92698c45f9cecf6c9e404"}]}
