Earlier  
Posted Nick Remark
#openstack-nova - 2019-12-11
21:59:32 dansmith eh?
21:59:42 efried I mean, we enforce that for placement
21:59:45 dansmith you mean like an RPM or DEB dependency?
22:00:01 efried no, I mean like cyborg agent refuses to start up if compute isn't at version xyz
22:00:07 dansmith efried: how would it know?
22:00:30 Sundar dansmith: An old Nova would not query CYborg for device profiles or create/bind ARQs
22:00:39 dansmith Sundar: a new nova control plane would
22:00:50 dansmith Sundar: nova supports backlevel nova-compute services, which is the scenario I'm talking about
22:01:28 Sundar dansmith: You mean new n-api, n-super-cond, n-sch but old n-cpu?
22:01:42 efried ...do we seriously not have a way to query the nova version on a compute?
22:01:50 dansmith Sundar: yes, a very important scenario we have supported for a long time that people depend on
22:01:53 efried I mean, obv the RPC API does, which is what you're leading up to.
22:02:08 dansmith efried: we don't and shouldn't
22:03:43 dansmith I guess I better go ahead and drop that in the review somewhere before I go poof for the year and ya'll try to merge this :)
22:03:58 Sundar dansmith: I may be missing something. We had the create/bind and the wait all in n-cpu, which would have avoided this issue (at the expense of less concurrency), right?
22:04:08 efried Sundar: no
22:04:18 dansmith Sundar: no, you still have the same problem with that arrangement
22:04:21 efried So, ugh, what we actually need is something like:
22:04:21 efried compute advertises a COMPUTE_CAN_DO_CYBORG_SHIT trait so that
22:04:21 efried cyborg (which already queries that RP to know where to hang the accel RPs) can know whether it's even allowed to do that.
22:04:43 dansmith efried: or do it with service version but you might as well do an RPC version in that case
22:04:47 efried Sundar: The create/bind happens at deploy time, when you've already picked a host. We're talking about the bootstrapping process where cyborg decides to advertise accel resources in the first place.
22:04:55 dansmith efried: the trait is more expensive unless you've already got them
22:05:18 efried dansmith: expensive how? Because an extra placement query, once, on startup? Not worried about that.
22:05:23 efried or were you talking about something else?
22:05:37 dansmith something else, and I misunderstood what you mean so let me 'splain:
22:06:08 dansmith efried: you could either try to avoid cyborg hanging the inventory off the compute at bootstrap time, or you could avoid letting the conductor/scheduler start down this path for a compute that can't handle it
22:06:27 efried the former gets you the latter for free
22:06:31 dansmith IMHO, the latter is the job of nova anyway,
22:06:32 dansmith and would fit with a "this compute isn't new enough to do that thing you want" sort of check
22:06:50 dansmith efried: it depends on another service for upgrade correctness though
22:06:57 efried if you expose the inventory but have something else that prevents you from using it, that's a waste, isn't it?
22:07:10 dansmith i.e. it depends on cyborg being well-behaved, and/or not being modified to just always do it
22:07:29 dansmith efried: well, it means that cyborg can be upgraded and working before you've upgraded all your computes
22:07:37 efried heck, on that theory we could hang the inventory off a *really* old compute and it mushroom clouds because it can't handle nested providers at all.
22:07:38 dansmith so if you upgrade service by service, you don't have to loop back around
22:07:49 dansmith which was always annoying with things like ironic that had kinda circular deps with nova
22:08:00 efried cyborg is polling though, isn't it Sundar?
22:08:05 dansmith efried: well, that might be a good reason to do both then I guess, I dunno
22:08:42 Sundar efried: Sorry.Cyborg is polling for what?
22:08:42 efried Heh, mushroom cloud. That should be a thing.
22:09:04 Sundar Polling for new devices? Yes
22:09:45 dansmith efried: I understand that we avoid asking for the new thing in a roundabout way by not exposing a trait, cyborg not exposing inventory, placement not returning any candidates, and thus us not actually running our control plane code,
22:09:46 efried Sundar: If cyborg agent is shiny and new on a host, but the nova-compute on the host is downlevel
22:09:47 efried and then you upgrade the nova-compute
22:09:47 efried will cyborg eventually figure that out and realize it should now start reporting accel inventory on that host?
22:10:03 dansmith efried: but it would be a lot more in line with our regular checks to just be explicit about it, even if we should never hit it because of the other
22:10:21 efried dansmith: okay, so what is it that you're suggesting exactly? I didn't pick up on that.
22:10:50 efried An RPC version check from conductor to compute?
22:10:51 openstackgerrit Mykola Yakovliev proposed openstack/nova master: Fix boot_roles in InstanceSystemMetadata https://review.opendev.org/698040
22:11:04 dansmith efried: if you pass the ARQs down in the spawn call, you need an RPC version, so you get a service version, which is something you can just check for easily in conductor, alternately just bump the service version without the rpc and check for that in conductor
22:11:23 dansmith efried: or expose it as a trait and have conductor/scheduler filter or check for that trait before agreeing to use that compute
22:11:55 dansmith efried: perhaps the easiest thing would be just "if we have accel resources, also add CAN_DO_CYBORG_SHIT trait into the requirements" before we call placement during scheduling?
22:12:05 dansmith you'll need to do it again for attach when we add that
22:12:14 dansmith so CAN_DO_CYBORG_SHIT_V2alpha
22:13:02 efried dansmith: I'm not offended by the thought of those capability traits, which seem on par with what we have for e.g. "can do multiattach" or whatever
22:13:09 efried so IMO we should do those regardless
22:13:12 dansmith ack
22:13:17 dansmith so cyborg can look for that,
22:13:21 efried those are simply flags on that virt driver dict
22:13:25 dansmith and we throw that into the scheduling request also if we're doing accel stuff?
22:13:49 efried Well, I don't think we need it in the sched request, if cyborg is using it to decide whether to present the inventory in the first place.
22:14:09 efried but if you think it should be there for form's sake, I wouldn't object.
22:14:11 dansmith again, that puts the onus on cyborg to be responsible, which I don't like
22:14:19 efried where's the trust??
22:14:29 Sundar So, the use case for all this is that, the operator added accelerator to a compute node but did not upgrade n-cpu on that node?
22:14:31 dansmith right, thank you :)
22:14:35 dansmith efried: let me check my butt, hang on
22:14:57 efried That's not spelled "onus" dansmith
22:15:06 dansmith hehe
22:15:08 efried Sundar: yes, exactly.
22:15:37 efried Sundar: we're trying to make nova account for poorly-behaved a) operators, b) service code from other services.
22:15:57 efried and not-work in a predictable rather than unpredictable (and potentially unrecoverable) way.
22:16:11 dansmith just to be clear,
22:16:33 dansmith I definitely think that the rpc method change is the right thing to do, instead of just coding in new assumptions on both sides
22:16:57 dansmith I understand the hesitation to that, so I won't hold strictly to it, despite it being the safer option, IMHO
22:17:28 efried dansmith: if we did that, we would have to have a post-placement filter to remove hosts based on RPC version, right?
22:17:35 efried perhaps we already have that.
22:17:47 Sundar What's wrong with the option where Nova places a CAN_DO_CYBORG trait on some compute node RPs, and factors that into Placement query?
22:18:14 efried Sundar: nothing's wrong with that, and we should do it, but we're talking about doing another thing as well.
22:18:22 dansmith efried: no, you'd still want to pick a capable host during scheduling, and scheduling based on rpc version is not a thing
22:18:39 efried dansmith: so what's the RPC version for again? Just passing the arq uuids?
22:19:37 dansmith efried: yes, and to crystalize our request to the compute node so that (a) the RPC layer can tell if we're (for whatever reason) asking the compute node to do something it can't handle, and so that compute doesn't bake the assumption of the instance having a magical key in its flavor into meaning that it should call to cyborg to do all this stuff
22:20:13 dansmith efried: because sometime in the future, the mere presence of that flavor key will imply a slightly different thing, and we will have an upgrade concern to deal with because we have a bunch of old computes that will still be doing the assume-it thing
22:20:41 dansmith I made reference to this in a previous discussion about all of this
22:22:16 efried This is getting into details I probably don't care about rn, but do we get (a) for free (does the call bounce if the compute is too old) or do we have to do an explicit check?
22:22:37 dansmith summarized the bits you do care about here: https://review.opendev.org/#/c/631244/51/nova/conductor/manager.py
22:23:30 efried ack
22:23:55 dansmith efried: the rpc layer knows what the minimum supported version is across the cluster, so when it is converting the request, it can explode if doing so would drop an arqs parameter
22:24:14 dansmith efried: it gets you the circuit breaker, not necessarily the "graceful" part -- that should still be scheduler-based
22:24:31 efried cool
22:26:28 dansmith Sundar: while you're here, what's the plan for getting some small example of this running with an actual pci device in the intel pci ci system (or something) ?
22:27:53 Sundar dansmith: We have the server and the FPGA in a lab, and one person is working on that. We expect it by Jan, if not this year.
22:28:52 Sundar FWIW, I check each patch set with real FPGAs, with different device profiles, and also the fake driver.
22:29:49 efried We should have a 3rd party CI called "Intel Cyborg Sundar Manual CI"
22:30:08 dansmith Sundar: that would be good except that I totally don't trust you as much as a computer
22:30:10 dansmith :)
22:30:10 Sundar We already have that hehe
22:30:35 dansmith Sundar: so one server and one fpga and one person.. what is the plan? to have that be a manual "recheck use fpgas" command or something?
22:30:41 Sundar dansmith: Too bad, I am more reliable than other past Intel CIs ;)

Earlier   Later