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

          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成功后運行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之后發現是虛擬機類型設置的問題,運行xm info可以看到
          xen_caps : xen-3.0-x86_32p
          末尾的p表示Xen內核開啟了PAE模式,所以載入的kernel也必須開啟PAE,在bootstrap.x86_32.S中加入PAE=yes選項即可。

          09月 25, 2008
          DomainU中調用do_console_io

          The Definitive Guide to Xen第二章的Exercise,通過調用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);
          }


          但是默認選項編譯和啟動的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 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維護了一張shadow page table,其中映射的地址為machine address。一種比較高效的方案是設置Guest OS的page table為只讀,當Guest OS試圖修改這個虛擬頁表時,發生page fault被Xen截獲,Xen修改shadow page table中相應的數據(把pseudo-physical address轉化成machine address)。另外一個優化是guest page table被修改時不修改shadow page table,只是把它放到一個待更新列表中,等Guest OS執行了刷新tlb的指令后再一次性更新。

          The Definitive Guide to Xen上還提到了另一種基于full paravirtulization和shadow page table之間的方案。Xen把Guest OS的page table置為只讀,當Guest OS試圖修改page table時,Xen捕獲到page fault,把page directory中對應的入口置為無效,再把page table改成可寫讓Guest OS修改。由于page directory中對應的入口被設成無效了,下次訪問該地址時還是會發生page fault,這時候Xen再修改page directory和page table的對應項就行了。

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

          另外Xen還用到了段機制,用來為Xen保留地址空間開始的64M內存。

          評論

          # re: Xen Notes [1]  回復  更多評論   

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

          # re: Xen Notes [1]  回復  更多評論   

          2008-11-19 13:33 by rubisva
          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之后發現是虛擬機類型設置的問題,運行xm info可以看到
          xen_caps : xen-3.0-x86_32p
          末尾的p表示Xen內核開啟了PAE模式,所以載入的kernel也必須開啟PAE,在bootstrap.x86_32.S中加入PAE=yes選項即可。

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

          # re: Xen Notes [1]  回復  更多評論   

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

          # re: Xen Notes [1]  回復  更多評論   

          2009-06-24 20:40 by 李振濤
          關于第二章的小例子。請問怎么開啟debug選項

          # re: Xen Notes [1]  回復  更多評論   

          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引導選項,然后通過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]  回復  更多評論   

          2011-02-22 10:40 by 126在線計算
          不會用哦 。。。?
          主站蜘蛛池模板: 监利县| 兰溪市| 汉沽区| 竹北市| 江口县| 巴里| 沈阳市| 招远市| 吉安县| 安远县| 卫辉市| 宝山区| 简阳市| 姜堰市| 中卫市| 尤溪县| 广河县| 将乐县| 鲁甸县| 阿拉善右旗| 乌什县| 临澧县| 兴义市| 都安| 密山市| 仁化县| 大化| 鄂伦春自治旗| 盐亭县| 班戈县| 彭水| 赞皇县| 肃南| 通渭县| 芒康县| 西畴县| 栖霞市| 农安县| 和硕县| 武汉市| 扎赉特旗|