作者 主題: [Howto] XEN paravirtualization  (閱讀 7652 次)

0 會員 與 1 訪客 正在閱讀本文。

axa

  • 憂鬱的高中生
  • ***
  • 文章數: 99
    • 檢視個人資料
[Howto] XEN paravirtualization
« 於: 2005-12-04 01:41 »
又來轉貼...我寫的來源是在gentoo tw拉.... :lol:
http://forums.gentoo.org.tw/viewtopic.php?t=43721

XEN paravirtualization howto

恩,不得不從一些鳥理論開始.....

我也不喜歡看理論,我想沒啥人喜歡吧,所以我就用很口語的方式把xen簡述一下

xen這東西其實理論要講的話需要圖解,我就簡單說一下好了

一般我們OS與APP是在cpu 的ring0 與ring3 裡面的cpu指令在處理的 (一定很多人不知道什麼是ring...哈~我前女友也叫ring....anyway那不重要)   :roll:

而xen他屌的地方是再不改變硬體物理特性但需要改變OS kernel(only OS kernel NOT any driver)的情況下

用32m的記體體常駐在cpu ring0,而os運算退到ring1,APP還是在3...而xen還很多的名詞;hyperviosr,trapping call,privileges...當然如果能瞭解是很好

而簡單的說我自己把xen解釋為 : xen是isolation IO,memory and cpu的cpu指令集

而xen說他們已經在INTEL VT cpu這種提供full virtualization上成功的把windows xp安裝上去。

xen他幕後的developer很多都是intel,amd,hp,ibm的人...opensolairs也有xen專門的project,redhat,novell明年都會內建xen kernel

所以這東西應該後勢看漲,效能的話,我是一台dual p4 2.4g with 4G memory server上起6個os主要都是跑java

港覺很順,完全不覺得有卡住...我覺得xen有個很大的優勢就是效能...他和一般的native linux只差3%而已

我想這和xen改進了vmware的memory shadow page詬病與cpu trapping cache有關...而這些都是UML所不足的地方。   :roll:


好了~這只是我的一些小港想...以下是我的簡單howto我用的是gentoo linux



1. 安裝
cd /usr/portage/app-emulation/xen
emerge xen-2.0.7.ebuild

2. 編譯kernel
先做domian 0 的kernel,我把比較重要的地方列出來

domU他都是用dom0的硬體,所以dom0的kernel要包含所有需要被驅動的裝置driver,而domU的話,driver越簡單越好
因為domU他是不需要直接驅動硬體的,當然你也可以跳過dom0的控制直接存取控制硬體方法等等在說


2.1 Backend ONLY
domain 0(dom0)就是 backend driver,所以關於backend都要選而domain U(domU)是 frontend driver,編譯domU時在選
XEN  --->
  • Privileged Guest (domain 0)
  •   Block-device backend driver
  •   Network-device backend driver



2.2 SMP support
xen 2.0.x 千萬不要把SMP放在kernel編譯進去,因為不支援,如果用3.0的就可以用SMP了


2.3 Networking
由於domU的網路是走dom0的bridage mode的virtual interface(vif)而才能連外的,故需要把Ethernet Bridging選進去
Device Drivers  --->
  Networking support  --->
     Networking options  --->
       <*> 802.1d Ethernet Bridging



2.4 LOOP device
這一點很重要,由於linux kernel限制loop device最多只能到8個,而這限制住了我們的domU scalibility
因為一個server image 配上一個swap會用到2個loop devices,所以原本一個dom0最多只能4個domU...

這問題解決方式可簡單,只要改/usr/src/linux/drivers/block/loop.c

LINE 73 的
max_loop = 8 改成 max_loop = 32;

LINE 1146,1147 的
 1 and 256), using default ( 8 )\n"); 改成  1 and 256), using default (32)\n");
 max_loop = 8; 改成max_loop = 32;


附註會提供我的kernel config給大家參考
選擇好dom0的kernel後,打make all編譯出vmlinuz ,再把vmlinuz 複製到/boot/vmlinuz-2.6.11-xen0-d0


