Earlier  
Posted Nick Remark
#openstack-nova - 2021-03-22
20:28:43 sean-k-mooney i think what we do is basically http://paste.openstack.org/show/803802/
20:29:19 sean-k-mooney or rather what libvirt does and then its comparing the baseline cpus between the source and dest host
20:30:11 rouk it is present there, yeah.
20:30:51 sean-k-mooney could you try "virsh capabilities > /tmp/caps.xml ; virsh cpu-baseline /tmp/caps.xml --migratable --features; rm -f /tmp/caps.xml"
20:31:22 rouk <feature policy='require' name='nrip-save'/>
20:31:24 rouk yeah its there.
20:31:43 sean-k-mooney so that is where its coming from
20:31:56 sean-k-mooney let me see if i can find the nova code
20:32:04 sean-k-mooney so this is not form the xml update
20:32:13 sean-k-mooney its form the eariler cpu compatiablity check
20:32:26 sean-k-mooney in pre livemigrate i think
20:32:28 rouk :( and i hoped backporting those cpu feature changes would help me, heh.
20:35:15 sean-k-mooney this is where its failing https://github.com/openstack/nova/blob/3de7fb7c327db348d04d15d4cd3c4f811a336126/nova/virt/libvirt/driver.py#L8991-L9060
20:36:18 sean-k-mooney we ask libvirt if the xml is comparitble https://github.com/openstack/nova/blob/3de7fb7c327db348d04d15d4cd3c4f811a336126/nova/virt/libvirt/host.py#L1424
20:36:20 rouk a migration should survive adding features no? could it be made soft/warn for new features?
20:36:43 sean-k-mooney rouk: no the cpu flag cannot have addtion or removales in a live migration
20:37:23 rouk alright. then new features could be trimmed off?
20:37:51 rouk new features on migrate shouldnt happen... even if its qemu being dumb and retroactively changing things.
20:38:26 sean-k-mooney am yes but im trying to see how nova is in this state
20:38:45 sean-k-mooney we can generate the cpu xml we pass in 3 ways
20:38:52 sean-k-mooney https://github.com/openstack/nova/blob/3de7fb7c327db348d04d15d4cd3c4f811a336126/nova/virt/libvirt/driver.py#L9017-L9032
20:41:12 sean-k-mooney its only caled in 2 places https://github.com/openstack/nova/blob/3de7fb7c327db348d04d15d4cd3c4f811a336126/nova/virt/libvirt/driver.py#L8701-L8708 and here https://github.com/openstack/nova/blob/3de7fb7c327db348d04d15d4cd3c4f811a336126/nova/virt/libvirt/driver.py#L872-L888
20:42:37 rouk why would the vm be checked against target host features? if the vm doesnt have the feature, it shouldnt be checked on the vm side...
20:43:06 rouk nova doesnt care if the vm is missing a feature the host has
20:43:40 rouk if it fits within the features of the new host, it should pass.
20:43:46 rouk which, it does.
20:45:58 rouk if i was to change some of these checks to only care about the host having what the vm has, itd work, no?
20:46:11 rouk or would it migrate with host features and die
20:46:19 sean-k-mooney so nova does need to check the that host has all feature that the vm uses
20:46:30 sean-k-mooney you are right ti does not care about ones that are disabled
20:46:49 sean-k-mooney so nova should ignore onces that are disabeld
20:46:55 rouk yeah, vm needs to fit inside the host, not the other side.
20:47:29 sean-k-mooney right so libvirt did not previoulsy have disabeld feature we had to ignore until recenlty
20:47:35 sean-k-mooney and nova did not provide a way to disable them
20:48:07 rouk if these checks pass, will it migrate with the bad config, or the current vm config (which will work)?
20:48:25 rouk is it as simple as making these checks looser on the vm side?
20:48:28 sean-k-mooney it will migrate with teh current config
20:48:34 sean-k-mooney which should work
20:48:37 rouk yeah
20:48:41 sean-k-mooney well
20:48:46 sean-k-mooney actully not nessisarly
20:49:04 sean-k-mooney so hte issue we have is that how migration work is actully different then most people think
20:49:28 rouk i got confused once i had to patch nova-ssh :p
20:49:28 sean-k-mooney libvirt on the source house ask libvirt on the dest host to spawn a qemu instance using an xml we provide
20:49:56 sean-k-mooney so that qemu instance i like a norm new instance that was booted with a given xml
20:50:27 sean-k-mooney if libvirt addes flags to that qemu becuase it has a different cpu model definiton
20:50:47 sean-k-mooney the qne qemu tryes to do the migration form the source to dest it will fail
20:51:03 rouk so on move, vm-side missing features need to be added as disabled?
20:51:16 sean-k-mooney yes
20:51:16 rouk instead of just missing
20:51:31 sean-k-mooney i belive they would if they weere enabled in the model
20:51:56 rouk yeah, thats what i tried to do with those patches, cause when i manually tested migration, i could make it move by disabling features on the target
20:52:14 rouk whats the most elegant way to add missing as disabled on migrate?
20:53:23 rouk or should i be forking qemu till i can get vms onto new features organically?
20:53:25 rouk heh
20:53:35 sean-k-mooney so the current failure is here https://github.com/openstack/nova/blob/3de7fb7c327db348d04d15d4cd3c4f811a336126/nova/virt/libvirt/driver.py#L8702-L8706 i ruled out the other code path
20:53:35 rouk id... rather not do that.
20:53:52 sean-k-mooney rouk: you dont need to fork qemu
20:54:47 sean-k-mooney for testing you could comment out both checks on the dest host
20:55:13 rouk but wouldnt libvirt then add the feature on move?
20:55:58 sean-k-mooney am well the xml we provide wont reference them
20:56:10 sean-k-mooney but yes your right it might do it implcitly
20:56:20 rouk i can try, if you think its a worthy test
20:57:12 sean-k-mooney i think what will happne is the libvirt error will go away but you might get a qemu error when we actully call migrate
20:57:37 rouk probably, if nova isnt the one adding these in the first place.
20:57:42 sean-k-mooney what i was thinking was we could modify the migrate xml to remove/add the cpu feature based on the config
20:57:56 sean-k-mooney rouk: basically what you were orginally trying to do
20:58:01 sean-k-mooney but also on migrate
20:58:09 sean-k-mooney the orginal patch only did it on spawn
20:58:19 rouk yeah, but wont that be a problem for people in other cases?
20:58:42 rouk for me, sure, it fixes my problem
20:58:49 sean-k-mooney yep im sure ill get a downstream bug for this ill have to help fix in a rush
20:59:02 sean-k-mooney im tyrin g to think through 2 things currently
20:59:12 sean-k-mooney what would not be a horrible hack for you
20:59:33 sean-k-mooney and waht we could do to workaround the libvirt/qemu abi break more generally
21:00:07 rouk well, more generally, cant we just edit the migration xml on compare error, we have the missing features, and we know which direction the failure is.
21:00:40 rouk if the vm is at fault, and its a new feature on the host, disable it, it will get enabled next reboot.
21:00:41 sean-k-mooney maybe we are also currently reqorking how we do the cpu compare
21:01:03 sean-k-mooney https://review.opendev.org/c/openstack/nova/+/762330
21:01:05 rouk i might need a horrible hack though, depending on how long the fix will take.
21:01:08 sean-k-mooney although i dont think that will fix it
21:01:21 rouk every day this sits, new vms come up depending on new features, and old vms are stranded.
21:01:33 rouk got hosts with broken NICs i cant evict, heh
21:01:37 rouk thanks supermicro
21:02:45 sean-k-mooney ya so this will only affect exsiting instance now that you have updated all the contianers
21:02:46 rouk if i didnt have like 1/3rd of my capacity having nics all blow up at once.
21:03:07 sean-k-mooney so option 1 is cold migration or hardreboot + libve migration
21:03:08 rouk i would hardly mind this cpu change, cause id just uh... wait till everyone reboots.
21:03:14 sean-k-mooney not grate but it would work
21:03:25 rouk yeah, its about 1500 VMs to reboot.
21:03:35 rouk and ill get quite the tomatoes thrown at me
21:03:37 sean-k-mooney option 2 patch the cpu model xml and to use the old values
21:03:45 rouk its not in the xml.
21:04:01 rouk its added higher up, in qemu cpu.c
21:04:02 sean-k-mooney no one sec
21:04:18 sean-k-mooney i mean /usr/share/libvirt/cpu_map/x86_EPYC-IBPB.xml
21:04:24 rouk yeah, it doesnt mention these features.
21:04:37 sean-k-mooney yep you could add them and set them disabled
21:04:43 rouk ah
21:04:54 rouk didnt see an arg for disabled on any of the existing lines.

Earlier   Later