posts - 403, comments - 310, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          Xen Notes [1]

          Posted on 2008-10-17 20:01 ZelluX 閱讀(1438) 評論(6)  編輯  收藏 所屬分類: SystemLaboratory
          09月 18, 2008
          第一個testkernel在Xen中的載入

          The Definitive Guide to Xen中第二章的例子,make成功后運(yùn)行xen create domain_config,報(bào)錯
          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)是虛擬機(jī)類型設(shè)置的問題,運(yùn)行xm info可以看到
          xen_caps : xen-3.0-x86_32p
          末尾的p表示Xen內(nèi)核開啟了PAE模式,所以載入的kernel也必須開啟PAE,在bootstrap.x86_32.S中加入PAE=yes選項(xiàng)即可。

          09月 25, 2008
          DomainU中調(diào)用do_console_io

          The Definitive Guide to Xen第二章的Exercise,通過調(diào)用hypercall page中的console_io項(xiàng)輸出Hello World。

          void?start_kernel(start_info_t?*?start_info)
          {
          ????HYPERVISOR_console_io(CONSOLEIO_write,
          12,"Hello?World\n");
          ????
          while(1);
          }


          但是默認(rèn)選項(xiàng)編譯和啟動的Xen是不會保留DomainU中輸出的信息。參考drivers/char/console.c,可以看到主要有兩個選項(xiàng)控制了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選項(xiàng)可以在編譯Xen的時候開啟debug選項(xiàng),而opt_console_to_ring則是一個啟動選項(xiàng),在grub的啟動選項(xiàng)中增加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 Virtualization
          http://www.intel.com/technology/itj/2006/v10i3/3-xen/4-extending-with-intel-vt.htm
          o_figure_3.gif
          上圖為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)項(xiàng)就行了。

          這種方法意味著Guest OS中內(nèi)核管理模塊直接和machine address打交道,而其他部分則仍然使用pseudo-physical address。另外這種情況下page directory不能被Guest OS修改。

          另外Xen還用到了段機(jī)制,用來為Xen保留地址空間開始的64M內(nèi)存。

          評論

          # re: Xen Notes [1]  回復(fù)  更多評論   

          2008-11-05 21:24 by kevinlee
          good,
          正好也在對這本書 但是開始是 kernel not exist
          后來是 版本問題 要3.0
          最后是 就找你這來了

          # re: Xen Notes [1]  回復(fù)  更多評論   

          2008-11-19 13:33 by rubisva
          The Definitive Guide to Xen中第二章的例子,make成功后運(yùn)行xen create domain_config,報(bào)錯
          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)是虛擬機(jī)類型設(shè)置的問題,運(yùn)行xm info可以看到
          xen_caps : xen-3.0-x86_32p
          末尾的p表示Xen內(nèi)核開啟了PAE模式,所以載入的kernel也必須開啟PAE,在bootstrap.x86_32.S中加入PAE=yes選項(xiàng)即可。

          請問bootstrap.x86_32.S該怎么加?

          # re: Xen Notes [1]  回復(fù)  更多評論   

          2008-11-25 10:44 by ZelluX
          @rubisva
          就是加一行PAE=yes呀

          # re: Xen Notes [1]  回復(fù)  更多評論   

          2009-06-24 20:40 by 李振濤
          關(guān)于第二章的小例子。請問怎么開啟debug選項(xiàng)

          # re: Xen Notes [1]  回復(fù)  更多評論   

          2009-07-09 07:39 by 深不可測
          大家誰知道使用hypercall 怎么打印hello,world?

          http://www.aygfsteel.com/zellux/archive/2008/10/17/235056.html
          中提到xen編譯為debug版本,同時在grub中加入loglvl=all guest_loglvl=all console_to_ring引導(dǎo)選項(xiàng),然后通過xm dmesg就可以看到hello world。
          我這樣做了,還是沒有看到hello,world啊
          start_kernel代碼:
          void start_kernel(start_info_t * start_info)
          {
          HYPERVISOR_console_io(CONSOLEIO_write,12,"Hello World\n");
          while(1);
          }


          QQ: 282134493
          email 282134493@qq.com

          # re: Xen Notes [1]  回復(fù)  更多評論   

          2011-02-22 10:40 by 126在線計(jì)算
          不會用哦 。。。?
          主站蜘蛛池模板: 乌拉特前旗| 晋宁县| 富民县| 怀安县| 梓潼县| 陕西省| 本溪| 手机| 海原县| 灵寿县| 阿拉善盟| 达拉特旗| 车险| 余庆县| 菏泽市| 怀柔区| 新龙县| 荥经县| 鸡东县| 海晏县| 南通市| 丰都县| 高阳县| 鄢陵县| 米林县| 高邮市| 县级市| 涞源县| 黑龙江省| 邻水| 古浪县| 吕梁市| 双城市| 涡阳县| 平原县| 克什克腾旗| 宜丰县| 九江县| 南昌市| 清河县| 镇康县|