3.修改grub.conf
title Gentoo Linux 2.6.11 under XEN 2.0.7 Domain 0
root    (hd0,0)
kernel  /xen-2.0.gz dom0_mem=768000 max_loop=32 com1=115200,8n1
module  /vmlinuz-2.6.11-xen0-d0  root=/dev/sda3 console=ttyS1 debug

值得一提的是 dom0_mem=768000表示我給dom0 768M的記憶體,max_loop=32就是3.5講的loop device


之後用新的kernel重開機吧...我想開不起來是正常的千萬不要氣餒...200%是kernel問題
如果開得起來,那表示你和xen蠻有緣的..我驅動dom0花了半天....驅動domU更慘花了1天...
以上都是我的一些經驗。


ok一切順利的話我們現在跑得 os就是運行在cpu的ring1,而xen就在ring0,所以現在我們可以開始設定domU了


4. 編譯domU kernel
XEN  --->
 
  • Block-device frontend driver
  • Network-device frontend driver


其他什麼網卡,顯示卡,usb drver都不用了,因為domU的硬體控制權都是在dom0上面,只要dom0的kernel有支援,domU就可以用了

但是如果你想在domU自行驅動硬體,而不要透過dom0的話,就必須選你要的driver了。而xen可以讓domU自行控制的周邊只限於PCI介面的

而AGP介面的話,如果你在domU選的話,我保證domU一定開不了,因為AGP的指令不允許同時間接受兩個以上的中斷...

而我xen是拿來當server用的,我對x windows的驅動完全都沒有選。若無法啟動domU有90%的原因是因為domU kernel有問題。

之後也是下make all把編譯好的domU kernel放到/boot/vmlinuz-2.6.11-xen0-dU



5. 建立system image

mkdir -p /etc/auto/sysimage
cd /etc/xen/sysimage
dd if=/dev/zero of=pluspaystg_ROOT bs=1M count=10240
mkreiserfs -f /etc/xen/sysimage/pluspaystg_ROOT  (我也試過ext3也ok,但我有看到有些人用過上patch的reiserfs再啟動domU時會kernel panic)
mount -o loop pluspaystg_ROOT /mnt
tar zxvf stage5.tar.gz -C /mnt  (stage5是我們公司自行包的一個gentoo linux tarball除了kernel有改過外套件也最佳化..其餘和一般linux沒啥不同,我想這邊一定很多redhat與debian的玩家,那你們在這一步可以用yum或debootstrap來安裝)
vi /etc/hosts /etc/hostname /etc/conf.d/net
umount /mnt


6. 建立domU config

kernel = "/boot/vmlinuz-2.6.11-xen0-du"   ( 這是我們之前編譯的domU kernel )
memory = 512                              ( 這是給domU配置的記憶體大小 )
name = "pluspaydev"                       ( 這是domU的名字 )
nics = 2                                  ( 表示我進入domU後要驅動2張網卡 )
vif = [ 'bridge=xen-br0' ]                ( 這表示domU會用到dom0的xen-br0這bridage device )
vif = [ 'bridge=xen-br1' ]                ( 這表示domU會用到dom0的xen-br1這bridage device )
disk = ['file:/etc/xen/sysimage/pluspaydev_ROOT,sda3,w','file:/etc/xen/sysimage/pluspaydev_SWAP,sda2,w']  (這應該就不用解釋了)
root = "/dev/sda3 rw"                     ( 這邊的/dev/sda3是我dom0上的 / 的mount point )



7. 啟動xend
shell> /etc/init.d/xend start

8. 啟動第二張網卡的bridage
shell> /etc/xen/scripts/network start bridge=xen-br1 netdev=eth1


9. 啟動所有在/etc/xen/auto裡面所定義的domU config server
shell> /etc/init.d/xendomains start


10. 列出所有domU
shell> xm list
引用

xen ~ # xm list
Name              Id  Mem(MB)  CPU  State  Time(s)  Console
Domain-0           0      495    0  r----     25.6
plusapidev         1      512    1  -b---      0.4    9601
plusapistg         2      512    1  -b---      0.3    9602
pluspaydev         3      512    0  -b---      0.2    9603
pluspaystg         4      512    1  -b---      0.4    9604
pluswebdev         5      512    0  -b---      0.2    9605
pluswebstg         6      512    1  -b---      0.3    9606


11. 列出所以的vif與bridage 對應關係
xen ~ # brctl show
引用

