310 likes | 522 Views
志豪 2009.09.15. Virtual machine survey. Categories of Virtual Machine Virtual Machine manager: Xen Xen architecture Xen component Xen API XenAccess Library reference. Outline. Full virtualization VMware Workstation , VirtualBox Hardware-assisted virtualization Xen , Linux KVM
E N D
志豪 2009.09.15 Virtual machine survey
Categories of Virtual Machine Virtual Machine manager: Xen Xen architecture Xen component XenAPI XenAccess Library reference Outline
Full virtualization • VMware Workstation, VirtualBox • Hardware-assisted virtualization • Xen, Linux KVM • Partial virtualization • Paravirtualization • Operating system-level virtualization • OpenVZ Categories of Virtual Machine
Virtualization • Para-virtualization • 64-bit architecture • 32-bit architecture with PAE Virtual Machine - Xen [root@linux ~]# cat /proc/cpuinfo | grep flags flags : fputscmsrpaemce cx8 mtrrmcacmov pat pse36 mmxfxsrsse up
Virtualization • Full-virtualization • Virtualization Technolegy (Intel) • SVM (AMD) Virtual Machine - Xen 在 Intel Core 2 Duo 的 CPU 主機上面測試 CPU 旗標: [root@linux ~]# cat /proc/cpuinfo | grep flags flags : fputscmsrpaemce cx8 apicmtrrmcacmov pat pse36 clflushdtsacpimmxfxsrsse sse2 ss ht tm pbenx lm constant_tsc up pni monitor ds_cplvmxest tm2 cx16 xtprlahf_lm
Xen Hypervisor • Domain 0 • Domain Management and Control (Xen DM&C) • Domain U (Dom U) PV Guest • Domain U (Dom U) HVM Guest Xen components
Xen Hypervisor Xen components
Domain 0 Xen components
Domain U • PV Guest Xen components
Domain U • HVM Guest Xen components
Domain Management and Control • Xend • Libxenctrl Xen components
Domain Management and Control • Xm • Xenstored • Qemu-dm • Xen Virtual Firmware • Xen Operation Xen components
Domain 0 and Domain U Communication Xen components
Xen Management Architecture XenAPI
XenAPI Class Hierarchy XenAPI
Xen installed and running libxml2 libcurl2 modify configuration XenAPI requirement
In /etc/xen/xend-config.sxp: (xen-api-server ( (9363 pam ‘^localhost$ example\\.com$’) (9367 pam '' /etc/xen/xen-api.key /etc/xen/xen-api.crt) (unix none))) Modify Configuration Xen-API XML-RPC over HTTP / TCP on port 9363, using PAM and an allowed-hosts specifier HTTP over TLS over TCP on port 9367, using PAM and the specified keys Xen-API XML-RPC over a Unix domain socket at /var/run/xend/xen-api.sock, unauthenticated
xmlInitParser(); xen_init(); curl_global_init(CURL_GLOBAL_ALL); xen_session *session = xen_session_login_with_password(call_func, NULL, username, password); xen_vmvm; if (!xen_vm_get_by_uuid(session, &vm, uuid)) { /* Error */ } xen_vm_record *vm_record; if (!xen_vm_get_record(session, &vm_record, vm)) { /* Error */ } if (!xen_vm_start(session, vm)) { /* Error */ } XenAPI Basic Example
Configuration file • /etc/xenaccess.conf • Data structure • xa_instance • xa_linux_taskaddr • xa_windows_peb • XenAccess API definition • xenaccess.h XenAccess library
/etc/xenaccess.conf Fedora-HVM { sysmap= "/boot/System.map-2.6.18-1.2798.fc6"; ostype= "Linux"; linux_tasks= 268; linux_mm= 276; linux_pid= 312; linux_pgd= 40; linux_addr= 132; } XenAccess library
Code sample ( process-list ) XenAccess library #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/mman.h> #include <stdio.h> #include <xenaccess/xenaccess.h> #include <xenaccess/xa_private.h>
Code sample ( process-list ) XenAccess library #define TASKS_OFFSET 24 * 4 #define PID_OFFSET 39 * 4 #define NAME_OFFSET 108 * 4 #define ActiveProcessLinks_OFFSET 0x88 #define UniqueProcessId_OFFSET 0x84 #define ImageFileName_OFFSET 0x174
Code sample ( process-list ) XenAccess library uint32_t dom = atoi(argv[1]); if (xa_init_vm_id_strict(dom, &xai) == XA_FAILURE){ perror("failed to init XenAccess library"); gotoerror_exit; }
Code sample ( process-list ) XenAccess library memory = xa_access_kernel_sym(&xai, "init_task", &offset, PROT_READ); memcpy(&next_process, memory + offset + TASKS_OFFSET, 4); list_head= next_process; munmap(memory, xai.page_size);
Code sample ( process-list ) XenAccess library while (1){ memory = xa_access_kernel_va(&xai, next_process, &offset, PROT_READ); memcpy(&next_process, memory + offset, 4); if (list_head == next_process){ break; } name = (char *) (memory + offset + NAME_OFFSET - TASKS_OFFSET); memcpy(&pid, memory + offset + PID_OFFSET - TASKS_OFFSET, 4); printf("[%5d] %s\n", pid, name); munmap(memory, xai.page_size); }
Code sample ( process-list ) XenAccess library if (memory) munmap(memory, xai.page_size); xa_destroy(&xai);
Running the example XenAccess library [root@bluemoonlibxa]# xm list Name ID Mem(MiB)VCPUs State Time(s) Domain-0 0 1229 2 r----- 137356.4 Fedora-HVM 4 384 1 -b---- 2292.6 fc5 5 384 1 -b---- 15.4 [root@bluemoonlibxa]#
Running the example XenAccess library [root@bluemoon examples]# ./process-list 5 [ 1] init [ 2] migration/0 [ 3] ksoftirqd/0 [ 4] watchdog/0 [ 5] events/0 [ 6] khelper [ 7] kthread [ 8] xenwatch [ 9] xenbus [ 15] kblockd/0 [ 57] pdflush [ 58] pdflush [ 60] aio/0 [ 59] kswapd0 [ 578] kseriod [ 685] kpsmoused [ 710] khubd [ 978] dhclient [ 1006] syslogd [ 1009] klogd [ 1021] sshd [ 1027] mingetty
鳥哥的 linux私房菜 – 利用 Xen設計虛擬機器 • XenAPI – Xen Wiki • Xen Architecture – Xen Wiki • Xen Management API • Xen User & Interface manual • Can find at Xenpackage • XenAccess Library Reference