| Posted | Nick | Remark | |
|---|---|---|---|
| #openstack-nova - 2018-03-27 | |||
| 13:23:20 | stephenfin | So just query the PMD pinning information for a bridge? | |
| 13:23:24 | sahid | do i have mised something? | |
| 13:24:38 | sahid | hum... no sure i underatand the PMD pinning for a bridge? | |
| 13:25:07 | stephenfin | It seemed like a big assumption to make (that PMD threads would be affined with the NIC), especially given that they don't have to be with recent releases | |
| 13:25:56 | sahid | well if operators want best perofrmance they have to do that | |
| 13:26:09 | stephenfin | Sorry, not the bridge. I'm referring to this https://developers.redhat.com/blog/2017/06/28/ovs-dpdk-parameters-dealing-with-multi-numa/ | |
| 13:26:14 | sahid | it's not our responsability (i don't think so) | |
| 13:26:27 | stephenfin | e.g. 'ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0xF0' | |
| 13:26:45 | sahid | so that is configurd by operator | |
| 13:27:08 | sahid | we are expecting that the pmd to run on the same NUMA node where the phy NIC is, right? | |
| 13:27:41 | stephenfin | Yes. There can be multiple NICs | |
| 13:27:45 | stephenfin | ...too | |
| 13:28:11 | stephenfin | So NIC X is on NUMA node 0, while NIC Y is on NUMA node 1 | |
| 13:28:35 | sahid | but NIC X and NIC Y have different network | |
| 13:28:37 | sahid | right? | |
| 13:28:51 | stephenfin | and NIC X is connected to/tagged with physnet_x, and NIC Y to physnet_y | |
| 13:28:52 | stephenfin | right | |
| 13:29:10 | sahid | so when neutron is asking to create a port for X | |
| 13:29:38 | sahid | the agent can query OVS to know where that vhu is located? | |
| 13:29:54 | stephenfin | Can they? | |
| 13:30:02 | sahid | yep | |
| 13:30:08 | sahid | let a sec to find the command | |
| 13:30:27 | stephenfin | Right, I didn't know that :D | |
| 13:31:06 | alex_xu_ | efried: I missed one thing. If the resource provider X is the compute node. RP X provides VCPU and memory also. Each instance will consume the VCPU and memory. In that case, RP X will be returned | |
| 13:31:14 | sahid | stephenfin: https://software.intel.com/en-us/articles/vhost-user-numa-awareness-in-open-vswitch-with-dpdk | |
| 13:31:28 | sahid | if we can know here a port is located | |
| 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 | That would be clearer as | |
| 13:50:22 | efried | resources=VGPU_TYPE_X:1,VGPU_UNITY_THINGY:4 | |
| 13:50:22 | efried | or | |
| 13:50:22 | efried | resources=VGPU:1,VGPU_UNITY_THINGY:4&required=VGPU_TYPE_X | |
| 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 | |