1. 程式人生 > >虛擬化技術基礎原理

虛擬化技術基礎原理

程式侷限性原因:
空間侷限性
時間侷限性

IO裝置的部分:
裝置控制器和裝置本身
控制器:整合在主機板上的一塊晶片或一組晶片
驅動程式:通常應該由裝置生產商:位於核心中
每個控制器都有少量的用於通訊的暫存器,每個暫存器表現為一個I/O埠;
所有的暫存器組合成為裝置的IO地址空間;

    實現輸入、輸出:
        三種方式:
                1、輪詢:忙等待
                    2、中斷:
                核心處理中斷分為兩步:
                                中斷上半部、中斷的下半部
                    3、DMA:

    OS:
        cpu:時間片,time slice
            memory:虛擬地址空間
            I/O:檔案
            程序
                資源集
                        cpu事件
                            memory:抽象,虛擬地址空間(32bits:4G)
                            I/O:開啟的多個檔案,fd(file descriptor)
                                正常檔案
                                    裝置檔案
                                    管道檔案

            程序:task                         

cpu虛擬化:
    模擬:emulation
        虛擬:virtulization
            完全虛擬化(full-virtulization)
                    BT:二進位制翻譯(軟體)
                        HVM:硬體輔助的虛擬化(硬體)
                半虛擬化:

Memory:
    程序:現行地址空間
        核心:實體地址空間

        MMU Virtulization
            Inter:EPT,Extended Page Table
            AMD:NTP,Nested Page Table

        TLB virtulization
            tagged TLB

I/O:
    外存:
            硬碟、光碟、U盤
        網路裝置:
        網絡卡
        顯示裝置:
            VGA:frame buffer機制
        鍵盤滑鼠:
      ps/2,usb

        I/O虛擬化的方式:
            模擬:完全使用軟體來模擬真實硬體
                半虛擬化:
                IO-through:IO透傳

        Inter:VT-d
            基於北橋的硬體輔助的虛擬化技術:

兩種實現方式:
    Type-I:
            xen,vmware ESX/ESXi
        Type-II:
            kvm,vmware,workstation,virtualbox

Inter硬體輔助的虛擬化:
CPU:vt-x,EPT,tagged-TLB
IO/CPU:vt-d,IOV,VMDq

    第一類:跟處理器相關:vt-x
    第二類:跟晶片相關:vt-d
    第三類:跟IO相關:VMDq和SR-IOV

QEMU,virtio

虛擬化技術的分類
模擬:著名的模擬器,PearPC,Bochs,QEMU
完全虛擬化:也稱為native virtulization
兩種加速方式:
BT
HVM
VMware Workstation,VMware Server,Parallels Desktop,KVM,Xen(HVM)

    半虛擬化:para-virtualization     
             xen,uml(user-mod linux)
    OS級別的虛擬化:
        OpenVZ,lxc
          Solaris Contaniners
            FreeBSD jails
    庫虛擬化:
        wine,
    應用程式虛擬化:
        jvm

虛擬化網路:
nat mode
bridge mode
routed mode
isolation mode

使用brctl的配置過程:

    # brctl add br0
        # brctl stp br0 on
        # ifconfig eth0 0 up
        # brctl addif br0 eth0
        # ifconfig br0 IP/NETMASK up
        # route add default gw GW       

TUN與TAP
在計算機網路中,TUN與TAP是作業系統核心中的虛擬網路裝置,不同於普通靠硬體網路辦卡實現的裝置,這些虛擬的網路裝置全部用軟體實現,並向運行於作業系統上的軟體提供與硬體的網路裝置完全相同的功能;

TAP等同於一個乙太網裝置,它操作第二層資料包如乙太網資料幀,TUN模擬了網路層裝置,操作第三層資料包如IP資料包。

作業系統通過TUN/TAP裝置向繫結該裝置的使用者空間的程式傳送資料,反之,使用者空間的程式也可以像操作硬體的網路裝置那樣,通過TUN/TAP裝置傳送資料,在後種情況下,TUN/TAP裝置向作業系統的網路棧投遞(或"注入")資料包,從而模擬從外部接受資料的過程。

