Manpage for uname and dmesg
authorRichard W.M. Jones <rjones@redhat.com>
Tue, 10 Jun 2008 13:13:04 +0000 (14:13 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Tue, 10 Jun 2008 13:13:04 +0000 (14:13 +0100)
virt-mem.1
virt-mem.pod
virt-mem.txt

index 9f4bf59..6ae22bd 100644 (file)
 .IX Title "VIRT-MEM 1"
 .TH VIRT-MEM 1 "2008-06-10" "virt-mem-0.2.1" "Virtualization Support"
 .SH "NAME"
-virt\-df \- 'df'\-like utility for virtualization stats
+virt\-uname \- system information for virtual machines
+.PP
+virt\-dmesg \- print kernel messages for virtual machines
 .SH "SUMMARY"
 .IX Header "SUMMARY"
-virt-df [\-options]
+virt-uname [\-options] [domains...]
+.PP
+virt-dmesg [\-options] [domains...]
 .SH "DESCRIPTION"
 .IX Header "DESCRIPTION"
-virt-df is a \fIdf\fR\|(1)\-like utility for showing the actual disk usage
-of guests.  Many command line options are the same as for ordinary
-\&\fIdf\fR.
+These virtualization tools allow you to inspect the status of
+virtual machines running Linux.
 .PP
-It uses libvirt so it is capable of showing stats across a variety of
-different virtualization systems.
-.SH "OPTIONS"
-.IX Header "OPTIONS"
-.IP "\fB\-a\fR, \fB\-\-all\fR" 4
-.IX Item "-a, --all"
-Show all domains.  The default is show only running (active) domains.
+The tools all use libvirt so are capable of showing stats across a
+variety of different virtualization systems.
+.SH "COMMON OPTIONS"
+.IX Header "COMMON OPTIONS"
 .IP "\fB\-c uri\fR, \fB\-\-connect uri\fR" 4
 .IX Item "-c uri, --connect uri"
 Connect to libvirt \s-1URI\s0.  The default is to connect to the default
@@ -157,74 +157,103 @@ libvirt \s-1URI\s0, normally Xen.
 Print the results in \s-1CSV\s0 format, suitable for importing into a
 spreadsheet or database.
 .Sp
-This option is only supported if virt-df was built with \s-1CSV\s0 support.
+This option is only supported if virt-mem was built with \s-1CSV\s0 support.
 .IP "\fB\-\-debug\fR" 4
 .IX Item "--debug"
 Emit debugging information on stderr.  Please supply this if you
 report a bug.
-.IP "\fB\-h\fR, \fB\-\-human\-readable\fR" 4
-.IX Item "-h, --human-readable"
-Display human-readable sizes (eg. \*(L"10GiB\*(R" instead of large numbers).
-.IP "\fB\-i\fR, \fB\-\-inodes\fR" 4
-.IX Item "-i, --inodes"
-Display inode information.
-.Sp
-This option only works for Unix-like filesystems.
 .IP "\fB\-\-help\fR" 4
 .IX Item "--help"
 Display usage summary.
-.IP "\fB\-t diskimage\fR" 4
-.IX Item "-t diskimage"
+.IP "\fB\-t memoryimage\fR" 4
+.IX Item "-t memoryimage"
 Test mode.  Instead of checking libvirt for domain information, this
-runs virt-df directly on the disk image (or device) supplied.  You may
+runs the virt-mem tool directly on the memory image supplied.  You may
 specify the \fB\-t\fR option multiple times.
 .IP "\fB\-\-version\fR" 4
 .IX Item "--version"
 Display version and exit.
-.SH "EXAMPLE"
-.IX Header "EXAMPLE"
-.Vb 5
-\& # virt-df 
-\& Filesystem                1K-blocks    Used Available Type
-\& f9x32kvm:hda1                190740   24817    165923 Linux ext2/3
-\& f9x32kvm:VolGroup/LogVol00  6568348 3401656   3166692 Linux ext2/3
-\& f9x32kvm:VolGroup/LogVol01  1015808                   Linux swap
+.IP "\fB\-E auto|littleendian|bigendian\fR" 4
+.IX Item "-E auto|littleendian|bigendian"
+.PD 0
+.IP "\fB\-T auto|i386|x86\-64|\f(BIaddress\fB\fR" 4
+.IX Item "-T auto|i386|x86-64|address"
+.IP "\fB\-W auto|32|64\fR" 4
+.IX Item "-W auto|32|64"
+.PD
+These options force the endianness, text address, and word size for
+the subsequent domains listed on the command line (or if no domains
+are listed, then for all domains).
+.Sp
+These default to \fIauto\fR which tries to do automatic detection (using
+libvirt, or details from the memory images themselves).  You only need
+to use these options if virt-mem tools get the automatic detection
+wrong.
+.Sp
+Endianness (\fI\-E\fR) sets the memory endianness, for data, pointers and
+so on.
+.Sp
+Text address (\fI\-T\fR) sets the base address of the kernel image.  \fI\-T
+i386\fR means to try some common addresses for i386\-based kernels.  \fI\-T
+x86\-64\fR means to try some common addresses for x86\-64\-based kernels.
+\&\fI\-T \fIaddress\fI\fR sets the address specifically (\fI0x\fR prefix is
+allowed to specify hex addresses).
+.Sp
+Word size (\fI\-W\fR) sets the word size, 32 or 64 bits.
+.IP "\fB\-A auto|i386|x86\-64|...\fR" 4
+.IX Item "-A auto|i386|x86-64|..."
+This option sets the architecture to one of a collection of known
+architectures.  It is equivalent to setting endianness and wordsize in
+one go, but not text address.
+.SH "EXAMPLES"
+.IX Header "EXAMPLES"
+.Vb 3
+\& # virt-uname
+\& f9x32kvm: Linux localhost.localdomain 2.6.24-0.155.rc7.git6.fc9 #1
+\& SMP Tue Jan 15 17:52:31 EST 2008 i686 (none)
+.Ve
+.PP
+.Vb 11
+\& # virt-dmesg f9x32kvm | tail
+\& <6>Bluetooth: Core ver 2.11
+\& <6>NET: Registered protocol family 31
+\& <6>Bluetooth: HCI device and connection manager initialized
+\& <6>Bluetooth: HCI socket layer initialized
+\& <6>Bluetooth: L2CAP ver 2.9
+\& <6>Bluetooth: L2CAP socket layer initialized
+\& <6>Bluetooth: RFCOMM socket layer initialized
+\& <6>Bluetooth: RFCOMM TTY layer initialized
+\& <6>Bluetooth: RFCOMM ver 1.8
+\& <7>eth0: no IPv6 routers present
 .Ve
 .SH "SHORTCOMINGS"
 .IX Header "SHORTCOMINGS"
-virt-df spies on the guest's disk image to try to work out how much
-disk space it is actually using.  There are some shortcomings to this,
-described here.
+The virt-mem tools spy on the guest's memory image.  There are some
+shortcomings to this, described here.
+.PP
+(1) Only works on specific, tested releases of Linux kernels.  Support
+for arbitrary Linux kernel versions may be patchy because of changes
+in the internal structures used.  Support for non-Linux kernels is
+currently non\-existent, and probably impossible for Windows because of
+lack of an acceptable source license.
 .PP
-(1) It only understands a limited set of partition types.  Assuming
-that the files and partitions that we get back from libvirt / Xen
-correspond to block devices in the guests, we can go some way towards
-manually parsing those partitions to find out what they contain.  We
-can read the \s-1MBR\s0, \s-1LVM\s0, superblocks and so on.  However that's a lot of
-parsing work, and currently there is no library which understands a
-wide range of partition schemes and filesystem types (not even
-libparted which doesn't support \s-1LVM\s0 yet).  The Linux kernel does
-support that, but there's not really any good way to access that work.
+(2) Heuristics are used which may mean in the worst case that the
+output is wrong.
 .PP
-The current implementation uses a hand-coded parser which understands
-some formats (\s-1MBR\s0, \s-1LVM2\s0, ext2/3, \s-1DOS\s0 \s-1FAT\s0, Windows \s-1NTFS\s0, Linux swap and
-Linux suspend partitions).
+(3) Structures which are frequently modified may cause errors.  This
+could be a problem if, for example, the process table in the guest is
+being rapidly updated.
 .PP
-(2) The statistics you get are delayed.  The real state of, for
-example, an ext2 filesystem is only stored in the memory of the
-guest's kernel.  The ext2 superblock contains some meta-information
-about blocks used and free, but this superblock is not up to date.  In
-fact the guest kernel may not update it even on a 'sync', not until
-the filesystem is unmounted.  Some operations do appear to write the
-superblock, for example \fIfsync\fR\|(2) [that is my reading of the ext2/3
-source code at least].
+(4) We have to scan memory to find kernel symbols, etc., which can be
+quite slow.  Optimizing the memory scanner would help, and caching the
+base address of the symbol table(s) would make it dramatically faster.
 .SH "SECURITY"
 .IX Header "SECURITY"
 The current code tries hard to be secure against malicious guests, for
-example guests which set up malicious disk partitions.
+example guests which set up malicious kernel memory.
 .SH "SEE ALSO"
 .IX Header "SEE ALSO"
-\&\fIdf\fR\|(1),
+\&\fIuname\fR\|(1),\fIdmesg\fR\|(1),
 \&\fIvirsh\fR\|(1),
 \&\fIxm\fR\|(1),
 <http://www.libvirt.org/ocaml/>,
@@ -236,7 +265,7 @@ example guests which set up malicious disk partitions.
 Richard W.M. Jones <rjones @ redhat . com>
 .SH "COPYRIGHT"
 .IX Header "COPYRIGHT"
-(C) Copyright 2007\-2008 Red Hat Inc., Richard W.M. Jones
+(C) Copyright 2008 Red Hat Inc., Richard W.M. Jones
 http://libvirt.org/
 .PP
 This program is free software; you can redistribute it and/or modify
@@ -257,7 +286,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, \s-1MA\s0 02139, \s-1USA\s0.
 Bugs can be viewed on the Red Hat Bugzilla page:
 <https://bugzilla.redhat.com/>.
 .PP
-If you find a bug in virt\-df, please follow these steps to report it:
+If you find a bug in virt\-mem, please follow these steps to report it:
 .IP "1. Check for existing bug reports" 4
 .IX Item "1. Check for existing bug reports"
 Go to <https://bugzilla.redhat.com/> and search for similar bugs.
@@ -268,17 +297,17 @@ have fixed it.
 Run
 .Sp
 .Vb 1
-\& virt-df --debug > virt-df.log 2>&1
+\& virt-[program] --debug > virt-mem.log 2>&1
 .Ve
 .Sp
-and keep \fIvirt\-df.log\fR.  It contains error messages which you should
+and keep \fIvirt\-mem.log\fR.  It contains error messages which you should
 submit with your bug report.
-.IP "3. Get version of virt-df and version of libvirt." 4
-.IX Item "3. Get version of virt-df and version of libvirt."
+.IP "3. Get version of virt-mem and version of libvirt." 4
+.IX Item "3. Get version of virt-mem and version of libvirt."
 Run
 .Sp
 .Vb 1
-\& virt-df --version
+\& virt-[program] --version
 .Ve
 .IP "4. Submit a bug report." 4
 .IX Item "4. Submit a bug report."
index f5dc3c3..1c81e29 100644 (file)
@@ -1,28 +1,27 @@
 =head1 NAME
 
-virt-df - 'df'-like utility for virtualization stats
+virt-uname - system information for virtual machines
+
+virt-dmesg - print kernel messages for virtual machines
 
 =head1 SUMMARY
 
-virt-df [-options]
+virt-uname [-options] [domains...]
+
+virt-dmesg [-options] [domains...]
 
 =head1 DESCRIPTION
 
-virt-df is a L<df(1)>-like utility for showing the actual disk usage
-of guests.  Many command line options are the same as for ordinary
-I<df>.
+These virtualization tools allow you to inspect the status of
+virtual machines running Linux.
 
-It uses libvirt so it is capable of showing stats across a variety of
-different virtualization systems.
+The tools all use libvirt so are capable of showing stats across a
+variety of different virtualization systems.
 
-=head1 OPTIONS
+=head1 COMMON OPTIONS
 
 =over 4
 
-=item B<-a>, B<--all>
-
-Show all domains.  The default is show only running (active) domains.
-
 =item B<-c uri>, B<--connect uri>
 
 Connect to libvirt URI.  The default is to connect to the default
@@ -33,84 +32,109 @@ libvirt URI, normally Xen.
 Print the results in CSV format, suitable for importing into a
 spreadsheet or database.
 
-This option is only supported if virt-df was built with CSV support.
+This option is only supported if virt-mem was built with CSV support.
 
 =item B<--debug>
 
 Emit debugging information on stderr.  Please supply this if you
 report a bug.
 
-=item B<-h>, B<--human-readable>
-
-Display human-readable sizes (eg. "10GiB" instead of large numbers).
-
-=item B<-i>, B<--inodes>
-
-Display inode information.
-
-This option only works for Unix-like filesystems.
-
 =item B<--help>
 
 Display usage summary.
 
-=item B<-t diskimage>
+=item B<-t memoryimage>
 
 Test mode.  Instead of checking libvirt for domain information, this
-runs virt-df directly on the disk image (or device) supplied.  You may
+runs the virt-mem tool directly on the memory image supplied.  You may
 specify the B<-t> option multiple times.
 
 =item B<--version>
 
 Display version and exit.
 
+=item B<-E auto|littleendian|bigendian>
+
+=item B<-T auto|i386|x86-64|I<address>>
+
+=item B<-W auto|32|64>
+
+These options force the endianness, text address, and word size for
+the subsequent domains listed on the command line (or if no domains
+are listed, then for all domains).
+
+These default to I<auto> which tries to do automatic detection (using
+libvirt, or details from the memory images themselves).  You only need
+to use these options if virt-mem tools get the automatic detection
+wrong.
+
+Endianness (I<-E>) sets the memory endianness, for data, pointers and
+so on.
+
+Text address (I<-T>) sets the base address of the kernel image.  I<-T
+i386> means to try some common addresses for i386-based kernels.  I<-T
+x86-64> means to try some common addresses for x86-64-based kernels.
+I<-T I<address>> sets the address specifically (I<0x> prefix is
+allowed to specify hex addresses).
+
+Word size (I<-W>) sets the word size, 32 or 64 bits.
+
+=item B<-A auto|i386|x86-64|...>
+
+This option sets the architecture to one of a collection of known
+architectures.  It is equivalent to setting endianness and wordsize in
+one go, but not text address.
+
 =back
 
-=head1 EXAMPLE
+=head1 EXAMPLES
+
+ # virt-uname
+ f9x32kvm: Linux localhost.localdomain 2.6.24-0.155.rc7.git6.fc9 #1
+ SMP Tue Jan 15 17:52:31 EST 2008 i686 (none)
 
- # virt-df 
- Filesystem                1K-blocks    Used Available Type
- f9x32kvm:hda1                190740   24817    165923 Linux ext2/3
- f9x32kvm:VolGroup/LogVol00  6568348 3401656   3166692 Linux ext2/3
- f9x32kvm:VolGroup/LogVol01  1015808                   Linux swap
+ # virt-dmesg f9x32kvm | tail
+ <6>Bluetooth: Core ver 2.11
+ <6>NET: Registered protocol family 31
+ <6>Bluetooth: HCI device and connection manager initialized
+ <6>Bluetooth: HCI socket layer initialized
+ <6>Bluetooth: L2CAP ver 2.9
+ <6>Bluetooth: L2CAP socket layer initialized
+ <6>Bluetooth: RFCOMM socket layer initialized
+ <6>Bluetooth: RFCOMM TTY layer initialized
+ <6>Bluetooth: RFCOMM ver 1.8
+ <7>eth0: no IPv6 routers present
 
 =head1 SHORTCOMINGS
 
-virt-df spies on the guest's disk image to try to work out how much
-disk space it is actually using.  There are some shortcomings to this,
-described here.
-
-(1) It only understands a limited set of partition types.  Assuming
-that the files and partitions that we get back from libvirt / Xen
-correspond to block devices in the guests, we can go some way towards
-manually parsing those partitions to find out what they contain.  We
-can read the MBR, LVM, superblocks and so on.  However that's a lot of
-parsing work, and currently there is no library which understands a
-wide range of partition schemes and filesystem types (not even
-libparted which doesn't support LVM yet).  The Linux kernel does
-support that, but there's not really any good way to access that work.
-
-The current implementation uses a hand-coded parser which understands
-some formats (MBR, LVM2, ext2/3, DOS FAT, Windows NTFS, Linux swap and
-Linux suspend partitions).
-
-(2) The statistics you get are delayed.  The real state of, for
-example, an ext2 filesystem is only stored in the memory of the
-guest's kernel.  The ext2 superblock contains some meta-information
-about blocks used and free, but this superblock is not up to date.  In
-fact the guest kernel may not update it even on a 'sync', not until
-the filesystem is unmounted.  Some operations do appear to write the
-superblock, for example L<fsync(2)> [that is my reading of the ext2/3
-source code at least].
+The virt-mem tools spy on the guest's memory image.  There are some
+shortcomings to this, described here.
+
+(1) Only works on specific, tested releases of Linux kernels.  Support
+for arbitrary Linux kernel versions may be patchy because of changes
+in the internal structures used.  Support for non-Linux kernels is
+currently non-existent, and probably impossible for Windows because of
+lack of an acceptable source license.
+
+(2) Heuristics are used which may mean in the worst case that the
+output is wrong.
+
+(3) Structures which are frequently modified may cause errors.  This
+could be a problem if, for example, the process table in the guest is
+being rapidly updated.
+
+(4) We have to scan memory to find kernel symbols, etc., which can be
+quite slow.  Optimizing the memory scanner would help, and caching the
+base address of the symbol table(s) would make it dramatically faster.
 
 =head1 SECURITY
 
 The current code tries hard to be secure against malicious guests, for
-example guests which set up malicious disk partitions.
+example guests which set up malicious kernel memory.
 
 =head1 SEE ALSO
 
-L<df(1)>,
+L<uname(1)>,L<dmesg(1)>,
 L<virsh(1)>,
 L<xm(1)>,
 L<http://www.libvirt.org/ocaml/>,
@@ -124,7 +148,7 @@ Richard W.M. Jones <rjones @ redhat . com>
 
 =head1 COPYRIGHT
 
-(C) Copyright 2007-2008 Red Hat Inc., Richard W.M. Jones
+(C) Copyright 2008 Red Hat Inc., Richard W.M. Jones
 http://libvirt.org/
 
 This program is free software; you can redistribute it and/or modify
@@ -146,7 +170,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 Bugs can be viewed on the Red Hat Bugzilla page:
 L<https://bugzilla.redhat.com/>.
 
-If you find a bug in virt-df, please follow these steps to report it:
+If you find a bug in virt-mem, please follow these steps to report it:
 
 =over 4
 
@@ -160,16 +184,16 @@ have fixed it.
 
 Run
 
- virt-df --debug > virt-df.log 2>&1
+ virt-[program] --debug > virt-mem.log 2>&1
 
-and keep I<virt-df.log>.  It contains error messages which you should
+and keep I<virt-mem.log>.  It contains error messages which you should
 submit with your bug report.
 
-=item 3. Get version of virt-df and version of libvirt.
+=item 3. Get version of virt-mem and version of libvirt.
 
 Run
 
- virt-df --version
+ virt-[program] --version
 
 =item 4. Submit a bug report.
 
index a8ab3dc..119ede4 100644 (file)
@@ -1,20 +1,21 @@
 NAME
-    virt-df - 'df'-like utility for virtualization stats
+    virt-uname - system information for virtual machines
+
+    virt-dmesg - print kernel messages for virtual machines
 
 SUMMARY
-    virt-df [-options]
+    virt-uname [-options] [domains...]
 
-DESCRIPTION
-    virt-df is a df(1)-like utility for showing the actual disk usage of
-    guests. Many command line options are the same as for ordinary *df*.
+    virt-dmesg [-options] [domains...]
 
-    It uses libvirt so it is capable of showing stats across a variety of
-    different virtualization systems.
+DESCRIPTION
+    These virtualization tools allow you to inspect the status of virtual
+    machines running Linux.
 
-OPTIONS
-    -a, --all
-        Show all domains. The default is show only running (active) domains.
+    The tools all use libvirt so are capable of showing stats across a
+    variety of different virtualization systems.
 
+COMMON OPTIONS
     -c uri, --connect uri
         Connect to libvirt URI. The default is to connect to the default
         libvirt URI, normally Xen.
@@ -23,72 +24,96 @@ OPTIONS
         Print the results in CSV format, suitable for importing into a
         spreadsheet or database.
 
-        This option is only supported if virt-df was built with CSV support.
+        This option is only supported if virt-mem was built with CSV
+        support.
 
     --debug
         Emit debugging information on stderr. Please supply this if you
         report a bug.
 
-    -h, --human-readable
-        Display human-readable sizes (eg. "10GiB" instead of large numbers).
-
-    -i, --inodes
-        Display inode information.
-
-        This option only works for Unix-like filesystems.
-
     --help
         Display usage summary.
 
-    -t diskimage
+    -t memoryimage
         Test mode. Instead of checking libvirt for domain information, this
-        runs virt-df directly on the disk image (or device) supplied. You
+        runs the virt-mem tool directly on the memory image supplied. You
         may specify the -t option multiple times.
 
     --version
         Display version and exit.
 
-EXAMPLE
-     # virt-df 
-     Filesystem                1K-blocks    Used Available Type
-     f9x32kvm:hda1                190740   24817    165923 Linux ext2/3
-     f9x32kvm:VolGroup/LogVol00  6568348 3401656   3166692 Linux ext2/3
-     f9x32kvm:VolGroup/LogVol01  1015808                   Linux swap
+    -E auto|littleendian|bigendian
+    -T auto|i386|x86-64|*address*
+    -W auto|32|64
+        These options force the endianness, text address, and word size for
+        the subsequent domains listed on the command line (or if no domains
+        are listed, then for all domains).
+
+        These default to *auto* which tries to do automatic detection (using
+        libvirt, or details from the memory images themselves). You only
+        need to use these options if virt-mem tools get the automatic
+        detection wrong.
+
+        Endianness (*-E*) sets the memory endianness, for data, pointers and
+        so on.
+
+        Text address (*-T*) sets the base address of the kernel image. *-T
+        i386* means to try some common addresses for i386-based kernels. *-T
+        x86-64* means to try some common addresses for x86-64-based kernels.
+        *-T *address** sets the address specifically (*0x* prefix is allowed
+        to specify hex addresses).
+
+        Word size (*-W*) sets the word size, 32 or 64 bits.
+
+    -A auto|i386|x86-64|...
+        This option sets the architecture to one of a collection of known
+        architectures. It is equivalent to setting endianness and wordsize
+        in one go, but not text address.
+
+EXAMPLES
+     # virt-uname
+     f9x32kvm: Linux localhost.localdomain 2.6.24-0.155.rc7.git6.fc9 #1
+     SMP Tue Jan 15 17:52:31 EST 2008 i686 (none)
+
+     # virt-dmesg f9x32kvm | tail
+     <6>Bluetooth: Core ver 2.11
+     <6>NET: Registered protocol family 31
+     <6>Bluetooth: HCI device and connection manager initialized
+     <6>Bluetooth: HCI socket layer initialized
+     <6>Bluetooth: L2CAP ver 2.9
+     <6>Bluetooth: L2CAP socket layer initialized
+     <6>Bluetooth: RFCOMM socket layer initialized
+     <6>Bluetooth: RFCOMM TTY layer initialized
+     <6>Bluetooth: RFCOMM ver 1.8
+     <7>eth0: no IPv6 routers present
 
 SHORTCOMINGS
-    virt-df spies on the guest's disk image to try to work out how much disk
-    space it is actually using. There are some shortcomings to this,
-    described here.
-
-    (1) It only understands a limited set of partition types. Assuming that
-    the files and partitions that we get back from libvirt / Xen correspond
-    to block devices in the guests, we can go some way towards manually
-    parsing those partitions to find out what they contain. We can read the
-    MBR, LVM, superblocks and so on. However that's a lot of parsing work,
-    and currently there is no library which understands a wide range of
-    partition schemes and filesystem types (not even libparted which doesn't
-    support LVM yet). The Linux kernel does support that, but there's not
-    really any good way to access that work.
-
-    The current implementation uses a hand-coded parser which understands
-    some formats (MBR, LVM2, ext2/3, DOS FAT, Windows NTFS, Linux swap and
-    Linux suspend partitions).
-
-    (2) The statistics you get are delayed. The real state of, for example,
-    an ext2 filesystem is only stored in the memory of the guest's kernel.
-    The ext2 superblock contains some meta-information about blocks used and
-    free, but this superblock is not up to date. In fact the guest kernel
-    may not update it even on a 'sync', not until the filesystem is
-    unmounted. Some operations do appear to write the superblock, for
-    example fsync(2) [that is my reading of the ext2/3 source code at
-    least].
+    The virt-mem tools spy on the guest's memory image. There are some
+    shortcomings to this, described here.
+
+    (1) Only works on specific, tested releases of Linux kernels. Support
+    for arbitrary Linux kernel versions may be patchy because of changes in
+    the internal structures used. Support for non-Linux kernels is currently
+    non-existent, and probably impossible for Windows because of lack of an
+    acceptable source license.
+
+    (2) Heuristics are used which may mean in the worst case that the output
+    is wrong.
+
+    (3) Structures which are frequently modified may cause errors. This
+    could be a problem if, for example, the process table in the guest is
+    being rapidly updated.
+
+    (4) We have to scan memory to find kernel symbols, etc., which can be
+    quite slow. Optimizing the memory scanner would help, and caching the
+    base address of the symbol table(s) would make it dramatically faster.
 
 SECURITY
     The current code tries hard to be secure against malicious guests, for
-    example guests which set up malicious disk partitions.
+    example guests which set up malicious kernel memory.
 
 SEE ALSO
-    df(1), virsh(1), xm(1), <http://www.libvirt.org/ocaml/>,
+    uname(1),dmesg(1), virsh(1), xm(1), <http://www.libvirt.org/ocaml/>,
     <http://www.libvirt.org/>, <http://et.redhat.com/~rjones/>,
     <http://caml.inria.fr/>
 
@@ -96,8 +121,7 @@ AUTHORS
     Richard W.M. Jones <rjones @ redhat . com>
 
 COPYRIGHT
-    (C) Copyright 2007-2008 Red Hat Inc., Richard W.M. Jones
-    http://libvirt.org/
+    (C) Copyright 2008 Red Hat Inc., Richard W.M. Jones http://libvirt.org/
 
     This program is free software; you can redistribute it and/or modify it
     under the terms of the GNU General Public License as published by the
@@ -117,7 +141,7 @@ REPORTING BUGS
     Bugs can be viewed on the Red Hat Bugzilla page:
     <https://bugzilla.redhat.com/>.
 
-    If you find a bug in virt-df, please follow these steps to report it:
+    If you find a bug in virt-mem, please follow these steps to report it:
 
     1. Check for existing bug reports
         Go to <https://bugzilla.redhat.com/> and search for similar bugs.
@@ -127,15 +151,15 @@ REPORTING BUGS
     2. Capture debug and error messages
         Run
 
-         virt-df --debug > virt-df.log 2>&1
+         virt-[program] --debug > virt-mem.log 2>&1
 
-        and keep *virt-df.log*. It contains error messages which you should
+        and keep *virt-mem.log*. It contains error messages which you should
         submit with your bug report.
 
-    3. Get version of virt-df and version of libvirt.
+    3. Get version of virt-mem and version of libvirt.
         Run
 
-         virt-df --version
+         virt-[program] --version
 
     4. Submit a bug report.
         Go to <https://bugzilla.redhat.com/> and enter a new bug. Please