| Posted | Nick | Remark | |
|---|---|---|---|
| #openstack-nova - 2019-08-12 | |||
| 15:06:26 | cdent | yes, that is the goal | |
| 15:06:38 | mriedem | b/c vcenter has 1000+ instances on the same compute service host / RT | |
| 15:06:52 | mriedem | so getting 1000+ instances for every instance operation on the same host is blocked by this big lock | |
| 15:06:52 | sean-k-mooney | getting the list shouldnt be the moest expensive part though right its caulating the useage? | |
| 15:07:11 | mriedem | it's 1000+ instances + several joins to other tables | |
| 15:07:11 | sean-k-mooney | e.g. https://github.com/openstack/nova/blob/52b9359d6c6f387b8b9728c723c9a2501136d605/nova/compute/resource_tracker.py#L751-L752 | |
| 15:07:16 | mriedem | over rpc as well.... | |
| 15:07:28 | mriedem | cdent: i'm curious, what does vio set for rpc_response_timeout? | |
| 15:07:39 | mriedem | considering something like this has to pull 1K instances from the db over rpc | |
| 15:07:46 | cdent | getting the instances is by far the most expensive chunk of _update_avail when you have many instances | |
| 15:08:21 | mriedem | reminds me of this https://review.opendev.org/#/c/633042/ | |
| 15:08:26 | cdent | mriedem: something relatively high, but it's not _that_ slow as to cause a problem, rather that the lock can be around for a long time | |
| 15:08:27 | sean-k-mooney | mriedem: 1000+ on vmware because its clustering multiple server under one compute service | |
| 15:08:40 | mriedem | sean-k-mooney: yes | |
| 15:08:49 | mriedem | cdent: but over the default 60 seconds? | |
| 15:09:02 | sean-k-mooney | cdent: ok that is surprising to me but if that is the most expesnive part then yes my suggestion wont help | |
| 15:09:22 | cdent | mriedem: I don't have the details to hand, but yes | |
| 15:09:46 | mriedem | cdent: you could potentially detect if you lost a race if there is something in self.tracked_instances that isn't in the list of instances you just pulled from the db | |
| 15:09:48 | cdent | sean-k-mooney: it depends on whether you are doing the loop the first time or subsequence times. 1st time is_bfv is the expensive part | |
| 15:10:16 | sean-k-mooney | i had expected self._update_usage_from_instances ot be more costly | |
| 15:10:32 | cdent | sean-k-mooney: yes, when bfv cache is cold, not but not otherwise | |
| 15:10:40 | mriedem | cdent: i'm assuming is_bfv is expensive since it has to make the is_volume_backed call which needs to get the bdms | |
| 15:10:46 | cdent | mriedem: yes | |
| 15:10:51 | cdent | and 1000 of those adds up | |
| 15:11:24 | mriedem | yeah...there is a change floating around where i asked someone if they could put a sqla joined field on the instances model to detect in a join query if an instance is volume-backed so we could optimize that | |
| 15:11:26 | mriedem | sec | |
| 15:11:50 | mriedem | the logic is pretty simple i think - is there a boot_index=0 bdm with destination_type=volume for this instance | |
| 15:11:52 | mriedem | if so, it's bfv | |
| 15:12:14 | cdent | once the cache is hot, it disappears as a problem which suggests that a similar instance cache would have similar properties... | |
| 15:12:26 | cdent | but managing such a cache is...tricky | |
| 15:12:30 | mriedem | well, my point is, | |
| 15:12:50 | cdent | but is exactly what I would think a "resource tracker" would do... | |
| 15:12:54 | mriedem | rather than (1) big InstanceList.get and then (2) big is_bfv cache build, if we could get the is_bfv value per instance in (1) then we avoid (2) | |
| 15:13:11 | mriedem | https://review.opendev.org/#/c/612626/10/nova/db/sqlalchemy/api.py | |
| 15:13:45 | cdent | sure, but that only helps on the first trip, right? | |
| 15:14:30 | efried | tssurya: I left a handful of comments as well | |
| 15:14:32 | cdent | btw: have you seen my comments about how the eventlet profiler gets all chundered up when RPC is in play? | |
| 15:14:48 | mriedem | no | |
| 15:14:53 | efried | cdent: just commented on that, I don't think n-cpu is supposed to talk to the db. | |
| 15:14:54 | cdent | turning off the indirection_api fixes it | |
| 15:15:10 | cdent | efried: only for hypervisor isolation, which is not a problem for vsphere... | |
| 15:15:32 | mriedem | cdent: efried: it's not just isolation, it's also to support rolling upgrades | |
| 15:15:32 | cdent | and for profiling/testing is not an issue | |
| 15:15:44 | cdent | which vsphere doesn't do either :) | |
| 15:15:46 | mriedem | temporarily disabling for profilng is one thing | |
| 15:16:03 | cdent | yeah, I wouldn't suggest there being some kind of config setting for it | |
| 15:16:05 | mriedem | we need a mogan for nova+ironic and a vogan for nova+vmware | |
| 15:16:10 | mriedem | and nova can then just be kvm like it already is | |
| 15:16:27 | cdent | i actually think that's probalby a good idea, sadly | |
| 15:16:48 | cdent | trying to be all things to many things is terrible | |
| 15:17:01 | mriedem | cdent: anyway, i'd probably investigate trying to detect races by comparing the instances you get from the db to the set of tracked_instances in the rt after you get the lock | |
| 15:17:11 | mriedem | and determine if you need to adjust your 'instances' like which might just be re-getting it | |
| 15:17:31 | mriedem | and then, like run rally against that to see if you can break it? idk. | |
| 15:17:44 | cdent | I'm still unclear on where a lost race experiences a problem. what breaks | |
| 15:18:23 | mriedem | claims related stuff, which at this point is numa/pci i think, | |
| 15:18:26 | sean-k-mooney | i think it woudl only be an issue for resouce that are not tracked in placmenet | |
| 15:18:29 | mriedem | since we just removed the cpu/ram/disk claims | |
| 15:20:05 | mriedem | tracked_migrations could also be wonky but on a smaller scale / tighter race | |
| 15:20:29 | cdent | go RT | |
| 15:21:13 | sean-k-mooney | well anythin relying on the perodic task to fix up allocation could be off but it should get fixed on the next run | |
| 15:21:27 | sean-k-mooney | missing frees is not that concuerning but missing claims would be | |
| 15:21:33 | cdent | sean-k-mooney: yeah, which ought to be fine | |
| 15:21:54 | mriedem | sean-k-mooney: the periodic doesn't fix up allocations... | |
| 15:21:59 | mriedem | not since ocata/pike anyway | |
| 15:22:36 | sean-k-mooney | out side of the migration ones? i though it healed allcoation for instace once the migration was conrimed | |
| 15:23:09 | mriedem | the rt does not do that | |
| 15:23:12 | cdent | sure it does: it spends lots of time in here: https://github.com/openstack/nova/blob/52b9359d6c6f387b8b9728c723c9a2501136d605/nova/compute/resource_tracker.py#L1314 | |
| 15:23:23 | mriedem | the compute manager explicitly does stuff with migration-based allocations | |
| 15:23:23 | cdent | orphans | |
| 15:23:54 | cdent | ever single allocation for instance.uuid is compared to each instance on the host | |
| 15:23:54 | mriedem | cdent: that's about it since all of the other allocation "healing" code was removed | |
| 15:24:13 | cdent | that chunk can get really loud becuase of https://github.com/openstack/nova/blob/52b9359d6c6f387b8b9728c723c9a2501136d605/nova/compute/resource_tracker.py#L1340 | |
| 15:24:22 | cdent | commenting out that line can save a bunch of log noise | |
| 15:24:51 | mriedem | debug("things are working normally") | |
| 15:24:55 | cdent | and 1372 there is one last remove | |
| 15:25:53 | sean-k-mooney | mriedem: i dont know im suspios that we normally would print that :P | |
| 15:26:14 | sean-k-mooney | but yes that does not really add much value | |
| 15:26:30 | cdent | if you both agree, I can put up a patch to remove it? | |
| 15:26:45 | cdent | meanwhile, I will create 1000 fake instances again | |
| 15:27:17 | mriedem | there used to be an audit level which is lower than debug, i'm not sure i'm totally in favor of removing it, | |
| 15:27:21 | mriedem | as the comment at the top says, | |
| 15:27:22 | mriedem | # NOTE(jaypipes): All of this code sucks. | |
| 15:27:34 | mriedem | but when i'm debugging rt issues, the more logging i have the better | |
| 15:27:39 | cdent | true | |
| 15:27:52 | mriedem | i frequently have to add logging to the rt when i'm debugging functional test fialures that involve it (like i was on friday for at least 2 hours) | |
| 15:27:59 | cdent | me too | |
| 15:28:11 | cdent | i have at least 6 additional LOG.debug in there right now | |
| 15:28:12 | sean-k-mooney | ya that is fair | |
| 15:28:32 | mriedem | https://review.opendev.org/#/c/366422/ | |
| 15:28:49 | sean-k-mooney | we do have a way to filter out log messages via config too right | |
| 15:28:50 | mriedem | i said AUDIT but i was thinking TRACE | |
| 15:29:40 | redkrieg | lyarwood: Are you around by chance? I found your blueprint for stable disk devices in rescue mode and it's exactly what I need to offer my customers reliable ISO support. Just wanted to know what the status is and whether there's anything I can work on related to it to get it in a release in the future: https://blueprints.launchpad.net/nova/+spec/virt-rescue-stable-disk-devices | |
| 15:30:42 | sean-k-mooney | just based on the ordering in the gate logs http://logs.openstack.org/38/671338/5/check/tempest-full-py3/12e1ea1/controller/logs/screen-n-cpu.txt.gz | |
| 15:31:00 | sean-k-mooney | i would have guess audit and trace were both higher then info/debug | |
| 15:31:30 | mriedem | i don't know how to filter specific messages from logging config | |
| 15:32:21 | sean-k-mooney | i think we can do it at the module level but i dont know if we can do it at the function level. we cant do it on indigiual message via config so it proably too course for this usecase | |
| 15:32:55 | sean-k-mooney | i.e. we dont want to jsut make the RT be info and everything else debug | |
| 15:33:57 | sean-k-mooney | i guess that message does serve a use in confiming which branch is taken | |
| 15:34:22 | sean-k-mooney | but for ops that run at debug level in production its proably noisier then they would like | |
| 15:36:22 | openstackgerrit | Balazs Gibizer proposed openstack/nova master: Avoid timeout from service update notification tests https://review.opendev.org/675935 | |