09月 18, 2008
第一個testkernel在Xen中的載入The Definitive Guide to Xen中第二章的例子,make成功后運行xen create domain_config,報錯
Error: (2, ‘Invalid kernel’, ‘xc_dom_compat_check: guest type xen-3.0-x86_32 not supported by xen kernel, sorry\n’)
google之后發(fā)現(xiàn)是虛擬機類型設(shè)置的問題,運行xm info可以看到
xen_caps : xen-3.0-x86_32p
末尾的p表示Xen內(nèi)核開啟了PAE模式,所以載入的kernel也必須開啟PAE,在bootstrap.x86_32.S中加入PAE=yes選項即可。
09月 25, 2008
DomainU中調(diào)用do_console_ioThe Definitive Guide to Xen第二章的Exercise,通過調(diào)用hypercall page中的console_io項輸出Hello World。
void?start_kernel(start_info_t?*?start_info)
{
????HYPERVISOR_console_io(CONSOLEIO_write,12,"Hello?World\n");
????while(1);
}
但是默認(rèn)選項編譯和啟動的Xen是不會保留DomainU中輸出的信息。參考drivers/char/console.c,可以看到主要有兩個選項控制了DomainU的do_console_io輸出:
#ifndef?VERBOSE
????/*?Only?domain?0?may?access?the?emergency?console.?*/
????if?(?current->domain->domain_id?!=?0?)
????????return?-EPERM;
#endif
if?(?opt_console_to_ring?)
{
????for?(?kptr?=?kbuf;?*kptr?!=?'\0';?kptr++?)
????????putchar_console_ring(*kptr);
????send_guest_global_virq(dom0,?VIRQ_CON_RING);
}
VERBOSE選項可以在編譯Xen的時候開啟debug選項,而opt_console_to_ring則是一個啟動選項,在grub的啟動選項中增加loglvl=all guest_loglvl=all console_to_ring即可。
重啟Xen后就能通過xm dmesg看到Hello World了。
09月 25, 2008
Xen: Remove support for non-PAE 32-bit看來我還是用Xen 3.1吧 = =
Subject: [Xen-devel] [PATCH] xen: remove support for non-PAE 32-bitLink to this message
From: Jeremy Fitzhardinge (jer…@goop.org)
Date: 05/09/2008 04:05:34 AM
List: com.xensource.lists.xen-devel
Non-PAE operation has been deprecated in Xen for a while, and is rarely tested or used. xen-unstable has now officially dropped non-PAE support. Since Xen/pvops’ non-PAE support has also been broken for a while, we may as well completely drop it altogether.
10月 07, 2008
IA-32 Memory Virtualizationhttp://www.intel.com/technology/itj/2006/v10i3/3-xen/4-extending-with-intel-vt.htm
上圖為full virtulization的情況,即不修改Guest OS的行為時的解決方案。Xen為每個Guest OS維護(hù)了一張shadow page table,其中映射的地址為machine address。一種比較高效的方案是設(shè)置Guest OS的page table為只讀,當(dāng)Guest OS試圖修改這個虛擬頁表時,發(fā)生page fault被Xen截獲,Xen修改shadow page table中相應(yīng)的數(shù)據(jù)(把pseudo-physical address轉(zhuǎn)化成machine address)。另外一個優(yōu)化是guest page table被修改時不修改shadow page table,只是把它放到一個待更新列表中,等Guest OS執(zhí)行了刷新tlb的指令后再一次性更新。
The Definitive Guide to Xen上還提到了另一種基于full paravirtulization和shadow page table之間的方案。Xen把Guest OS的page table置為只讀,當(dāng)Guest OS試圖修改page table時,Xen捕獲到page fault,把page directory中對應(yīng)的入口置為無效,再把page table改成可寫讓Guest OS修改。由于page directory中對應(yīng)的入口被設(shè)成無效了,下次訪問該地址時還是會發(fā)生page fault,這時候Xen再修改page directory和page table的對應(yīng)項就行了。
這種方法意味著Guest OS中內(nèi)核管理模塊直接和machine address打交道,而其他部分則仍然使用pseudo-physical address。另外這種情況下page directory不能被Guest OS修改。
另外Xen還用到了段機制,用來為Xen保留地址空間開始的64M內(nèi)存。