On Mon, 9 May 2016 17:32:50 +0100 "Daniel P. Berrange" <berra...@redhat.com> wrote:
> On Mon, May 09, 2016 at 06:20:22PM +0200, Petr Tesarik wrote: > > On Mon, 9 May 2016 17:13:07 +0100 > > "Daniel P. Berrange" <berra...@redhat.com> wrote: > > > > > On Mon, May 09, 2016 at 09:52:28AM -0600, Eric Blake wrote: > > > > On 05/07/2016 05:32 PM, Nan Li wrote: > > > > > When running the command "dump-guest-memory", we usually need a large > > > > > space > > > > > of storage to save the dumpfile into disk. It costs not only much > > > > > time to > > > > > save a file in some of hard disks, but also costs limited storage in > > > > > host. > > > > > In order to reduce the saving time and make it convenient for users > > > > > to dump > > > > > the guest memory, we introduce a Filesystem in Userspace (FUSE) to > > > > > save the > > > > > dump file in RAM. It is selectable in the configure file, adding a > > > > > compiling > > > > > of package "fuse-devel". It doesn't change the way of dumping guest > > > > > memory. > > > > > > > > Why introduce FUSE? Can we reuse NBD instead? > > > > > > The commit message talks of letting QEMU dump to RAM avoiding disk I/O. > > > IOW, it seems like it could just dump to any tmpfs directory. > > > > > > I'm not really seeing a compelling reason why QEMU needs to mount a fuse > > > filesystem itself - whatever app is using QEMU could handle mounting of > > > fs without QEMU's involvement at all. > > > > The ultimate goal is to export internal QEMU state (memory content, > > register values) as an ELF file, so you could simply reuse any existing > > tools that can work with ELF dump files (gdb, crash, makedumpfile, > > readelf, etc.) instead of re-inventing the wheel for each of those > > tools. > > > > This cannot be really done from outside of QEMU without too much > > overhead (how would you access guest memory from outside QEMU?). > > Maybe I'm missing something, but IIUC the 'dump-guest-memory' monitor > command in QEMU already dumps in ELF format which can be used by standard > ELF tools. If you don't want that dump to hit disk, then you could mount > a tmpfs and then tell QEMU to write to that. It's not the same kind of beast: 1. You need double the amount of RAM in the host. Oh, yes, some folks like to create VMs with a RAM size of a few hundred GBs of RAM, and then it may not be negligible... 2. The memory must still be copied. This is made a bit worse by the fact that tmpfs does not pre-allocate enough RAM, so even copying a few GBs takes several seconds. 3. Most importantly, if the file is created on the fly, it's a live memory source, i.e. repeated reads will reflect changes in the running guest. Some use cases are substantially slower with the dump-then-use approach. For example, makedumpfile can estimate the resulting dump size based on data from the running kernel. It reads only a tiny portion of system RAM to do the analysis, but since only makedumpfile knows the exact addresses, you would still need a full dump for that. With the FUSE approach, guest pages are served on demand when the application requests them. Petr T