Re: [PATCH 0/6] migration/postcopy: enable compress during postcopy
* Wei Yang (richardw.y...@linux.intel.com) wrote: > On Thu, Nov 07, 2019 at 09:15:44AM +, Dr. David Alan Gilbert wrote: > >* Wei Yang (richardw.y...@linux.intel.com) wrote: > >> On Wed, Nov 06, 2019 at 08:11:44PM +, Dr. David Alan Gilbert wrote: > >> >* Wei Yang (richardw.y...@linux.intel.com) wrote: > >> >> This patch set tries enable compress during postcopy. > >> >> > >> >> postcopy requires to place a whole host page, while migration thread > >> >> migrate > >> >> memory in target page size. This makes postcopy need to collect all > >> >> target > >> >> pages in one host page before placing via userfaultfd. > >> >> > >> >> To enable compress during postcopy, there are two problems to solve: > >> >> > >> >> 1. Random order for target page arrival > >> >> 2. Target pages in one host page arrives without interrupt by target > >> >>page from other host page > >> >> > >> >> The first one is handled by counting the number of target pages arrived > >> >> instead of the last target page arrived. > >> >> > >> >> The second one is handled by: > >> >> > >> >> 1. Flush compress thread for each host page > >> >> 2. Wait for decompress thread for before placing host page > >> >> > >> >> With the combination of these two changes, compress is enabled during > >> >> postcopy. > >> > > >> >What have you tested this with? 2MB huge pages I guess? > >> > > >> > >> I tried with this qemu option: > >> > >>-object > >> memory-backend-file,id=mem1,mem-path=/dev/hugepages/guest2,size=4G \ > >>-device pc-dimm,id=dimm1,memdev=mem1 > >> > >> /dev/hugepages/guest2 is a file under hugetlbfs > >> > >>hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M) > > > >OK, yes that should be fine. > >I suspect on Power/ARM where they have normal memory with 16/64k pages, > >the cost of the flush will mean compression is more expensive in > >postcopy mode; but still makes it possible. > > > > Not get your point clearly about more expensive. You mean more expensive on > ARM/Power? Yes; you're doing a flush at the end of each host page; on x86 without hugepages you don't do anything, on arm/power you'll need to do a flush at the end of each of their normal pages - so that's a bit more expensive. > If the solution looks good to you, I would prepare v2. Yes; I think it is OK. Dave > >Dave > > > >> >Dave > >> > > >> >> Wei Yang (6): > >> >> migration/postcopy: reduce memset when it is zero page and > >> >> matches_target_page_size > >> >> migration/postcopy: wait for decompress thread in precopy > >> >> migration/postcopy: count target page number to decide the > >> >> place_needed > >> >> migration/postcopy: set all_zero to true on the first target page > >> >> migration/postcopy: enable random order target page arrival > >> >> migration/postcopy: enable compress during postcopy > >> >> > >> >> migration/migration.c | 11 > >> >> migration/ram.c | 65 ++- > >> >> 2 files changed, 45 insertions(+), 31 deletions(-) > >> >> > >> >> -- > >> >> 2.17.1 > >> >> > >> >-- > >> >Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK > >> > >> -- > >> Wei Yang > >> Help you, Help me > >-- > >Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK > > -- > Wei Yang > Help you, Help me -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK
Re: [PATCH 0/6] migration/postcopy: enable compress during postcopy
On Thu, Nov 07, 2019 at 09:15:44AM +, Dr. David Alan Gilbert wrote: >* Wei Yang (richardw.y...@linux.intel.com) wrote: >> On Wed, Nov 06, 2019 at 08:11:44PM +, Dr. David Alan Gilbert wrote: >> >* Wei Yang (richardw.y...@linux.intel.com) wrote: >> >> This patch set tries enable compress during postcopy. >> >> >> >> postcopy requires to place a whole host page, while migration thread >> >> migrate >> >> memory in target page size. This makes postcopy need to collect all target >> >> pages in one host page before placing via userfaultfd. >> >> >> >> To enable compress during postcopy, there are two problems to solve: >> >> >> >> 1. Random order for target page arrival >> >> 2. Target pages in one host page arrives without interrupt by target >> >>page from other host page >> >> >> >> The first one is handled by counting the number of target pages arrived >> >> instead of the last target page arrived. >> >> >> >> The second one is handled by: >> >> >> >> 1. Flush compress thread for each host page >> >> 2. Wait for decompress thread for before placing host page >> >> >> >> With the combination of these two changes, compress is enabled during >> >> postcopy. >> > >> >What have you tested this with? 2MB huge pages I guess? >> > >> >> I tried with this qemu option: >> >>-object >> memory-backend-file,id=mem1,mem-path=/dev/hugepages/guest2,size=4G \ >>-device pc-dimm,id=dimm1,memdev=mem1 >> >> /dev/hugepages/guest2 is a file under hugetlbfs >> >>hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M) > >OK, yes that should be fine. >I suspect on Power/ARM where they have normal memory with 16/64k pages, >the cost of the flush will mean compression is more expensive in >postcopy mode; but still makes it possible. > Not get your point clearly about more expensive. You mean more expensive on ARM/Power? If the solution looks good to you, I would prepare v2. >Dave > >> >Dave >> > >> >> Wei Yang (6): >> >> migration/postcopy: reduce memset when it is zero page and >> >> matches_target_page_size >> >> migration/postcopy: wait for decompress thread in precopy >> >> migration/postcopy: count target page number to decide the >> >> place_needed >> >> migration/postcopy: set all_zero to true on the first target page >> >> migration/postcopy: enable random order target page arrival >> >> migration/postcopy: enable compress during postcopy >> >> >> >> migration/migration.c | 11 >> >> migration/ram.c | 65 ++- >> >> 2 files changed, 45 insertions(+), 31 deletions(-) >> >> >> >> -- >> >> 2.17.1 >> >> >> >-- >> >Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK >> >> -- >> Wei Yang >> Help you, Help me >-- >Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK -- Wei Yang Help you, Help me
Re: [PATCH 0/6] migration/postcopy: enable compress during postcopy
* Wei Yang (richardw.y...@linux.intel.com) wrote: > On Wed, Nov 06, 2019 at 08:11:44PM +, Dr. David Alan Gilbert wrote: > >* Wei Yang (richardw.y...@linux.intel.com) wrote: > >> This patch set tries enable compress during postcopy. > >> > >> postcopy requires to place a whole host page, while migration thread > >> migrate > >> memory in target page size. This makes postcopy need to collect all target > >> pages in one host page before placing via userfaultfd. > >> > >> To enable compress during postcopy, there are two problems to solve: > >> > >> 1. Random order for target page arrival > >> 2. Target pages in one host page arrives without interrupt by target > >>page from other host page > >> > >> The first one is handled by counting the number of target pages arrived > >> instead of the last target page arrived. > >> > >> The second one is handled by: > >> > >> 1. Flush compress thread for each host page > >> 2. Wait for decompress thread for before placing host page > >> > >> With the combination of these two changes, compress is enabled during > >> postcopy. > > > >What have you tested this with? 2MB huge pages I guess? > > > > I tried with this qemu option: > >-object memory-backend-file,id=mem1,mem-path=/dev/hugepages/guest2,size=4G > \ >-device pc-dimm,id=dimm1,memdev=mem1 > > /dev/hugepages/guest2 is a file under hugetlbfs > >hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M) OK, yes that should be fine. I suspect on Power/ARM where they have normal memory with 16/64k pages, the cost of the flush will mean compression is more expensive in postcopy mode; but still makes it possible. Dave > >Dave > > > >> Wei Yang (6): > >> migration/postcopy: reduce memset when it is zero page and > >> matches_target_page_size > >> migration/postcopy: wait for decompress thread in precopy > >> migration/postcopy: count target page number to decide the > >> place_needed > >> migration/postcopy: set all_zero to true on the first target page > >> migration/postcopy: enable random order target page arrival > >> migration/postcopy: enable compress during postcopy > >> > >> migration/migration.c | 11 > >> migration/ram.c | 65 ++- > >> 2 files changed, 45 insertions(+), 31 deletions(-) > >> > >> -- > >> 2.17.1 > >> > >-- > >Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK > > -- > Wei Yang > Help you, Help me -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK
Re: [PATCH 0/6] migration/postcopy: enable compress during postcopy
On Wed, Nov 06, 2019 at 08:11:44PM +, Dr. David Alan Gilbert wrote: >* Wei Yang (richardw.y...@linux.intel.com) wrote: >> This patch set tries enable compress during postcopy. >> >> postcopy requires to place a whole host page, while migration thread migrate >> memory in target page size. This makes postcopy need to collect all target >> pages in one host page before placing via userfaultfd. >> >> To enable compress during postcopy, there are two problems to solve: >> >> 1. Random order for target page arrival >> 2. Target pages in one host page arrives without interrupt by target >>page from other host page >> >> The first one is handled by counting the number of target pages arrived >> instead of the last target page arrived. >> >> The second one is handled by: >> >> 1. Flush compress thread for each host page >> 2. Wait for decompress thread for before placing host page >> >> With the combination of these two changes, compress is enabled during >> postcopy. > >What have you tested this with? 2MB huge pages I guess? > I tried with this qemu option: -object memory-backend-file,id=mem1,mem-path=/dev/hugepages/guest2,size=4G \ -device pc-dimm,id=dimm1,memdev=mem1 /dev/hugepages/guest2 is a file under hugetlbfs hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M) >Dave > >> Wei Yang (6): >> migration/postcopy: reduce memset when it is zero page and >> matches_target_page_size >> migration/postcopy: wait for decompress thread in precopy >> migration/postcopy: count target page number to decide the >> place_needed >> migration/postcopy: set all_zero to true on the first target page >> migration/postcopy: enable random order target page arrival >> migration/postcopy: enable compress during postcopy >> >> migration/migration.c | 11 >> migration/ram.c | 65 ++- >> 2 files changed, 45 insertions(+), 31 deletions(-) >> >> -- >> 2.17.1 >> >-- >Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK -- Wei Yang Help you, Help me
Re: [PATCH 0/6] migration/postcopy: enable compress during postcopy
* Wei Yang (richardw.y...@linux.intel.com) wrote: > This patch set tries enable compress during postcopy. > > postcopy requires to place a whole host page, while migration thread migrate > memory in target page size. This makes postcopy need to collect all target > pages in one host page before placing via userfaultfd. > > To enable compress during postcopy, there are two problems to solve: > > 1. Random order for target page arrival > 2. Target pages in one host page arrives without interrupt by target >page from other host page > > The first one is handled by counting the number of target pages arrived > instead of the last target page arrived. > > The second one is handled by: > > 1. Flush compress thread for each host page > 2. Wait for decompress thread for before placing host page > > With the combination of these two changes, compress is enabled during > postcopy. What have you tested this with? 2MB huge pages I guess? Dave > Wei Yang (6): > migration/postcopy: reduce memset when it is zero page and > matches_target_page_size > migration/postcopy: wait for decompress thread in precopy > migration/postcopy: count target page number to decide the > place_needed > migration/postcopy: set all_zero to true on the first target page > migration/postcopy: enable random order target page arrival > migration/postcopy: enable compress during postcopy > > migration/migration.c | 11 > migration/ram.c | 65 ++- > 2 files changed, 45 insertions(+), 31 deletions(-) > > -- > 2.17.1 > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK
Re: [PATCH 0/6] migration/postcopy: enable compress during postcopy
On Fri, Oct 18, 2019 at 09:50:05AM -0700, no-re...@patchew.org wrote: >Patchew URL: >https://patchew.org/QEMU/20191018004850.9888-1-richardw.y...@linux.intel.com/ > > > >Hi, > >This series failed the docker-mingw@fedora build test. Please find the testing >commands and >their output below. If you have Docker installed, you can probably reproduce it >locally. > >=== TEST SCRIPT BEGIN === >#! /bin/bash >export ARCH=x86_64 >make docker-image-fedora V=1 NETWORK=1 >time make docker-test-mingw@fedora J=14 NETWORK=1 >=== TEST SCRIPT END === > > CC aarch64-softmmu/hw/timer/allwinner-a10-pit.o >In file included from /tmp/qemu-test/src/migration/ram.c:29: >/tmp/qemu-test/src/migration/ram.c: In function 'ram_load_postcopy': >/tmp/qemu-test/src/migration/ram.c:4177:56: error: cast from pointer to >integer of different size [-Werror=pointer-to-int-cast] > void *place_dest = (void *)QEMU_ALIGN_DOWN((unsigned long)host, >^ Sounds should use uintptr_t. Would change it in next version. >/tmp/qemu-test/src/include/qemu/osdep.h:268:33: note: in definition of macro >'QEMU_ALIGN_DOWN' > #define QEMU_ALIGN_DOWN(n, m) ((n) / (m) * (m)) > ^ >cc1: all warnings being treated as errors >make[1]: *** [/tmp/qemu-test/src/rules.mak:69: migration/ram.o] Error 1 >make[1]: *** Waiting for unfinished jobs > CC x86_64-softmmu/target/i386/arch_dump.o > CC aarch64-softmmu/hw/usb/tusb6010.o >--- > CC aarch64-softmmu/hw/arm/xlnx-zynqmp.o >In file included from /tmp/qemu-test/src/migration/ram.c:29: >/tmp/qemu-test/src/migration/ram.c: In function 'ram_load_postcopy': >/tmp/qemu-test/src/migration/ram.c:4177:56: error: cast from pointer to >integer of different size [-Werror=pointer-to-int-cast] > void *place_dest = (void *)QEMU_ALIGN_DOWN((unsigned long)host, >^ >/tmp/qemu-test/src/include/qemu/osdep.h:268:33: note: in definition of macro >'QEMU_ALIGN_DOWN' > #define QEMU_ALIGN_DOWN(n, m) ((n) / (m) * (m)) > ^ >cc1: all warnings being treated as errors >make[1]: *** [/tmp/qemu-test/src/rules.mak:69: migration/ram.o] Error 1 >make[1]: *** Waiting for unfinished jobs >make: *** [Makefile:482: aarch64-softmmu/all] Error 2 >make: *** Waiting for unfinished jobs >make: *** [Makefile:482: x86_64-softmmu/all] Error 2 >Traceback (most recent call last): > File "./tests/docker/docker.py", line 662, in >sys.exit(main()) >--- >raise CalledProcessError(retcode, cmd) >subprocess.CalledProcessError: Command '['sudo', '-n', 'docker', 'run', >'--label', 'com.qemu.instance.uuid=90570434880344249cff701baa188163', '-u', >'1001', '--security-opt', 'seccomp=unconfined', '--rm', '-e', 'TARGET_LIST=', >'-e', 'EXTRA_CONFIGURE_OPTS=', '-e', 'V=', '-e', 'J=14', '-e', 'DEBUG=', '-e', >'SHOW_ENV=', '-e', 'CCACHE_DIR=/var/tmp/ccache', '-v', >'/home/patchew/.cache/qemu-docker-ccache:/var/tmp/ccache:z', '-v', >'/var/tmp/patchew-tester-tmp-dh8p6f27/src/docker-src.2019-10-18-12.47.19.4164:/var/tmp/qemu:z,ro', > 'qemu:fedora', '/var/tmp/qemu/run', 'test-mingw']' returned non-zero exit >status 2. >filter=--filter=label=com.qemu.instance.uuid=90570434880344249cff701baa188163 >make[1]: *** [docker-run] Error 1 >make[1]: Leaving directory `/var/tmp/patchew-tester-tmp-dh8p6f27/src' >make: *** [docker-run-test-mingw@fedora] Error 2 > >real2m45.691s >user0m8.390s > > >The full log is available at >http://patchew.org/logs/20191018004850.9888-1-richardw.y...@linux.intel.com/testing.docker-mingw@fedora/?type=message. >--- >Email generated automatically by Patchew [https://patchew.org/]. >Please send your feedback to patchew-de...@redhat.com -- Wei Yang Help you, Help me
Re: [PATCH 0/6] migration/postcopy: enable compress during postcopy
Patchew URL: https://patchew.org/QEMU/20191018004850.9888-1-richardw.y...@linux.intel.com/ Hi, This series failed the docker-mingw@fedora build test. Please find the testing commands and their output below. If you have Docker installed, you can probably reproduce it locally. === TEST SCRIPT BEGIN === #! /bin/bash export ARCH=x86_64 make docker-image-fedora V=1 NETWORK=1 time make docker-test-mingw@fedora J=14 NETWORK=1 === TEST SCRIPT END === CC aarch64-softmmu/hw/timer/allwinner-a10-pit.o In file included from /tmp/qemu-test/src/migration/ram.c:29: /tmp/qemu-test/src/migration/ram.c: In function 'ram_load_postcopy': /tmp/qemu-test/src/migration/ram.c:4177:56: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast] void *place_dest = (void *)QEMU_ALIGN_DOWN((unsigned long)host, ^ /tmp/qemu-test/src/include/qemu/osdep.h:268:33: note: in definition of macro 'QEMU_ALIGN_DOWN' #define QEMU_ALIGN_DOWN(n, m) ((n) / (m) * (m)) ^ cc1: all warnings being treated as errors make[1]: *** [/tmp/qemu-test/src/rules.mak:69: migration/ram.o] Error 1 make[1]: *** Waiting for unfinished jobs CC x86_64-softmmu/target/i386/arch_dump.o CC aarch64-softmmu/hw/usb/tusb6010.o --- CC aarch64-softmmu/hw/arm/xlnx-zynqmp.o In file included from /tmp/qemu-test/src/migration/ram.c:29: /tmp/qemu-test/src/migration/ram.c: In function 'ram_load_postcopy': /tmp/qemu-test/src/migration/ram.c:4177:56: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast] void *place_dest = (void *)QEMU_ALIGN_DOWN((unsigned long)host, ^ /tmp/qemu-test/src/include/qemu/osdep.h:268:33: note: in definition of macro 'QEMU_ALIGN_DOWN' #define QEMU_ALIGN_DOWN(n, m) ((n) / (m) * (m)) ^ cc1: all warnings being treated as errors make[1]: *** [/tmp/qemu-test/src/rules.mak:69: migration/ram.o] Error 1 make[1]: *** Waiting for unfinished jobs make: *** [Makefile:482: aarch64-softmmu/all] Error 2 make: *** Waiting for unfinished jobs make: *** [Makefile:482: x86_64-softmmu/all] Error 2 Traceback (most recent call last): File "./tests/docker/docker.py", line 662, in sys.exit(main()) --- raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command '['sudo', '-n', 'docker', 'run', '--label', 'com.qemu.instance.uuid=90570434880344249cff701baa188163', '-u', '1001', '--security-opt', 'seccomp=unconfined', '--rm', '-e', 'TARGET_LIST=', '-e', 'EXTRA_CONFIGURE_OPTS=', '-e', 'V=', '-e', 'J=14', '-e', 'DEBUG=', '-e', 'SHOW_ENV=', '-e', 'CCACHE_DIR=/var/tmp/ccache', '-v', '/home/patchew/.cache/qemu-docker-ccache:/var/tmp/ccache:z', '-v', '/var/tmp/patchew-tester-tmp-dh8p6f27/src/docker-src.2019-10-18-12.47.19.4164:/var/tmp/qemu:z,ro', 'qemu:fedora', '/var/tmp/qemu/run', 'test-mingw']' returned non-zero exit status 2. filter=--filter=label=com.qemu.instance.uuid=90570434880344249cff701baa188163 make[1]: *** [docker-run] Error 1 make[1]: Leaving directory `/var/tmp/patchew-tester-tmp-dh8p6f27/src' make: *** [docker-run-test-mingw@fedora] Error 2 real2m45.691s user0m8.390s The full log is available at http://patchew.org/logs/20191018004850.9888-1-richardw.y...@linux.intel.com/testing.docker-mingw@fedora/?type=message. --- Email generated automatically by Patchew [https://patchew.org/]. Please send your feedback to patchew-de...@redhat.com
[PATCH 0/6] migration/postcopy: enable compress during postcopy
This patch set tries enable compress during postcopy. postcopy requires to place a whole host page, while migration thread migrate memory in target page size. This makes postcopy need to collect all target pages in one host page before placing via userfaultfd. To enable compress during postcopy, there are two problems to solve: 1. Random order for target page arrival 2. Target pages in one host page arrives without interrupt by target page from other host page The first one is handled by counting the number of target pages arrived instead of the last target page arrived. The second one is handled by: 1. Flush compress thread for each host page 2. Wait for decompress thread for before placing host page With the combination of these two changes, compress is enabled during postcopy. Wei Yang (6): migration/postcopy: reduce memset when it is zero page and matches_target_page_size migration/postcopy: wait for decompress thread in precopy migration/postcopy: count target page number to decide the place_needed migration/postcopy: set all_zero to true on the first target page migration/postcopy: enable random order target page arrival migration/postcopy: enable compress during postcopy migration/migration.c | 11 migration/ram.c | 65 ++- 2 files changed, 45 insertions(+), 31 deletions(-) -- 2.17.1