bridge name     bridge id               STP enabled     interfaces
xen-br0         8000.000d61605976       no              eth0
                                                vif7.0
                                                vif8.0
                                                vif9.1
                                                vif10.1
                                                vif11.0
                                                vif12.0
xen-br1         8000.000d61605977       no              eth1
                                                vif9.0
                                                vif10.0
xen ~ #


我遇到的小問題:

● gentoo上用xen3.0 domU起不來....
這問題我直接發信給gentoo xen project leader,他回信告訴我:
引用

Hi Axa,
 
 xen-3 is still beta and experimental. It will crash. I'll make a newer
 snapshot soon. Having said that, you should be at least able to create
 a domain. The xen-users mailing list might be able to help you.


這我搞了好久發現目前(2005/11) gentoo在xen3.0上domU會有問題,看了一些討論也看到很多人都再搞domU時失敗
不過還是有高手搞起來...我因為沒太多時間所以就直接用2.0了...別浪費時間
現在xen穩定的本版也是2.0...但我想12月底或明年1月 3.0就會stable了,因為3.0的liveCD幾天前出來了。


● 靠!我遇到kernel panic問題:
我想大家做到 5的時候可能會遇到很多問題,此時你可以用xm create /etc/xen/auto/your_domU_config -c
用虛擬console的方式去看為何開不起來。如果是kernel panic的話絕大部分是因為domU kernel編譯問題,所以我建議
domU kernel越精簡越好。如果還有問題,就發問吧,看我能不能幫你...我看sun玩xen那些人的blog那些人也都一直遇到kernel panic
所以大家不用氣餒..哈


● 媽的!我domU第二張起不來:
這問題其實是花我最多時間在瞭解的,注意以下幾點即可
1. dom0一定要先把eth1的ip設定好,然後在執行 /etc/xen/scripts/network start bridge=xen-br1 netdev=eth1
2. 不要在domU config設定網路,我建議在domU建議system image時就把網路設定好,以下是我在domU的網路設定/etc/conf.d/net
iface_eth0="172.17.1.212 broadcast 172.17.1.255 netmask 255.255.0.0"
iface_eth1="172.29.40.3 broadcast 172.29.40.255 netmask 255.255.255.0"
gateway="eth0/172.17.0.1"

3. 我建議不要在domU config中指定mac的方式去設定網路或bridage。





後記:
有鑑於台灣的xen文件真的幾乎是沒有...而對岸我看過一些文章,但幾乎也都是從官方網站抄來的....
我就花了點時間把我的筆記整了一下寫了這文章
但我其實沒有玩過UML,vserver and VMWARE.....VMWARE連裝都沒裝過...uml只有在adios livecd玩過。

而當初我在sun有玩過4800切domain,但在linux上還沒有實際玩過這種半虛擬化的VM。
而現在我把xen運用在我們pchome的portal上線服務的測試環境中使用...
雖然在玩的過程中遇到不少問題也曾經質疑xen的穩定性與可用性,但國外支援其實很足夠
我遇到的每個問題都有解決方式。而xen的migration似乎是一個很不可思議的功能,讓我對xen感到驚訝
而2.6.14個kernel也支援cpu hot-plug..如果再把xen整合進來這就更接近sun那種mainframe server了。

而 xen3.0似乎也是衝著64bit的環境開發...很期待gentoo很快可以把xen 3.0弄穩定...

之後我會試試看xen cluster的功能就類似server conconsolidation...

如果大家也想用在測試環境而不要講求效能的話,我建議大家可以玩vserver
rust & Unique ...

axa

  • 憂鬱的高中生
  • ***
  • 文章數: 99
    • 檢視個人資料
[Howto] XEN paravirtualization
« 回覆 #1 於: 2005-12-05 02:38 »
不知道這邊有沒有人玩過xen
我蠻想遇到台灣玩xen的人說  :lol:
rust & Unique ...

different

  • 可愛的小學生
  • *
  • 文章數: 11
    • 檢視個人資料
[Howto] XEN paravirtualization
« 回覆 #2 於: 2006-01-13 17:03 »
感謝您的文章..我會在這幾天研究一下..有問題再跟您討教..謝謝..
請問可以寫email問你嗎?