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

          Xen Notes [1]

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

          The Definitive Guide to Xen中第二章的例子,make成功后運(yùn)行xen create domain_config,報(bào)錯(cuò)
          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è)置的問(wèn)題,運(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,通過(guò)調(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)編譯和啟動(dòng)的Xen是不會(huì)保留DomainU中輸出的信息。參考drivers/char/console.c,可以看到主要有兩個(gè)選項(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的時(shí)候開啟debug選項(xiàng),而opt_console_to_ring則是一個(gè)啟動(dòng)選項(xiàng),在grub的啟動(dòng)選項(xiàng)中增加loglvl=all guest_loglvl=all console_to_ring即可。

          重啟Xen后就能通過(guò)xm dmesg看到Hello World了。

          09月 25, 2008
          Xen: Remove support for non-PAE 32-bit

          看來(lái)我還是用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的行為時(shí)的解決方案。Xen為每個(gè)Guest OS維護(hù)了一張shadow page table,其中映射的地址為machine address。一種比較高效的方案是設(shè)置Guest OS的page table為只讀,當(dāng)Guest OS試圖修改這個(gè)虛擬頁(yè)表時(shí),發(fā)生page fault被Xen截獲,Xen修改shadow page table中相應(yīng)的數(shù)據(jù)(把pseudo-physical address轉(zhuǎn)化成machine address)。另外一個(gè)優(yōu)化是guest page table被修改時(shí)不修改shadow page table,只是把它放到一個(gè)待更新列表中,等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時(shí),Xen捕獲到page fault,把page directory中對(duì)應(yīng)的入口置為無(wú)效,再把page table改成可寫讓Guest OS修改。由于page directory中對(duì)應(yīng)的入口被設(shè)成無(wú)效了,下次訪問(wèn)該地址時(shí)還是會(huì)發(fā)生page fault,這時(shí)候Xen再修改page directory和page table的對(duì)應(yīng)項(xiàng)就行了。

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

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

          評(píng)論

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

          2008-11-05 21:24 by kevinlee
          good,
          正好也在對(duì)這本書 但是開始是 kernel not exist
          后來(lái)是 版本問(wèn)題 要3.0
          最后是 就找你這來(lái)了

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

          2008-11-19 13:33 by rubisva
          The Definitive Guide to Xen中第二章的例子,make成功后運(yùn)行xen create domain_config,報(bào)錯(cuò)
          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è)置的問(wèn)題,運(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)即可。

          請(qǐng)問(wèn)bootstrap.x86_32.S該怎么加?

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

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

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

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

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

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

          http://www.aygfsteel.com/zellux/archive/2008/10/17/235056.html
          中提到xen編譯為debug版本,同時(shí)在grub中加入loglvl=all guest_loglvl=all console_to_ring引導(dǎo)選項(xiàng),然后通過(guò)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ù)  更多評(píng)論   

          2011-02-22 10:40 by 126在線計(jì)算
          不會(huì)用哦 。。。?
          主站蜘蛛池模板: 洪雅县| 横山县| 汽车| 攀枝花市| 巴彦县| 丰顺县| 怀仁县| 民丰县| 青海省| 旬阳县| 邵东县| 三明市| 平安县| 乌鲁木齐县| 乌恰县| 郯城县| 昌吉市| 五莲县| 呼和浩特市| 靖宇县| 内江市| 宝应县| 犍为县| 阳曲县| 临沭县| 巴中市| 定兴县| 五原县| 来凤县| 正阳县| 东乌珠穆沁旗| 揭东县| 阿勒泰市| 鄂托克旗| 枣庄市| 靖江市| 鄂托克前旗| 靖宇县| 隆德县| 通城县| 土默特右旗|