| Posted | Nick | Remark | |
|---|---|---|---|
| #openstack-nova - 2017-10-13 | |||
| 19:42:33 | figleaf | superdan: https://twitter.com/jaypipes/status/917561037980930048 | |
| 19:42:43 | mtreinish | man, what a slacker :) | |
| 19:43:03 | superdan | that's really unfortunate timing, for nrps and such | |
| 19:43:47 | mriedem | don't tell mlavalle | |
| 19:43:54 | mriedem | remember the 10/19 deadline | |
| 19:44:20 | mriedem | we also said we'd just merge everything now | |
| 19:44:39 | figleaf | superdan: well, let's just have fried_rice take over nested RPs | |
| 19:44:41 | mriedem | figleaf: superdan: i can pick up some review slack on the alternate hosts stuff on monday | |
| 19:45:38 | openstackgerrit | Dan Smith proposed openstack/nova master: Split get_allocations_for_instance() into useful bits https://review.openstack.org/511306 | |
| 19:45:39 | openstackgerrit | Dan Smith proposed openstack/nova master: Refactor resource tracker to account for migration allocations https://review.openstack.org/506419 | |
| 19:45:39 | openstackgerrit | Dan Smith proposed openstack/nova master: Revert allocations by migration uuid https://review.openstack.org/498949 | |
| 19:45:40 | openstackgerrit | Dan Smith proposed openstack/nova master: Make live migration hold resources with a migration allocation https://review.openstack.org/507638 | |
| 19:45:40 | openstackgerrit | Dan Smith proposed openstack/nova master: Make migration uuid hold allocations for migrating instances https://review.openstack.org/506420 | |
| 19:45:57 | mriedem | again? | |
| 19:45:58 | superdan | mriedem: ^ had to fix a test that was added underneath me after rebase | |
| 19:46:17 | superdan | mriedem: http://logs.openstack.org/19/506419/21/check/gate-nova-python27-ubuntu-xenial/5e75f1d/testr_results.html.gz | |
| 19:47:16 | mriedem | heh those were my tests :) | |
| 19:47:52 | superdan | yeah | |
| 19:49:44 | superdan | figleaf: who else needs to be around for the discussion other than jay? | |
| 19:49:49 | superdan | like can we hash it out now? | |
| 20:03:40 | figleaf | superdan: I guess anyone who knows what things people are doing with limits | |
| 20:04:07 | superdan | well, anyone that uses cachingscheduler and something like ramfilter will need that to be whole | |
| 20:04:30 | superdan | otherwise we guess in the caching scheduler with stale data, send to a compute node, and we don't even check to see if the thing can fit, right? | |
| 20:04:51 | figleaf | I had no idea that it was being used like that until mriedem brought it up | |
| 20:05:07 | superdan | that's how all the claiming on the compute node works, right? | |
| 20:06:43 | mriedem | i also fairly recently realized that myself, | |
| 20:07:04 | mriedem | that if the RamFilter isn't enabled, you don't get the memory_mb limit in the limits dict which means the claim in the RT doesn't check ram at all | |
| 20:07:22 | mriedem | same for vcpu and disk | |
| 20:07:55 | mriedem | for filter scheduler and placement it's cool beans since we filter and claim up front via placement | |
| 20:08:00 | figleaf | mriedem: so if deployers with caching scheduler add those filters, they will be ok? Or do they still need the limits sent down to compute? | |
| 20:09:01 | superdan | figleaf: no | |
| 20:09:19 | superdan | figleaf: the filter adds the limit, which makes it down to compute, which is what causes compute to actually check/claim for that thing | |
| 20:09:29 | superdan | figleaf: don't run ramfilter, you don't check ram on the compute | |
| 20:09:57 | superdan | figleaf: I mean, just adding the filter works _today_ | |
| 20:10:04 | figleaf | won't ramfilter check ram on the host state? If there isn't enough, it's discarded, no? | |
| 20:10:12 | superdan | figleaf: if you stop passing the limit down to compute, then compute never checks | |
| 20:10:21 | superdan | figleaf: yes, but it checks based on the state of the data it has | |
| 20:10:32 | superdan | figleaf: which is extra old in the case of caching scheduler | |
| 20:10:40 | superdan | figleaf: that's why we have reschedules now, | |
| 20:10:53 | superdan | for when the scheduler made a decision that is no longer correct by the time build starts on thecompute node | |
| 20:11:01 | superdan | without the limit, compute doesn't even check to see if it still fits | |
| 20:13:07 | figleaf | superdan: so the problem is here: https://github.com/openstack/nova/blob/master/nova/compute/claims.py#L240-L241 | |
| 20:13:21 | superdan | figleaf: yep | |
| 20:13:34 | figleaf | If there is no limit, can't we just use total - used? | |
| 20:13:40 | figleaf | Instead of unlimited? | |
| 20:14:29 | figleaf | Just add the line: limit = limit if limit else total | |
| 20:14:38 | superdan | figleaf: we don't want that for placement | |
| 20:15:12 | superdan | figleaf: you'd also need this level of logic: https://github.com/openstack/nova/blob/master/nova/scheduler/filters/ram_filter.py#L51-L51 | |
| 20:15:14 | superdan | not just total-used | |
| 20:15:18 | figleaf | But with placement, isn't compute claiming going away? | |
| 20:15:33 | superdan | figleaf: yes, but not with cachingscheduler, that's the point here | |
| 20:15:43 | superdan | and, | |
| 20:15:57 | superdan | we will have old computes that wouldn't have your updated claim logic, even if you baked it all in down there | |
| 20:17:18 | figleaf | They will get Selection objects with empty allocation_request fields, right? | |
| 20:17:28 | superdan | old computes can't | |
| 20:17:36 | superdan | we can't send selection objects to old computes | |
| 20:17:44 | figleaf | so conductor won't try to claim. Ugh | |
| 20:18:07 | figleaf | Selection objects will be converted to dicts for old computes | |
| 20:18:12 | figleaf | with empty limits | |
| 20:18:16 | superdan | but for the limits, the old computes will be getting empty limits dicts or something, which will mean you roll your scheduler/conductor to queens and all your pike computes stop checking | |
| 20:18:23 | superdan | right | |
| 20:18:25 | superdan | exactly that | |
| 20:20:04 | figleaf | So if we add a limits field back in there, we can at least populate the limits dict for old computes, right? | |
| 20:20:18 | figleaf | add to Selection object | |
| 20:20:39 | superdan | yep, that's what we're saying | |
| 20:21:08 | superdan | I hate to have to add such a field to our object, knowing we don't want that stuff in a cycle or two when that scheduler is gone, but I don't think we have an option | |
| 20:21:38 | superdan | I'm quite sure jay knows about this stuff, so that's why I'm highly interested in his thinking on this, | |
| 20:21:41 | figleaf | We could tell the caching scheduler users to take a hike :) | |
| 20:21:47 | superdan | but I expect he's just missing the full picture | |
| 20:22:09 | superdan | figleaf: I think mriedem would get spanked :) | |
| 20:22:17 | figleaf | "You want limits? I got your limits right here!" | |
| 20:22:21 | superdan | also, the cachingscheduler users tell us "we'll drop it when you make the other stuff usable" | |
| 20:23:15 | figleaf | superdan: yeah, some comparisons would be good to have | |
| 20:23:43 | superdan | I think it's not as straightforward.. | |
| 20:23:56 | superdan | with placement, total time and energy expended to boot should be faster, | |
| 20:24:10 | superdan | but caching scheduler means fewer db calls for each schedule operation, | |
| 20:24:12 | mriedem | yeah the huawei public cloud is using the caching scheduler for the same reason rax public cloud was, it outperforms the filter scheduler at scale b/c it's not hitting the database to pull 1000 compute node records on every select_destination request | |
| 20:24:19 | superdan | even though it's more likely to send you into a reschedule tailspin | |
| 20:24:52 | mriedem | huawei has set host_subset_size pretty high too so they are spreading the requests across computes, to avoid the reschedule collisions i think, | |
| 20:25:00 | mriedem | i still have to find out more about how much of a problem reschedules are for them | |
| 20:25:38 | mriedem | i noted that with placement, we're doing the ram/disk/cpu filtering in sql on the placement side, but they said that even with that it doesn't filter out enough nodes to make the db query to get compute nodes substantially smaller | |
| 20:25:42 | figleaf | mriedem: too bad scheduling queues never caught on. They would be perfect for that use case | |
| 20:25:50 | mriedem | so i suspect their limiting factor is not filtering on those resource classes, but other things like affinity | |
| 20:26:04 | mriedem | affinity, numa, etc | |
| 20:26:11 | mriedem | stuff we don't have working with placement yet | |
| 20:26:27 | mriedem | i'm still trying to figure out what their most expensive filters are too | |
| 20:26:56 | superdan | mriedem: ugh, that's disappointing | |
| 20:27:14 | mriedem | roughly speaking the scale they are trying to hit, from my limited knowledge so far, is 1024 computes per "cell", 30K nodes total | |
| 20:27:45 | superdan | well, it's probably worth noting that that's pretty high compared to what most people do in a "cell" | |
| 20:27:58 | mriedem | yeah, i just sent some lengthy emails about that last night, | |
| 20:28:07 | mriedem | suggesting they take a page from cern and shard their cells at 200 nodes each | |
| 20:28:11 | superdan | yeah | |
| 20:28:12 | mriedem | so 5 cells per "huawei cell" | |
| 20:28:22 | mriedem | huawei cell = cascaded openstack | |
| 20:28:29 | superdan | right | |
| 20:28:31 | mriedem | == cells v1 | |
| 20:28:36 | mriedem | :) | |
| 20:28:39 | superdan | although it's worth noting that cellsv2 cells won't help them here | |
| 20:28:40 | mriedem | but not cells v1 | |
| 20:28:49 | superdan | because global scheduler | |