[[email protected] ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:11:21:56
          inet addr:192.168.10.6  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe11:2156/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:141 errors:0 dropped:0 overruns:0 frame:0
          TX packets:74 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:14934 (14.5 KiB)  TX bytes:9717 (9.4 KiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:29:11:21:60
          inet addr:192.168.190.128  Bcast:192.168.190.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe11:2160/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:193 errors:0 dropped:0 overruns:0 frame:0
          TX packets:30 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:16345 (15.9 KiB)  TX bytes:3153 (3.0 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

橋不支援NetworkManger管理,需要關閉NetworkManger啟動
[[email protected] ~]# chkconfig --list NetworkManager

橋使用network管理

[[email protected] ~]# chkconfig --list network
network         0:關閉  1:關閉  2:啟用  3:啟用  4:啟用  5:啟用  6:關閉

[root[email protected] ~]# yum -y install bridge-utils

[[email protected] ~]# rpm -ql bridge-utils
/usr/sbin/brctl
/usr/share/doc/bridge-utils-1.2
/usr/share/doc/bridge-utils-1.2/AUTHORS
/usr/share/doc/bridge-utils-1.2/COPYING
/usr/share/doc/bridge-utils-1.2/FAQ
/usr/share/doc/bridge-utils-1.2/HOWTO
/usr/share/man/man8/brctl.8.gz
[[email protected] ~]# cd /etc/sysconfig/network-scripts/
[[email protected] network-scripts]# cp ifcfg-eth0 ifcfg-br0

關閉NetworkManger服務進行管理:NM_CONTROLLED=no

[[email protected] network-scripts]# vim ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
IPADDR=192.168.10.6
NETMASK=255.255.255.0
[[email protected] network-scripts]# vim ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:11:21:56
TYPE=Ethernet
UUID=f343369c-4aa9-4975-81b3-3f38f4c56ef0
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
BRIDGE=br0
[[email protected] network-scripts]# service network restart
正在關閉介面 eth0: bridge br0 does not exist!
                                                           [確定]
正在關閉介面 eth1:                                        [確定]
關閉環回介面:                                             [確定]
彈出環回介面:                                             [確定]
彈出介面 eth0:                                            [確定]
彈出介面 eth1:
正在決定 eth1 的 IP 資訊...完成。
                                                           [確定]
彈出介面 br0: Determining if ip address 192.168.10.6 is already in use for device br0...
                                                           [確定]
[[email protected] network-scripts]# ifconfig
br0       Link encap:Ethernet  HWaddr 00:0C:29:11:21:56
          inet addr:192.168.10.6  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe11:2156/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:21 errors:0 dropped:0 overruns:0 frame:0
          TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:2174 (2.1 KiB)  TX bytes:2264 (2.2 KiB)

eth0      Link encap:Ethernet  HWaddr 00:0C:29:11:21:56
          inet6 addr: fe80::20c:29ff:fe11:2156/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1353 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1217 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:105072 (102.6 KiB)  TX bytes:120035 (117.2 KiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:29:11:21:60
          inet addr:192.168.190.128  Bcast:192.168.190.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe11:2160/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:19201 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8181 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:27802761 (26.5 MiB)  TX bytes:449250 (438.7 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
[[email protected] network-scripts]# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.000c29112156       no              eth0
[[email protected] network-scripts]# brctl --help
Usage: brctl [commands]
commands:
        addbr           <bridge>                add bridge
        delbr           <bridge>                delete bridge
        addif           <bridge> <device>       add interface to bridge
        delif           <bridge> <device>       delete interface from bridge
        setageing       <bridge> <time>         set ageing time
        setbridgeprio   <bridge> <prio>         set bridge priority
        setfd           <bridge> <time>         set bridge forward delay
        sethello        <bridge> <time>         set hello time
        setmaxage       <bridge> <time>         set max message age
        sethashel       <bridge> <int>          set hash elasticity
        sethashmax      <bridge> <int>          set hash max
        setmclmc        <bridge> <int>          set multicast last member count
        setmcrouter     <bridge> <int>          set multicast router
        setmcsnoop      <bridge> <int>          set multicast snooping
        setmcsqc        <bridge> <int>          set multicast startup query count
        setmclmi        <bridge> <time>         set multicast last member interval
        setmcmi         <bridge> <time>         set multicast membership interval
        setmcqpi        <bridge> <time>         set multicast querier interval
        setmcqi         <bridge> <time>         set multicast query interval
        setmcqri        <bridge> <time>         set multicast query response interval
        setmcqri        <bridge> <time>         set multicast startup query interval
        setpathcost     <bridge> <port> <cost>  set path cost
        setportprio     <bridge> <port> <prio>  set port priority
        setportmcrouter <bridge> <port> <int>   set port multicast router
        show            [ <bridge> ]            show a list of bridges
        showmacs        <bridge>                show a list of mac addrs
        showstp         <bridge>                show bridge stp info
        stp             <bridge> {on|off}       turn stp on/off
[[email protected] network-scripts]# brctl stp br0 on
[[email protected] network-scripts]# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.000c29112156       yes             eth0

命令建立橋:

[[email protected] ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E8:20:12
          inet addr:192.168.10.7  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fee8:2012/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:27 errors:0 dropped:0 overruns:0 frame:0
          TX packets:40 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:4781 (4.6 KiB)  TX bytes:5365 (5.2 KiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:29:E8:20:1C
          inet addr:192.168.190.129  Bcast:192.168.190.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fee8:201c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:40 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3072 (3.0 KiB)  TX bytes:1511 (1.4 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
[[email protected] ~]# chkconfig --list NetworkManager
[[email protected] ~]# chkconfig --list network
network         0:關閉  1:關閉  2:啟用  3:啟用  4:啟用  5:啟用  6:關閉
[[email protected] ~]# yum -y install bridge-utils
[[email protected] ~]# brctl --help
Usage: brctl [commands]
commands:
        addbr           <bridge>                add bridge
        delbr           <bridge>                delete bridge
        addif           <bridge> <device>       add interface to bridge
        delif           <bridge> <device>       delete interface from bridge
        setageing       <bridge> <time>         set ageing time
        setbridgeprio   <bridge> <prio>         set bridge priority
        setfd           <bridge> <time>         set bridge forward delay
        sethello        <bridge> <time>         set hello time
        setmaxage       <bridge> <time>         set max message age
        sethashel       <bridge> <int>          set hash elasticity
        sethashmax      <bridge> <int>          set hash max
        setmclmc        <bridge> <int>          set multicast last member count
        setmcrouter     <bridge> <int>          set multicast router
        setmcsnoop      <bridge> <int>          set multicast snooping
        setmcsqc        <bridge> <int>          set multicast startup query count
        setmclmi        <bridge> <time>         set multicast last member interval
        setmcmi         <bridge> <time>         set multicast membership interval
        setmcqpi        <bridge> <time>         set multicast querier interval
        setmcqi         <bridge> <time>         set multicast query interval
        setmcqri        <bridge> <time>         set multicast query response interval
        setmcqri        <bridge> <time>         set multicast startup query interval
        setpathcost     <bridge> <port> <cost>  set path cost
        setportprio     <bridge> <port> <prio>  set port priority
        setportmcrouter <bridge> <port> <int>   set port multicast router
        show            [ <bridge> ]            show a list of bridges
        showmacs        <bridge>                show a list of mac addrs
        showstp         <bridge>                show bridge stp info
        stp             <bridge> {on|off}       turn stp on/off
[[email protected] ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
[[email protected] ~]# brctl addbr br0
[[email protected] ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E8:20:12
          inet addr:192.168.10.7  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fee8:2012/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:557 errors:0 dropped:0 overruns:0 frame:0
          TX packets:385 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:48970 (47.8 KiB)  TX bytes:39748 (38.8 KiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:29:E8:20:1C
          inet addr:192.168.190.129  Bcast:192.168.190.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fee8:201c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5053 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2694 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:7236029 (6.9 MiB)  TX bytes:148485 (145.0 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:2 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:200 (200.0 b)  TX bytes:200 (200.0 b)

[[email protected] ~]# ifconfig eth0 0 up

[[email protected] ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E8:20:12
          inet6 addr: fe80::20c:29ff:fee8:2012/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:600 errors:0 dropped:0 overruns:0 frame:0
          TX packets:404 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:52372 (51.1 KiB)  TX bytes:41802 (40.8 KiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:29:E8:20:1C
          inet addr:192.168.190.129  Bcast:192.168.190.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fee8:201c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5118 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2749 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:7247051 (6.9 MiB)  TX bytes:156881 (153.2 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:2 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:200 (200.0 b)  TX bytes:200 (200.0 b)
[[email protected] ~]# brctl addif br0 eth0
[[email protected] ~]# ifconfig br0 192.168.10.7/24 up
[[email protected] ~]# route add default gw 192.168.10.254
[[email protected] ~]# ifconfig
br0       Link encap:Ethernet  HWaddr 00:0C:29:E8:20:12
          inet addr:192.168.10.7  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fee8:2012/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:24 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1104 (1.0 KiB)  TX bytes:468 (468.0 b)

eth0      Link encap:Ethernet  HWaddr 00:0C:29:E8:20:12
          inet6 addr: fe80::20c:29ff:fee8:2012/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:632 errors:0 dropped:0 overruns:0 frame:0
          TX packets:410 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:54292 (53.0 KiB)  TX bytes:42270 (41.2 KiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:29:E8:20:1C
          inet addr:192.168.190.129  Bcast:192.168.190.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fee8:201c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5331 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2881 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:7263087 (6.9 MiB)  TX bytes:168737 (164.7 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:2 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:200 (200.0 b)  TX bytes:200 (200.0 b)