All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] Migration without memory page transfer
@ 2018-04-26 23:33 Eric Wheeler
  2018-04-27  2:45 ` Peter Xu
  2018-04-27  9:24 ` Dr. David Alan Gilbert
  0 siblings, 2 replies; 4+ messages in thread
From: Eric Wheeler @ 2018-04-26 23:33 UTC (permalink / raw)
  To: qemu-devel

Hello all,

This is my first time inside of the qemu code, so your help is greatly 
appreciated!

I have been experimenting with stop/start of VMs to/from a migration 
stream that excludes RAM pages and let the RAM pages come from memory file 
provided by the memory-backend-file called '/dev/shm/mem'.

To disable writing of memory pages to the migration stream, I've disabled 
calls to ram_find_and_save_block in ram_save_iterate() and 
ram_save_complete() (see patch below).  Thus, the migration stream has the 
"ram" SaveStateEntry section start/ends, but no pages:

qemu-system-x86_64 \
	-object memory-backend-file,prealloc=no,mem-path=/dev/shm/mem,id=ram-node0,host-nodes=0,policy=bind,size=64m,share=on \
	-numa node,nodeid=0,cpus=0,memdev=ram-node0\
	-m 64 -vnc 0:0

Once the VM is running, I press ctrl-B to get the IPXE prompt and then 
run 'kernel http://192.168.0.1/foo' to start a network request and watch 
it in tcpdump.

Once the download starts, I save the migration file:
	migrate "exec:cat > /dev/shm/t"

	# ls -lh /dev/shm/t
	-rw-r--r-- 1 root root 321K Apr 26 16:06 /dev/shm/t

Now I can kill qemu and boot it again with -incoming:

qemu-system-x86_64 \
	-object memory-backend-file,prealloc=no,mem-path=/dev/shm/mem,id=ram-node0,host-nodes=0,policy=bind,size=64m,share=on \
	-numa node,nodeid=0,cpus=0,memdev=ram-node0\
	-m 64 -vnc 0:0 \
	-incoming 'exec:cat /dev/shm/t'

It seems to work.  That is, network traffic continues (http from IPXE) 
which I can see from tcpdump.  I can type into the console and it moves 
the cursor around---but there is nothing on the screen except the blinking 
text-mode cursor!  I can even blindly start a new transfer in ipxe: kernel 
http://192.168.0.222/foo2 and see it in tcpdump.

So what am I missing here?  Is the video memory not saved to /dev/shm/mem?

Or perhaps it is saved, but VGA isn't initialized to use what is 
already in /dev/shm/mem?  I've tried the cirrus, std, and vmware drivers 
to see if they behave differently, but the do not seem to.

Thanks for your help!

--
Eric Wheeler


diff --git a/migration/ram.c b/migration/ram.c
index 021d583..9f4bfff 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -2267,9 +2267,9 @@ static int ram_save_iterate(QEMUFile *f, void *opaque)
     t0 = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
     i = 0;
     while ((ret = qemu_file_rate_limit(f)) == 0) {
-        int pages;
+        int pages = 0;
 
-        pages = ram_find_and_save_block(rs, false);
+        if (0) pages = ram_find_and_save_block(rs, false);
         /* no more pages to sent */
         if (pages == 0) {
             done = 1;
@@ -2338,9 +2338,9 @@ static int ram_save_complete(QEMUFile *f, void *opaque)
 
     /* flush all remaining blocks regardless of rate limiting */
     while (true) {
-        int pages;
+        int pages = 0;
 
-        pages = ram_find_and_save_block(rs, !migration_in_colo_state());
+        if (0) pages = ram_find_and_save_block(rs, !migration_in_colo_state());
         /* no more blocks to sent */
         if (pages == 0) {
             break;

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-05-05 20:30 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-26 23:33 [Qemu-devel] Migration without memory page transfer Eric Wheeler
2018-04-27  2:45 ` Peter Xu
2018-05-05 20:30   ` Eric Wheeler
2018-04-27  9:24 ` Dr. David Alan Gilbert

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.