
On Thu, Jun 28, 2012 at 05:21:57PM +0800, Dennis Chen wrote:
All,
These days I am trying to understand the interaction relationship between the libvirt and KVM kernel module, eg. kvm_intel.ko.
We know that KVM kernel module expose an entry in form of device file "/dev/kvm" which can be accessed by user space application to control, for example, create a VM using KVM_CREATE_VM with help of ioctl.
Now let's say the tool virsh based upon libvirt, we can create a guest domain with the command looks like: #virsh create guest.xml Obviously, the above command will create a VM. But when I try to investigate the libvirt code, I can't find any code play with the "/dev/kvm" to send KVM_CREATE_VM ioctl code to KVM kernel module. But I do found that the reference count of the kvm_intel.ko changed before the virsh create command launched and after.
So my question is: how does the libvirt interaction with KVM to create a VM? Anybody can give me some tips about that, eg, the corresponding codes in libvirt? The '/dev/kvm' device is the low level kernel interface for creating virtual domains. This is not actually used by libvirt at all. The QEMU binary has code that talks to /dev/kvm, so all libvirt does is to spawn a QEMU process which in turns creates the virtual machine
All the libvirt code for this part is under $GIT/src/qemu/ in particular the qemu_command.c and qemu_process.c files
Daniel Thanks Daniel, now I understand that the libvirt code will play with QEMU binary, for example, qemu-system-x86_64, the latter will talk with KVM module . But now the question is, I guess qemuProcessStart() function was used to spawn a QEMU process, so I built a virsh from the
On 06/28/2012 06:26 PM, Daniel P. Berrange wrote: source package with "-g -O0" flag, I want to gdb the virsh, but when I want to set a break point on qemuProcessStart(), I encounter issue: #gdb virsh (gdb) b main Breakpoint 1 at 0x807d480: file virsh.c, line 20270. (gdb) r Starting program: /usr/bin/virsh [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/i386-linux-gnu/libthread_db.so.1". Breakpoint 1, main (argc=1, argv=0xbffff294) at virsh.c:20270 20270 { (gdb) b qemuProcessStart Function "qemuProcessStart" not defined. Make breakpoint pending on future shared library load? (y or [n]) y Breakpoint 2 (qemuProcessStart) pending. (gdb)c virsh # create guest.xml Domain vdo created from vdo.xml virsh # continue instruction above doesn't hit the pending Breakpoint 2... So my question is, which kind of object file will be created from $GIT/src/qemu folder during the build process, is it a .so file and virsh will load it? BRs Dennis