| Posted | Nick | Remark | |
|---|---|---|---|
| #openstack-nova - 2019-12-02 | |||
| 18:54:25 | dansmith | yeah, well, as long as we'll have intel ci so we can see it working, that's something | |
| 18:54:30 | Sundar | dansmith: 631234 is a typo, right? Quoting myself from above: I think we need to squash https://review.opendev.org/631245 into the previous patch https://review.opendev.org/631244. Because once the get_resolved_arqs() moves to previous patch, the only things left behind are the virt driver changes. It would arguably be easier to understand those | |
| 18:54:31 | Sundar | changes together with the changes to get the arqs in compute/manager.py. | |
| 18:54:55 | dansmith | Sundar: I meant 631245 yes, sorry | |
| 18:55:01 | sean-k-mooney | ya. the fake driver should allow us to test the api flow. the intel ci should validate it works with real hardware | |
| 18:55:09 | Sundar | Cool, np | |
| 18:55:24 | dansmith | Sundar: the virt changes will be insulated from the cyborg client method is my point | |
| 18:56:08 | dansmith | Sundar: if I were you I would have one patch that adds the support into the manager, all the build_resources changes to capture the ARQs and pass them to the virt driver, | |
| 18:56:17 | dansmith | Sundar: then a separate patch to implement things for libvirt | |
| 18:56:17 | Sundar | dansmith: Sure, will try to get back ASAP with the changes | |
| 18:56:33 | Sundar | Oh, separate patch for libvirt? | |
| 18:56:40 | dansmith | yes definitely | |
| 18:56:47 | Sundar | That would be 63124 today | |
| 18:56:58 | Sundar | *631245 | |
| 18:57:21 | dansmith | Sundar: so when hyperv people come along, we point them at the libvirt patch and say "implement this part for your driver and you will be good"... separate from the plumbing in compute to wire everything up | |
| 18:58:04 | Sundar | I see, fine with that too | |
| 18:58:06 | dansmith | Sundar: in the compute manager patch, you just assume that any virt driver below you will ignore the ARQs you pass to it, which will be true of libvirt, until the next patch in the series where that becomes untrue for libvirt, but remains true for all the others | |
| 18:59:11 | openstackgerrit | Merged openstack/nova stable/pike: Add regression recreate test for bug 1830747 https://review.opendev.org/663124 | |
| 18:59:11 | openstack | bug 1830747 in OpenStack Compute (nova) pike "Error 500 trying to migrate an instance after wrong request_spec" [High,In progress] https://launchpad.net/bugs/1830747 - Assigned to Matt Riedemann (mriedem) | |
| 18:59:15 | openstackgerrit | Merged openstack/nova stable/pike: Workaround missing RequestSpec.instance_group.uuid https://review.opendev.org/663125 | |
| 18:59:27 | Sundar | dansmith: In the compute manager patch, the signature for libvirt driver's spawn() will have tio change to include the arqs as a parameter. | |
| 18:59:35 | dansmith | Sundar: does this method go away if you pass the stuff from compute manager to virt? https://review.opendev.org/#/c/631245/39/nova/accelerator/cyborg.py | |
| 18:59:49 | dansmith | Sundar: that would leave the virt patch you have as just the libvirt config bits | |
| 19:00:47 | dansmith | Sundar: correct, spawn() will need to take the ARQs, just like it takes network and block device info | |
| 19:01:51 | dansmith | Sundar: https://github.com/openstack/nova/blob/56d3cd7aa7f4d3be01fd2a5c10903fb548c49458/nova/compute/manager.py#L2491-L2499 | |
| 19:02:08 | dansmith | Sundar: just like block and network, you should pull out arqs from resources and pass to spawn | |
| 19:02:26 | dansmith | arguably we could just be passing in resources to spawn to avoid splitting it out, but let's not go down that hole in this set | |
| 19:03:06 | dansmith | Sundar: and since I will have a strong opinion on that later, let me go ahead and say, it should be called: | |
| 19:03:17 | dansmith | accel_info = resources['accel_info'] | |
| 19:03:20 | dansmith | :) | |
| 19:03:28 | Sundar | dansmith: That method would remain, albeit it would move to the compute manager patch. So that the waiting logic can call it once to decide whether to quit early. The virt driver patch 631245 will slim down to just the libvirt driver changes. The change in the signature for virt driver base class and the libvirt driver (to include arqs as a | |
| 19:03:29 | Sundar | parameter) will now be in the compute manager patch. | |
| 19:03:52 | dansmith | Sundar: ah right, forgot that would be the check, so yes, move it thusly | |
| 19:04:01 | Sundar | dansmith: What you said about resources['accel...'] is exactly what I said in the gerrit review :) | |
| 19:04:06 | dansmith | ack | |
| 19:04:35 | dansmith | Sundar: except not the same names | |
| 19:04:46 | dansmith | Sundar: I was giving you a freebie pre -1 on the *name* :) | |
| 19:05:02 | Sundar | What name? | |
| 19:05:13 | dansmith | accel_info instead of accelerator_requests | |
| 19:05:35 | Sundar | I see. To match network_info etc. | |
| 19:05:38 | dansmith | yes | |
| 19:05:49 | dansmith | because I have issues. my therapist and I are working on them. | |
| 19:05:49 | Sundar | Ok, I'm not too hung up on names | |
| 19:05:54 | dansmith | good :) | |
| 19:08:23 | Sundar | sean-k-mooney: still intrigued by your idea for a fake device, block or PCI. Do you have a way to simulate a PCI device? It can be *quite* difficult AFAICS with linux PCI subsystem. | |
| 19:08:56 | dansmith | so I was thinking about something else, like grab the last usb host and pass that through | |
| 19:09:28 | dansmith | Sundar: I would focus on getting the patches back into order, and let sean-k-mooney pull something out of his butt for faking the PCI stuff... :) | |
| 19:10:25 | Sundar | Yup, that's what I plan to do :) but a 'real fake driver' (heck, I'll grab the award for today's oxymoron) would be very useful for the future. | |
| 19:10:26 | dansmith | he pulled off some fancy stuff for the numa live migration stuff, so we should see if he can do it again here :) | |
| 19:10:31 | sean-k-mooney | Sundar: the closest i have come up with is the netdevsim kernel module wich does create sriov capable fake pci device for testing and developing the kernel ebpf code | |
| 19:10:50 | sean-k-mooney | Sundar: how ever i dont think you can actully pass those device to a qemu instace. i have not tried however | |
| 19:11:08 | sean-k-mooney | i did try to use it for sriov testing in the past but i could not get it to work | |
| 19:11:56 | sean-k-mooney | i was able to create the fake device but i could not assing the vfs the pf might have worked but we dont really want to have to compile kernel module in the gate if we can avoid it | |
| 19:12:20 | Sundar | sean-k-mooney: It would be useful to have a libvirt patch where the domain XML for hostdev can have an attribute that indicates 'do not pass this to qemu'. | |
| 19:12:35 | Sundar | That would be useful outside of OpenStack too, I would guess. | |
| 19:12:37 | dansmith | sean-k-mooney: that's why i was thinking pick something on the host we could pass through, like one of those USB hosts | |
| 19:12:56 | dansmith | Sundar: can't imagine the libvirt folks would go for that | |
| 19:12:56 | sean-k-mooney | dansmith: maybe ya | |
| 19:14:11 | sean-k-mooney | there was talk and patchs for adding the abilty to emulate sriov device in qemu | |
| 19:14:27 | sean-k-mooney | if that ever gets merged upstream we might be able to use that | |
| 19:14:42 | sean-k-mooney | but for now it think focusing on getting the patches in order is better | |
| 19:15:06 | sean-k-mooney | if i come up with a way to fake sriov/pci deivces ill let ye know | |
| 19:15:24 | Sundar | We're all agreed on that :). Time for me to get back to work. | |
| 19:16:13 | sean-k-mooney | one thing i have been meaning to test for a while is if i can use a neutron port as a pci device for a guest | |
| 19:16:38 | sean-k-mooney | they dont support vfs put i might be able to do a PF passthough | |
| 19:18:13 | sean-k-mooney | im pretty sure we are missing a few things to make that work however espacally in the upstream ci. | |
| 19:38:52 | openstackgerrit | Eric Fried proposed openstack/nova master: Use Placement 1.34 (string suffixes & mappings) https://review.opendev.org/696418 | |
| 19:38:53 | openstackgerrit | Eric Fried proposed openstack/nova master: WIP: Tie requester_id to RequestGroup suffix https://review.opendev.org/696946 | |
| 19:40:02 | efried | gibi: 696418 ^ now just does the 1.34 cutover, will continue with the rest in subsequent patches. | |
| 19:51:42 | openstackgerrit | Merged openstack/nova master: Process requested_resources in ResourceRequest init https://review.opendev.org/696354 | |
| 20:04:18 | efried | dansmith: is nullable=True (e.g. [1]) made moot by having a default and using obj_set_defaults() in __init__ (e.g. [2])? | |
| 20:04:18 | efried | [1] https://github.com/openstack/nova/blob/f1382651dc3b7b945b69a2af0bc05aa472f26b28/nova/objects/request_spec.py#L1061 | |
| 20:04:18 | efried | [2] https://github.com/openstack/nova/blob/f1382651dc3b7b945b69a2af0bc05aa472f26b28/nova/objects/request_spec.py#L1071 | |
| 20:04:28 | dansmith | no | |
| 20:04:40 | dansmith | efried: nullable=True *only* means "can be set to None" | |
| 20:04:55 | efried | ah fusk, will I *ever* get that right? | |
| 20:05:04 | dansmith | probably not | |
| 20:05:05 | efried | I thought it meant "can be absent" (in terms of `in`) | |
| 20:05:16 | dansmith | no, | |
| 20:05:23 | dansmith | all fields can be absent all the time | |
| 20:05:29 | dansmith | also unrelated to defaults | |
| 20:05:49 | efried | dansmith: oh; so does obj_set_defaults() mean I don't have to do the `in` check? | |
| 20:05:55 | dansmith | no | |
| 20:06:14 | dansmith | if you haven't set defaults on the object, then 'in' will fail if the field is unset | |
| 20:06:29 | dansmith | you're connecting three things which are unrelated | |
| 20:06:44 | dansmith | __contains__ means nothing more than "is it set right now" | |
| 20:06:51 | dansmith | nullable means "can be set to none" | |
| 20:07:05 | dansmith | and default= means "if they call obj_set_defaults(), set this field to this value" | |
| 20:07:21 | efried | right, so forget nullable; I'm really just confirming whether gibi is correct here https://review.opendev.org/#/c/696418/1/nova/scheduler/utils.py@327 | |
| 20:07:45 | dansmith | technically he is not right | |
| 20:07:52 | dansmith | practically, he is. | |
| 20:07:53 | efried | because the obj could be loaded from cold storage | |
| 20:07:57 | dansmith | right | |
| 20:07:59 | efried | where it was unset | |
| 20:08:15 | dansmith | or you could del obj['field'] | |
| 20:08:35 | efried | but in this case the only way it got to cold storage was from having been previously __init__()ed, which set the defaults | |
| 20:08:53 | dansmith | the init hack might actually result in it being set when you load it from the db, but unintentionally, which is why I have campaigned against *ever* doing that | |
| 20:08:53 | efried | oh, unless it got stored/restored at an earlier version, I guess. | |
| 20:09:28 | dansmith | we don't check for every field in every object always because it's pointless.. in most cases we know which fields are always set | |
| 20:09:40 | dansmith | if there is any question, then you must check, but if there's not then you don'[t | |