Earlier  
Posted Nick Remark
#openstack-nova - 2025-03-10
14:16:41 dansmith right, it's doing both
14:17:28 dansmith gibi: this is the "don't do it here because..." feedback I wanted before going further, but if you need to dig in deeper, feel free to punt until you have time to do proper thinking
14:20:10 gibi in short, there is allocation healing in that code path which will go away. There is inventory generation there which remains there. So extending the inventory generation with this feature might be OK.
14:20:34 gibi so maybe it is OK
14:20:47 dansmith okay
14:20:49 gibi independenty I'm not sure how racy this is with the pci_claim
14:21:06 dansmith the pci claim on the compute node happens before this
14:21:07 gibi if this happens independently from the pci_claim in the periodic then we have a race window
14:21:38 dansmith the benefit here is that if you mark a device as OTU after it has already been allocated to an instance, it will be "healed" to reserved state
14:21:44 dansmith s/the/a benefit/
14:21:47 gibi I see
14:21:52 dansmith I'm not sure what race you mean,
14:22:12 dansmith there's a small window where we could fail before we do the reserve, but if that happens, the instance will not boot
14:22:17 dansmith so it's safe and the window is very small
14:22:25 dansmith I don't think there's a race
14:22:45 dansmith this happens synchronously at the end of the instance_claim() method
14:22:52 dansmith (*and* in the periodic)
14:22:57 gibi I mean the pci claim claims an OTU device and returns to the compute manager spawn a VM and a periodic update_available_resouces runs after a while and sees the allocated OTU device and reserve it
14:23:10 dansmith no,
14:23:13 dansmith it happens synchronously
14:23:20 gibi if this happens in the same code path as the claim then cool
14:23:28 dansmith this doesn't depend on the periodic running before it's reserved
14:23:32 gibi OK
14:23:40 gibi that was basically my second question
14:23:44 dansmith runs right here in instance_claim() https://github.com/openstack/nova/blob/276685b3db6e8f2ad59c33bc254461c255700ff8/nova/compute/resource_tracker.py#L215
14:24:23 dansmith that _update() all calls the _update_to_placement() as its first thing, which your first link above
14:25:47 sean-k-mooney dansmith from my perspective anything after self.pci_tracker.claim_instance in that function is ok, that is the earise that doing the reserved=total make sense
14:25:49 dansmith if that all seems reasonable now, I can document all the above details in the spec more thoroughly so that review is easier
14:26:01 dansmith sean-k-mooney: cool
14:26:12 sean-k-mooney althought there are ways we can fail later so it could be later
14:26:36 gibi dansmith: OK I see it now, no race
14:26:45 dansmith sean-k-mooney: I think there's always going to be some compromise, but it seems like when we're doing the pci accounting is the right balance to me
14:30:00 sean-k-mooney dansmith: so what your propsoing i think will work for spawn and unshleve and evacuate
14:30:29 sean-k-mooney i suspect self._update is reusted for cold migration/resize
14:30:46 sean-k-mooney ya it is here https://github.com/openstack/nova/blob/276685b3db6e8f2ad59c33bc254461c255700ff8/nova/compute/resource_tracker.py#L378
14:31:08 sean-k-mooney so i think that is fine too
14:31:24 sean-k-mooney live migration is out os scope for this this cycle?
14:33:19 sean-k-mooney live migration does use a move claim but the claiming of the device in the nova db happens a littel earlier
14:34:06 sean-k-mooney i think its fine to still do the reserved=total in the same place, im just asking for the scope fo testing/support
14:34:53 dansmith I'll track down the live case, but yeah the cold move case is also good
14:35:32 sean-k-mooney so for cold migration i think we just need to document that the device is burned once we have got to verify_resize
14:35:36 dansmith I think I'm fine with live being out of scope here, especially since we can mark a device as live_migratable=false now, but there's no reason this shouldn't work the same I think, even if we have to do it in a slightly different place on the dest
14:35:51 dansmith sean-k-mooney: yeah once you've touched both devices on either end, both are burned :)
14:36:21 sean-k-mooney exactly, some opt might assuem that happens at confirm
14:36:25 sean-k-mooney so we just need to document that
14:36:38 opendevreview Merged openstack/nova master: Update conductor and filters allowing migration with SR-IOV devices https://review.opendev.org/c/openstack/nova/+/942146
14:37:46 dansmith sure
14:40:20 gibi dansmith: yeah by default flavor based PCI devices are not live migratable, only exception is via the recently added live_migratable flag in the dev_spec and alias but we don't expect that will be set for OTU devices
14:40:46 dansmith oh, okay well, that's even easier I guess
14:41:00 sean-k-mooney ya the default helps
14:41:06 gibi only neutron based PCI devs are live migrated by default via unplug and plug
14:41:18 sean-k-mooney right but we dont support them in placment yet
14:41:22 gibi yes
14:41:25 sean-k-mooney so we can also ignor them
14:41:29 sean-k-mooney we could add a check
14:41:29 gibi yes
14:41:39 sean-k-mooney that you dont set otu and physical_network
14:41:56 sean-k-mooney since we know thats invalid today
14:42:09 sean-k-mooney but its not strictly required
14:42:11 opendevreview Gaudenz Steinlin proposed openstack/nova master: Make SSH compression for remote copy configurable https://review.opendev.org/c/openstack/nova/+/943377
14:44:41 dansmith Okay well, I'll add some notes to the spec for this to cover the above details
15:06:03 opendevreview Sylvain Bauza proposed openstack/nova master: doc: mark the maximum microversion for 2025.1 Epoxy https://review.opendev.org/c/openstack/nova/+/943948
15:10:22 opendevreview Dan Smith proposed openstack/nova-specs master: Add one-time-use-devices spec https://review.opendev.org/c/openstack/nova-specs/+/943486
15:11:37 gibi dansmith: left couple of comments but I think the direction looks good
15:11:49 dansmith gibi: thanks!
15:12:34 gibi the only think I'm a bit hesitant about it is the long term effect of the decision that we go with placement to solve this while and therefore we are forced not to support OTU VFs.
15:13:28 dansmith gibi: tbh, I'm not really sure when VFs would need to use this, as I suspect any virt-knowing device would be sensitive to exposure between uses (perhaps not)
15:14:07 dansmith that said, I think that from the operator point of view, it doesn't necessarily matter that it's happening in placement (other than the steps to unreserve after cleaning I guess).. but the devspec wouldn't need to change if we started accounting for the one-time-use in, say, PCI tracker
15:14:20 gibi yeah that is a valid point. This is why I'm not against going with the placement route, just hesitant that our udnerstanding of SRIOV VFs are correct
15:14:53 gibi dansmith: yeah the unreserve is the problematic step if we go with the PCI tracker route
15:14:57 dansmith right
15:15:01 gibi nova has no API for that
15:15:16 dansmith an SRIOV NIC is safe for use without cleaning, because you can't update firmware I think
15:15:46 dansmith not sure about a VGPU and memory exposure I guess, but .. they have to know that the point of that is sharing, so I would expect it's okay
15:15:52 gibi I also think that, but I never checked what happens with GPU VFs or NVMe VFs
15:16:27 dansmith an SRIOV NVMe would be a problem I guess, but if you're de- and re-allocating them they should be safe (like new namespaces on a regular one)
15:17:03 gibi true, if the VF is mapped to a namespace then it is OK
15:17:06 dansmith yeah
15:17:26 gibi OK. I'm less hesitant now. We have good reasons to believe that this feature is not needed for VFs
15:17:46 gibi a sane VF implementor needs to handle the sharing issue
15:17:51 dansmith I think we just make sure it's clear in the doc that this is only for whole devices because they're not virt-aware, and we can also say "for more comprehensive situations you need cyborg anyway" :)
15:17:55 dansmith yeah
15:18:21 gibi OK
15:18:36 gibi and :) for cyborg as a fallback
15:19:42 dansmith I really don't want to blur the line of nova-vs-cyborg much, so I think keeping this limited to specific uses is helpful to avoid people trying to push nova to do more
15:19:49 opendevreview Sylvain Bauza proposed openstack/nova master: Update compute rpc alias for epoxy https://review.opendev.org/c/openstack/nova/+/943952
15:19:57 sean-k-mooney dansmith: gibi you cant update teh frimware vai the vf from an nic i have worked with
15:20:23 dansmith right
15:20:24 sean-k-mooney dansmith: you can flash ab bitrstream via a specific VF on an fpga that change the behvior of other VFs
15:20:35 sean-k-mooney but that a very different usecasue
15:20:46 sean-k-mooney to me that is not what you are creating this for
15:20:52 dansmith definitely not
15:20:59 sean-k-mooney if we add pci groups in the future
15:21:07 sean-k-mooney we could extend the concpet to the group
15:21:17 sean-k-mooney i.e. a one time group
15:21:52 dansmith tbh, the pci-in-placement approach seems to me to be a bit of a stretch of the model, since placement really assumes resources of a given class are fungible and does not track actual assignment
15:22:23 sean-k-mooney dansmith: well in general tehy are fungible
15:22:24 dansmith so anything specific to a given VF probably needs a new model and new API (which cyborg is well-positioned to handle, IMHO)
15:22:46 dansmith sean-k-mooney: VFs are, but not whole PCI devices
15:23:17 sean-k-mooney maybe you could argue it either way

Earlier   Later