On Mon, 5 Aug 2019 10:54:40 +0200 Igor Mammedov <imamm...@redhat.com> wrote:
> On Fri, 2 Aug 2019 17:04:21 +0200 > Christian Borntraeger <borntrae...@de.ibm.com> wrote: > > > On 02.08.19 16:59, Christian Borntraeger wrote: > > > > > > > > > On 02.08.19 16:42, Christian Borntraeger wrote: > > >> On 02.08.19 15:32, Igor Mammedov wrote: > > >>> Changelog: > > >>> since v2: > > >>> - break migration from old QEMU (since 2.12-4.1) for guest with > > >>> >8TB RAM > > >>> and drop migratable aliases patch as was agreed during v2 review FWIW, that seems reasonable to me as well. > > >>> - drop 4.2 machines patch as it's not prerequisite anymore > > >>> since v1: > > >>> - include 4.2 machines patch for adding compat RAM layout on top > > >>> - 2/4 add missing in v1 patch for splitting too big MemorySection on > > >>> several memslots > > >>> - 3/4 amend code path on alias destruction to ensure that RAMBlock > > >>> is > > >>> cleaned properly > > >>> - 4/4 add compat machine code to keep old layout (migration-wise) > > >>> for > > >>> 4.1 and older machines > > >>> > > >>> > > >>> While looking into unifying guest RAM allocation to use hostmem backends > > >>> for initial RAM (especially when -mempath is used) and retiring > > >>> memory_region_allocate_system_memory() API, leaving only single hostmem > > >>> backend, > > >>> I was inspecting how currently it is used by boards and it turns out > > >>> several > > >>> boards abuse it by calling the function several times (despite > > >>> documented contract > > >>> forbiding it). > > >>> > > >>> s390 is one of such boards where KVM limitation on memslot size got > > >>> propagated > > >>> to board design and memory_region_allocate_system_memory() was abused > > >>> to satisfy > > >>> KVM requirement for max RAM chunk where memory region alias would > > >>> suffice. > > >>> > > >>> Unfortunately, memory_region_allocate_system_memory() usage created > > >>> migration > > >>> dependency where guest RAM is transferred in migration stream as > > >>> several RAMBlocks > > >>> if it's more than KVM_SLOT_MAX_BYTES. During v2 review it was agreed to > > >>> ignore > > >>> migration breakage (documenting it in release notes) and leaving only > > >>> KVM fix. > > >>> > > >>> In order to replace these several RAM chunks with a single memdev and > > >>> keep it > > >>> working with KVM memslot size limit, following was done: > > >>> * [1/2] split too big RAM chunk inside of KVM code on several memory > > >>> slots > > >>> if necessary > > >>> * [2/2] drop manual ram splitting in s390 code > > >>> > > >>> > > >>> CC: pbonz...@redhat.com > > >>> CC: qemu-s3...@nongnu.org > > >>> CC: borntrae...@de.ibm.com > > >>> CC: th...@redhat.com > > >>> CC: da...@redhat.com > > >>> CC: coh...@redhat.com > > >> > > >> With the fixup this patch set seems to work on s390. I can start 9TB > > >> guests and > > >> I can migrate smaller guests between 4.1+patch and 4.0 and 3.1. I > > >> currently can > > >> not test migration for the 9TB guest due to lack of a 2nd system. > > > > > > I have to correct myself. The 9TB guest started up but it does not seem > > > to do > > > anything useful (it hangs). > > > > Seems that the userspace addr is wrong (its the same). > > [pid 258234] ioctl(10, KVM_SET_USER_MEMORY_REGION, {slot=0, flags=0, > > guest_phys_addr=0, memory_size=8796091973632, > > userspace_addr=0x3fff7d00000}) = 0 > > [pid 258234] ioctl(10, KVM_SET_USER_MEMORY_REGION, {slot=1, flags=0, > > guest_phys_addr=0x7fffff00000, memory_size=1099512676352, > > userspace_addr=0x3fff7d00000}) = 0 > > It's a bug in 1/2, I forgot to advance mem->ram along with mem->start_addr. > Let me fix it and simulate it on small s390 host (/me sorry for messy patches) > it won't test migration properly but should be sufficient for testing KVM > code patch. > Ok, I'll wait for a v4 before I spend any time on this :)