Earlier  
Posted Nick Remark
#openstack-nova - 2018-03-27
13:31:31 stephenfin mikal: Just the man I'm looking for. Fancy jotting down your thoughts on https://review.openstack.org/554195
13:31:38 sahid the agent can return this information to nova, no?
13:32:19 stephenfin (random aside: the OVS (-DPDK) documentation is hands-down awful. It sucks that we have to resort to random blogs for this critical information)
13:32:38 stephenfin sahid: If it's what we want then I don't see why not. Lemme check
13:33:42 stephenfin ooh, so 'pmd-rxq-show' does seem to be exactly what I wanted
13:35:06 stephenfin ...and we'd just assume that OVS was configured correctly so that there are PMD threads on all NUMA nodes, which is Red Hat's guidance at least
13:35:18 stephenfin sean-k-mooney[m]: If you're about, any thoughts on ^
13:36:17 efried alex_xu_: Ah, then that's a mistake in modeling.
13:37:20 efried alex_xu_: The RP tree should not be set up such that the compute host provides inventory of FPGA.
13:37:45 alex_xu_ efried: yes, I realized that also, that isn't the FPGA case now
13:37:49 bauzas alex_xu_: efried: which specific spec are you discussing ?
13:37:59 stephenfin efried: See what you made me do? https://review.openstack.org/556850
13:38:19 alex_xu_ bauzas: here https://review.openstack.org/#/c/554305/
13:38:46 alex_xu_ efried: basically, it only can happened in the compute node RP,
13:39:04 bauzas alex_xu_: ack, thanks
13:39:15 efried alex_xu_: Well, really any RP in the tree which provides inventory in multiple RCs that are "unrelated" to each other.
13:39:25 efried alex_xu_: This is actually what I wrote a bug about last year.
13:39:54 alex_xu_ efried: ha, currently we have VGPU, but will change soon :)
13:40:00 kashyap "the operator is going to configure OVS and actually DPDK based on where the device is located" --> Hope the Operator has the necessary PhDs to configure DPDK et al
13:40:33 alex_xu_ efried: but I agree with that
13:40:47 alex_xu_ I feel it will be rare case in the future
13:41:00 bauzas alex_xu_: efried: FWIW, I discussed this morning with jianghuaw_ about some possible quirks with VGPUs
13:41:10 bauzas and I'd love your thoughts
13:41:16 bauzas because it would need to spec up
13:41:36 bauzas the fact is that physical GPUs support multiple types
13:41:51 bauzas depending on the type, you can have different number of vGPUs
13:41:58 bauzas so, guess what?
13:42:12 efried alex_xu_: I can't find the bug right offhand, but I think the scenario I described was: compute RP has HDD disk, sharing provider (or in fact another RP in the tree) has SSD disk. I ask for disk & VCPU, I ask for the HDD trait. I will get back candidates which include the SSD, because the compute RP is satisfying the HDD trait, even though it's not providing the disk resource.
13:42:18 alex_xu_ we need to update inventory based the user request?
13:42:26 bauzas alex_xu_: efried: in theory, a nested RP that would be a pGPU could have different inventories for the same resource class
13:43:12 bauzas alex_xu_: efried: but the trick is, once a vGPU is created, then all the other types but the one picked for that vGPU will have total=0 for their inventories
13:43:30 efried bauzas: I think we've discussed similar issues in the past. Trying to recall what we came up with as a solution...
13:43:35 bauzas alex_xu_: efried: so there are 2 ways to consider that
13:43:53 bauzas either we ask the operator to define which type he wants to support per-GPU
13:44:06 alex_xu_ efried: ah, I see, but I guess that bug is killed by the reality that we don't support two different storage on the host
13:44:08 bauzas and in that case, the enabled_vgpu_types option needs to be change
13:44:11 bauzas changed*
13:44:14 efried alex_xu_: Oh, but we do :)
13:44:53 bauzas or, we magically provide a 2nd level of the tree with nested RPs, meaning that a pGPU will have multiple children, each one being something like pGPU_thistype
13:45:30 efried bauzas: That only helps if you want to lock it down (predefine and preallocate)
13:45:36 bauzas the second solution makes the thing less impactful for operators, but it adds a second level to the tree just for VGPUs
13:45:47 bauzas efried: not really
13:46:03 bauzas efried: because at start, each inventory will provide all the possible vGPUs
13:46:24 efried bauzas: But you'd still be counting on an allocation from *here* affecting the inventory over *there*
13:46:30 efried which we can't do.
13:46:40 bauzas efried: in theory the allocation would be against the pGPU_type
13:46:46 bauzas not the pGPU itself
13:47:02 efried Yeah, I get that, but you would have had to pre-designate how many of each type you start with.
13:47:21 bauzas efried: that's the config option
13:47:23 efried You can't show "full" inventory for all types.
13:47:35 efried Okay, right, so swhat I'm saying, it's locked down ahead of time.
13:47:40 efried via the config option
13:47:47 bauzas for the moment, the config option is a ListOpt supporting types
13:48:15 bauzas but honestly, I think we should do something less crazy and just have an option that would do like pci passthrough
13:48:28 bauzas ie. "for that PCI device, here is the type"
13:48:51 bauzas jaypipes: thoughts on that ? ^
13:48:58 efried bauzas: If you want ultimate flexibility, I think you need to provide inventory of some RC that lets you represent "units of VGPU-ness", where different types consume a different number of that resource. And then your request would have to be well-behaved and ask for resources=VGPU:1,VGPU_UNITY_THINGY:4
13:49:26 efried ...where the request for VGPU_UNITY_THINGY has to be correct for the type you're requesting.
13:49:53 openstackgerrit Merged openstack/os-traits master: Updated from global requirements https://review.openstack.org/551599
13:50:04 bauzas efried: that's where I think we're over engineering
13:50:22 efried resources=VGPU:1,VGPU_UNITY_THINGY:4&required=VGPU_TYPE_X
13:50:22 efried or
13:50:22 efried resources=VGPU_TYPE_X:1,VGPU_UNITY_THINGY:4
13:50:22 efried That would be clearer as
13:50:25 bauzas efried: operators want flavors like VGPU=2&trait=MY_TYPE
13:50:58 bauzas yeah, honestly, I feel for the short term a config option that would do a whitelist seems the most acceptable solution
13:51:00 efried bauzas: Yeah, I get that. This isn't the only place we've seen where it would be useful to provide a translation layer from the flavor to the actual placement request.
13:51:38 efried bauzas: I think perhaps we're oversimplifying/idealizing by thinking that a direct mapping of flavor to placement request is going to allow us to cover everything.
13:52:06 bauzas let's incrementally try to resolve the usecase
13:52:20 bauzas for queens, we supported a single type
13:52:30 efried bauzas: Basically, requiring the admin to understand the nuances and quirks of both the provider tree as modeled by the virt driver, and the syntax and semantics of the placement API query.
13:52:48 bauzas efried: that's where I think a whitelist could be more understandable
13:53:09 bauzas efried: we could have enabled_vgpu_types that would keep the existing types we agree
13:53:23 bauzas and then a second option that would tell for which PCI ID which type
13:53:42 efried bauzas: I'm okay with that idea in general, but I'm going to be watching like a hawk to make sure we retain the separation of platform-specific syntax.
13:53:51 efried E.g. "NO PCI ID!"
13:53:51 bauzas in that case, the PGPU inventory would be of one type, problem solved.
13:54:27 bauzas efried: the PCI ID thingy is just within the driver
13:54:35 bauzas no crazypants about PCI tracking
13:54:56 bauzas litterally ask libvirt to pick that type for that pGPU
13:55:16 efried bauzas: If there's a PCI ID in the file, then we have to say that the file gets parsed by virt alone. Kind of thing.
13:55:48 bauzas efried: yeah, zactly that
13:56:04 efried bauzas: So... you want to do something like this for Rocky?
13:56:08 bauzas I guess
13:56:17 bauzas if nested RPs is a thing :)
13:56:22 efried bauzas: Cause this is edging unequivocally into Generic Device Management territory.
13:56:34 alex_xu_ bauzas: when your request VGPU_thistype, how do you change total=0 for the VGPU_thosetype?
13:56:48 bauzas alex_xu_: that's magically done by sysfs
13:57:03 bauzas alex_xu_: which I'm using for getting the inventory
13:57:05 alex_xu_ bauzas: but how the placement to know that
13:57:20 bauzas alex_xu_: because we provide inventories of VGPU resouces as of queens :)
13:57:27 efried bauzas: Wait, you're talking about doing that at setup time, not at allocation time, right?
13:57:28 bauzas that are populated based on sysfs :)
13:58:12 bauzas efried: alex_xu_ is talking of the case where we would have pGPU types as children
13:58:14 alex_xu_ bauzas: if there are two requests at same time. One for VGPU_thistype, another for VGPU_thosetype. So there will be race case. Only one can successful in the host finally
13:58:18 efried bauzas: Bricks will be shat by several people if you start talking about modifying inventory of Y because X got allocated.
13:58:32 bauzas alex_xu_: yeah I considered the race condition
13:58:41 bauzas alex_xu_: and that's actually a good call for not doing that
13:58:52 bauzas but rather doing a whitelisting on the virt driver direcrtly
13:59:07 alex_xu_ bauzas: so limit only one type in each host?

Earlier   Later