| Posted | Nick | Remark | |
|---|---|---|---|
| #openstack-nova - 2022-08-18 | |||
| 14:04:26 | dansmith | yeah, so I put a call there to reset the global state and it passed the few reshape tests I had in my history | |
| 14:04:29 | dansmith | running the full set now | |
| 14:05:32 | gibi | buut, in func test we run all of our computes in the same process, so now they will share the same report client across compute hosts | |
| 14:06:09 | dansmith | will that work because of the multi-root functionality you mentioned? | |
| 14:06:23 | sean-k-mooney | i kind of feel like we shoudl seperate the singelton changes form the lazy loading | |
| 14:06:41 | sean-k-mooney | if you have not already done that | |
| 14:06:50 | dansmith | but as I said above, I'm also fine keeping them separate for the compute manager part if you think that's better | |
| 14:06:52 | sean-k-mooney | just so there is less change to condier | |
| 14:06:54 | gibi | dansmith: I'm not sure about the scope of the multi root functionality | |
| 14:07:12 | dansmith | and I'll try to write something more concise than my verbose sentence above, but more useful than the one I put in there that caused the confusion | |
| 14:07:49 | dansmith | sean-k-mooney: they're already together, and can't be separated without losing some of the behavior that gibi wanted to keep | |
| 14:07:50 | gibi | I think in short term keep a separate client per ComputeManager instance and note why we are doing it. | |
| 14:08:05 | dansmith | gibi: ack, sounds good | |
| 14:08:40 | gibi | I dont like the global but I checked and in most cases it is safe based on how we use it | |
| 14:08:52 | gibi | the compute manager is an exception | |
| 14:09:14 | gibi | at least due to the func test, but also might be due to ironic multiple node per compute | |
| 14:09:52 | dansmith | the global results in fewer hits to keystone and also fewer places we could fail if a call to keystone fails, and mirrors our other client behaviors | |
| 14:09:59 | dansmith | (the internal state does not, of course, but...) | |
| 14:10:16 | gibi | yeah I accept the compromise | |
| 14:10:24 | gibi | the global has pros and cons | |
| 14:10:35 | dansmith | if you really hate the global I can switch it to per-use lazy load | |
| 14:10:48 | dansmith | but aside from the state thing, I don't know why we would perfer that | |
| 14:11:02 | gibi | yeah, only the share state that makes it complicated. | |
| 14:11:05 | dansmith | (or prefer even) | |
| 14:11:45 | dansmith | ack, so we could also make each call to get the singleton generate a new local state object so that that part is not shared everywhere | |
| 14:11:57 | dansmith | I could leave a node in there with the idea in case it becomes problematic in the future | |
| 14:12:05 | gibi | if I had time I would also trim the report client to have only those methods there that depend on the shared state and move the independent functions somehere else to make it clear what is problematic | |
| 14:12:30 | dansmith | ack, there are several things we *could* do to make this cleaner for sure | |
| 14:12:49 | gibi | the extra note in the singletone works for me | |
| 14:13:31 | dansmith | ack will do that, no singleton for the compute manager and add that test | |
| 14:13:50 | gibi | ack | |
| 14:13:51 | gibi | thanks | |
| 14:17:43 | gibi | sean-k-mooney: I moved forward with the allocation candidate filtering in hardware.py step. That made me realize two things 1) placement tells us RP uuids in the allocation candidates and the stats hardware.py code needs to map those RP uuids to pools. For that I need extra information in the pool. 2) the prefilters are run in the scheduler so creating RequestGroups there are good for scheduling but | |
| 14:17:49 | gibi | not good for using those RequestGroups (especiall the provider mapping in them) later to drive the PCI claim as those RequestGroups are not visible outside of the scheduler process. For the QoS port we create the groups in the compute.api so those are visible to the conductor and the compute | |
| 14:19:05 | sean-k-mooney | i thinik for cpu pinning we do it else where too | |
| 14:19:43 | gibi | as prefilters are acting on the RequestSpec I'm tempted to move the prefilter run to the conductor | |
| 14:20:05 | gibi | I can try and see what falls out | |
| 14:20:12 | gibi | how do you feel about it? | |
| 14:20:21 | sean-k-mooney | moving part of the schduleing out of the schduler | |
| 14:20:29 | sean-k-mooney | that feel like more then we need to adress this | |
| 14:20:48 | gibi | alternatively I can try to return the modified request spec from the scheduler to the conductor | |
| 14:20:55 | gibi | but that is an RPC change | |
| 14:20:59 | gibi | afaik | |
| 14:21:29 | sean-k-mooney | im looking to see what we do for PMEM and cpu pinnign i rememebr we did it differntly for one of them | |
| 14:21:36 | sean-k-mooney | before the prefileters | |
| 14:22:34 | sean-k-mooney | im fine with moving the request group creation to before the call to the schduler | |
| 14:22:56 | sean-k-mooney | moving running the prefilters to the conductor however i think it probaly mre then we want to do | |
| 14:23:06 | gibi | ack, that would be another alternative, to do the request group generation not in a prefilter | |
| 14:23:23 | gibi | that would make this similar to how QoS works | |
| 14:28:15 | sean-k-mooney | this is where we do it for cpu pinning https://github.com/openstack/nova/blob/e6aa6373d98103348a8ee3c59814350ea1556049/nova/scheduler/utils.py#L80 | |
| 14:29:15 | gibi | I think that also runs in the scheduler | |
| 14:30:20 | sean-k-mooney | the implmenation i think i sin the request spec object | |
| 14:30:42 | sean-k-mooney | oh its not | |
| 14:30:45 | sean-k-mooney | https://github.com/openstack/nova/blob/e6aa6373d98103348a8ee3c59814350ea1556049/nova/scheduler/utils.py#L305-L321 | |
| 14:31:14 | sean-k-mooney | but those are free standing fucntions that budil up the resouce class request | |
| 14:31:28 | gibi | so that works as you never need to know from where the VPMEM resource was fulfilled | |
| 14:32:01 | sean-k-mooney | ya | |
| 14:32:25 | gibi | I will figure out something along the line of cyborg and qos requests | |
| 14:32:50 | gibi | both needs the request groups after the scheduling to drive the claim on the compute | |
| 14:33:50 | sean-k-mooney | ya | |
| 14:34:09 | sean-k-mooney | we do have some pci affintiy code there by the way added by https://github.com/openstack/nova/commit/db7517d5a8aaa5a24be12d9c3453dcd98d9a887e | |
| 14:34:59 | gibi | yeah that also only extends the unsuffixed request group | |
| 14:35:17 | sean-k-mooney | yep its just finding a host that supports it | |
| 14:35:35 | sean-k-mooney | but you would potentally have to do that per pci device now | |
| 14:35:44 | sean-k-mooney | or at least eventually | |
| 14:35:59 | sean-k-mooney | since the policy is setable per alias | |
| 14:36:17 | sean-k-mooney | we can proably pretend i did not mention this for now :) | |
| 14:36:38 | sean-k-mooney | we said in the spec that we would leave numa to the numa toplogy filter | |
| 14:37:11 | sean-k-mooney | so going back to your orginal issue | |
| 14:37:28 | sean-k-mooney | you need to be able to coralate the pci pools to the placement candiates | |
| 14:37:38 | sean-k-mooney | and provider summeries | |
| 14:37:40 | gibi | hm is that settable per alias? I see a flavor extra spec hw:pci_numa_affinity_policy': 'socket' | |
| 14:37:55 | sean-k-mooney | ya it is one sec | |
| 14:38:22 | opendevreview | Dan Smith proposed openstack/nova master: Unify placement client singleton implementations https://review.opendev.org/c/openstack/nova/+/852900 | |
| 14:38:22 | opendevreview | Dan Smith proposed openstack/nova master: Avoid n-cond startup abort for keystone failures https://review.opendev.org/c/openstack/nova/+/852901 | |
| 14:38:23 | sean-k-mooney | https://github.com/openstack/nova/blob/master/nova/pci/request.py#L104-L107 | |
| 14:38:26 | dansmith | gibi: ^ | |
| 14:38:35 | dansmith | (no rush) | |
| 14:38:48 | gibi | ahh we have "numa_policy": "required" in aloas | |
| 14:38:50 | gibi | alias | |
| 14:38:55 | gibi | dansmith: ack, I will look today | |
| 14:39:28 | sean-k-mooney | gibi: you can set any of the policies via the alias but they only take affect if not override by the flavor or image. | |
| 14:39:38 | sean-k-mooney | or port | |
| 14:39:45 | sean-k-mooney | but port is out of scope for now | |
| 14:40:14 | gibi | sean-k-mooney: I assume now (with a big bunch of ignorance) that it is handled by the NumaTopologyFilter properly regardless of the placement allocation :D | |
| 14:40:38 | gibi | but we have functional tests to see if this assumption holds | |
| 14:41:20 | sean-k-mooney | the numa toplogy fileter shoudl rejec tthe host if the host cant supprot it today | |
| 14:41:30 | sean-k-mooney | but its not currenlty allcoatio candiate aware | |
| 14:41:44 | sean-k-mooney | so its considring all posible devices | |
| 14:41:56 | gibi | the numa topology filter will be after my change as it calls support_request which will be a_c aware | |
| 14:42:00 | sean-k-mooney | not the ones in any one set of allcoaiton candiates | |
| 14:42:07 | sean-k-mooney | yep | |
| 14:42:13 | gibi | so it has a chance to work :) | |
| 14:42:19 | sean-k-mooney | yep | |
| 14:42:35 | sean-k-mooney | as i said we can ignor that wrinkel for now | |
| 14:42:55 | gibi | as of pool correlation with allocation candidate, I will try to add a list of RP uuids to each pool showing that where the pool gets its devices | |
| 14:43:14 | sean-k-mooney | ack. currently it shoudl be 1:1 | |
| 14:43:25 | sean-k-mooney | each pool shoudl be mapped to a singel RP correct | |
| 14:43:28 | gibi | that would be awesome if pool:RP is 1:! | |
| 14:43:29 | gibi | 1:1 | |