qemu-dm: add command to flush buffer cache
PATCH 1/1 qemu-dm: add command to flush buffer cache
Add support for a xenstore dm command to flush qemu's buffer cache.
qemu will just keep mapping pages and not release them, which causes problems for the memory pager (since the page is mapped, it won't get paged out). When the pager has trouble finding a page to page out, it asks qemu to flush its buffer, which releases all the page mappings. This makes it possible to find pages to swap out agian.
--- ioemu-remote/xenstore.c | 3 +++ 1 file changed, 3 insertions(+)
xenstore.c +3 -0
@@ -927,6 +927,9 @@ static void xenstore_process_dm_command_do_pci_add (par);free (par);#endif + }else if (!strncmp (command,"flush-cache" , len)) { +fprintf (logfile,"dm-command: flush caches\n" ); +qemu_invalidate_map_cache (); }else {fprintf (logfile,"dm-command: unknown command\"%*s\"\n" , len, command); }
Quoted 1 line · Olaf Hering
Add support for a xenstore dm command to flush qemu's buffer cache.
Something like this is most likely also needed in mainline qemu. My search in the qemu.org git web UI did not show any of the commands in ioemu-remote, so its not clear how to forward port this change.
Olaf
Quoted 12 lines
xenstore.c +3
-0@@ -927,6 +927,9 @@ static void xenstore_process_dm_command_do_pci_add (par);free (par);#endif + }else if (!strncmp (command,"flush-cache" , len)) { +fprintf (logfile,"dm-command: flush caches\n" ); +qemu_invalidate_map_cache (); }else {fprintf (logfile,"dm-command: unknown command\"%*s\"\n" , len, command); }
Quoted 7 lines · Olaf Hering
Quoted 1 line · Olaf Hering
Add support for a xenstore dm command to flush qemu's buffer cache.
Something like this is most likely also needed in mainline qemu. My search in the qemu.org git web UI did not show any of the commands in ioemu-remote, so its not clear how to forward port this change.
Yes, upstream qemu is going to need this too.
So far we haven't needed any xenstore command in upstream qemu, because we have been using qemu's own rpc mechanism, called qmp. There is qmp support in libxl already, so it shouldn't be difficult to use it, instead of sending the command through xenstore.
Quoted 18 lines · Olaf Hering
Add support for a xenstore dm command to flush qemu's buffer cache.
qemu will just keep mapping pages and not release them, which causes problems for the memory pager (since the page is mapped, it won't get paged out). When the pager has trouble finding a page to page out, it asks qemu to flush its buffer, which releases all the page mappings. This makes it possible to find pages to swap out agian.
Signed-off-by Patrick Colp <[email protected]>Signed-off-by Olaf Hering <[email protected]>--- ioemu-remote/xenstore.c | 3 +++ 1 file changed, 3 insertions(+)
xenstore.c static void xenstore_process_dm_command_ · line 935
Quoted 9 lines
xenstore.c +3
-0@@ -927,6 +927,9 @@ static void xenstore_process_dm_command_do_pci_add (par);free (par);#endif + }else if (!strncmp (command,"flush-cache" , len)) { +fprintf (logfile,"dm-command: flush caches\n" ); +qemu_invalidate_map_cache (); }else {fprintf (logfile,"dm-command: unknown command\"%*s\"\n" , len, command); }
I guess it is not possible to send the usual ioreq with type == IOREQ_TYPE_INVALIDATE because the pager is separate from the hypervisor, correct?
Quoted 3 lines · Stefano Stabellini
I guess it is not possible to send the usual ioreq with type ==
IOREQ_TYPE_INVALIDATEbecause the pager is separate from the hypervisor, correct?
Maybe send_invalidate_req() could be triggerd by the pager in some way? Andres sent a patch to move from domctl to memop. Maybe the paging part of it could be extended to issue another command which just calls send_invalidate_req(). If thats possible, then I assume the upstream qemu does not need changing as well.
Olaf