| Posted | Nick | Remark | |
|---|---|---|---|
| #openstack-nova - 2018-05-03 | |||
| 16:00:45 | bauzas | they could name the flavor GRID M60-0Q I'm fine | |
| 16:01:01 | efried | bauzas: So what I'm trying to figure out is whether there's such a thing as a flavor that would include a VGPU, that's possible to use to deploy instances on different hypervisors? | |
| 16:01:04 | bauzas | but the extra spec would be "requested=nvidia-11" | |
| 16:01:23 | bauzas | efried: mixing environments is highly discouraged | |
| 16:01:41 | bauzas | you can do that but then split your cloud | |
| 16:01:41 | efried | Well then I think it doesn't matter whether the traits are named the same from one hypervisor to the next. | |
| 16:01:56 | bauzas | efried: that said, there is a flaw | |
| 16:01:57 | exarlos | mriedem: and also, should I expect each "server" to have a respective folder in /var/lib/nova/instances/<uuid> ? | |
| 16:02:17 | bauzas | efried: the mdev GPU type name depends on the nvidia driver | |
| 16:02:48 | bauzas | efried: since it depends on a vendor driver, we have no guarantee that 'nvidia-11' will still correspond to a specific GPU type in the future | |
| 16:03:14 | efried | bauzas: Right, so that's what I meant by 1-1 | |
| 16:03:17 | bauzas | efried: if nvidia bumps a new driver that passes types that are not backwards compatible, then operators need to set again their flavors | |
| 16:03:40 | bauzas | that's not a public API, and I hate that | |
| 16:04:02 | bauzas | the kernel just leaks out what the VFIO device tells | |
| 16:04:03 | efried | bauzas: So wait, it's possible that 'nvidia-11' today corresponds to M60-0B and tomorrow will correspond to M99-0X ?? | |
| 16:04:10 | bauzas | efried: possibly yeah | |
| 16:04:14 | efried | that's bullshit, yo. | |
| 16:04:14 | bauzas | crazy, isn't it ? | |
| 16:04:23 | bauzas | that's a vendor API | |
| 16:04:34 | bauzas | vendors can do crazy things | |
| 16:04:44 | bauzas | including breaking changes | |
| 16:05:09 | mriedem | exarlos: without knowing where this actually failed and how it failed, it's hard to say | |
| 16:05:33 | mriedem | if the guest is still running on the source host, which you could verify via virsh (assuming libvirt), then you could probably just reset the state of the instance | |
| 16:05:35 | efried | bauzas: Well, we can only do so much. I think this mapping is something the virt driver will need to be able to keep track of. And if the stoopid vendor driver makes a breaking change, the virt driver will just have to scramble to accomodate. | |
| 16:05:49 | bauzas | efried: I think I reached the same conclusion | |
| 16:05:50 | mriedem | https://developer.openstack.org/api-ref/compute/#reset-server-state-os-resetstate-action | |
| 16:06:06 | efried | bauzas: But I think as much as we possibly can, we should create standard traits and ask the virt drivers to map to them. | |
| 16:06:06 | bauzas | efried: for some reason, xen is better designed than libvirt | |
| 16:06:15 | bauzas | efried: it already makes the translation I guess | |
| 16:06:33 | efried | bauzas: Which one is doing translation, though? | |
| 16:06:37 | bauzas | efried: because if you look the Xen GPU types, those look very identical to the nvidia doc | |
| 16:06:45 | bauzas | efried: the xen API | |
| 16:06:50 | efried | bauzas: Right, so it's libvirt that's translating. | |
| 16:06:57 | bauzas | efried: no | |
| 16:06:59 | efried | xen is just using 'em as is | |
| 16:07:01 | efried | no? | |
| 16:07:13 | bauzas | efried: libvirt is straight setting what the kernel module tells | |
| 16:07:14 | bauzas | https://www.kernel.org/doc/Documentation/vfio-mediated-device.txt | |
| 16:07:49 | efried | oh, so xen is mapping those back to the model names in the literature | |
| 16:08:00 | exarlos | mriedem: Let me go have a read of that. | |
| 16:08:17 | exarlos | It is on the same host still. | |
| 16:08:24 | bauzas | efried: that's what I guess, yes | |
| 16:08:38 | efried | bauzas: so the point is that we need to choose one or the other, and then the docs for a given hypervisor have to tell me how to discover and determine the appropriate corresponding trait name. | |
| 16:08:52 | bauzas | efried: ok, I take the challenge | |
| 16:09:20 | efried | bauzas: Which needs to happen regardless, because at the very least 'nvidia-11' will need to be translated to 'trait:HW_VGPU_TYPE_NVIDIA_11=required' | |
| 16:09:20 | bauzas | efried: I'm in favor of an unified trait name | |
| 16:09:31 | bauzas | yup | |
| 16:10:14 | efried | bauzas: What would be neat is if each hypervisor provided a script to discover the devs and list them along with their trait names. | |
| 16:10:28 | efried | that might be asking too much, though :) | |
| 16:10:31 | bauzas | efried: what I wonder if whether the mapping should be hardcoded in the virt driver code, or if we should leave operators setting that | |
| 16:10:45 | bauzas | efried: heh, I have the same wish | |
| 16:10:50 | bauzas | efried: xen does that | |
| 16:10:57 | bauzas | efried: but see my docs on libvirt usage | |
| 16:11:02 | bauzas | that's crazy | |
| 16:11:10 | bauzas | you have to lookup sysfs | |
| 16:11:21 | efried | bauzas: The operator mapping thing - that's going back to the yaml config we started brainstorming in Denver. | |
| 16:11:26 | bauzas | we don't have any libvirt API that shows you that | |
| 16:11:52 | bauzas | efried: I know | |
| 16:12:06 | efried | bauzas: BUT that mapping is going to be more for device aliasing, white/blacklisting, etc. I don't think we should be using it to define traits, unless maybe they're CUSTOM_* | |
| 16:12:19 | bauzas | efried: just a thought | |
| 16:12:26 | bauzas | efried: about custom traits | |
| 16:12:29 | openstackgerrit | Stephen Finucane proposed openstack/nova-specs master: Add 'numa-aware-vswitches' spec https://review.openstack.org/541290 | |
| 16:12:33 | bauzas | efried: can you set those with nested RPs ? | |
| 16:12:52 | bauzas | efried: because then, I wouldn't care a bit about that | |
| 16:13:07 | bauzas | efried: I could just ask operators to provide custom traits | |
| 16:13:19 | efried | bauzas: You can set traits on any RP. We originally talked about traits "inheriting" or "propagating" in various directions, but we're not doing that. | |
| 16:13:31 | bauzas | efried: I'm a bit rusty on traits | |
| 16:13:31 | efried | bauzas: "on any RP" including child, sharing, etc. | |
| 16:13:46 | bauzas | efried: but I guess operators have to play with placement client to set the trait ? | |
| 16:13:56 | bauzas | if so, that's perfect | |
| 16:14:44 | bauzas | jaypipes: for your sanity, don't read the vendor crazypants I wrote | |
| 16:15:08 | efried | bauzas: Well, what we talked about in Dublin is that each of various entities (nova-compute, neutron, operator) will have a set of traits it owns/controls for a given provider. It's allowed to set/unset those traits, but the other entities are not. | |
| 16:15:42 | efried | bauzas: So in this example, I would expect nova-compute (specifically the virt driver) to "own" the trait indicating the GPU type. The operator doesn't get to set that. That wouldn't make sense. | |
| 16:16:02 | bauzas | efried: keep in mind we will have one inventory per vGPU type | |
| 16:16:18 | efried | bauzas: Same entity owns the inventory. | |
| 16:16:49 | bauzas | efried: what if I want to set custom traits ? | |
| 16:17:26 | bauzas | efried: say the virt driver now provides a tree of a root RP and two children RP, each one being a vGPU type | |
| 16:17:44 | bauzas | efried: as an operator, I'd like to pick only one type based on a custom trait | |
| 16:17:50 | efried | bauzas: From this perspective, we don't really make a distinction between standard and custom traits. But I would say the op is allowed to invent and assign a random custom trait as she sees fit. | |
| 16:17:54 | bauzas | efried: exactly what we wrote in the spec, actually | |
| 16:18:13 | bauzas | https://specs.openstack.org/openstack/nova-specs/specs/queens/implemented/add-support-for-vgpu.html | |
| 16:18:14 | efried | bauzas: Legit. Basically the op just has to be careful not to stomp on a trait owned by compute. | |
| 16:18:24 | efried | bauzas: beyond that, sky's the limit. | |
| 16:18:38 | efried | bauzas: which is exactly why we made this a requirement in Dublin. | |
| 16:18:46 | efried | (dansmith and I almost came to blows over it) | |
| 16:18:51 | bauzas | yeah I remember | |
| 16:19:14 | efried | I still believe it's going to bite us, but time will tell. | |
| 16:19:36 | bauzas | efried: ok, so what's the way to set custom traits as of now ? | |
| 16:19:42 | bauzas | thru placement API ? (and the client) | |
| 16:19:55 | efried | bauzas: Sure, that works. | |
| 16:20:15 | bauzas | efried: ok, what I need is testing then | |
| 16:20:30 | bauzas | efried: my patch series is close to provide inventories using update_provider_tree() | |
| 16:20:44 | efried | bauzas: There's no change to the placement API for any of that; the only thing we did was update the u-p-t spec/docs to make it clear that a dance is required to make sure you're not stepping on each other. | |
| 16:21:12 | bauzas | efried: ok, will look | |
| 16:21:12 | efried | bauzas: Oh, are you aware of https://review.openstack.org/#/c/560444/ ? | |
| 16:21:40 | bauzas | efried: no, I wasn't | |
| 16:21:54 | bauzas | efried: my top patch in the series returns a dict of dicts | |
| 16:22:08 | bauzas | efried: I'll use that dict of dicts to populate the tree | |
| 16:22:31 | bauzas | efried: but I was considering to implement by a change the new public interface for libvirt | |
| 16:22:34 | openstackgerrit | Merged openstack/nova master: Get anchors for sharing providers https://review.openstack.org/565279 | |