码迷,mamicode.com
首页 > 其他好文 > 详细

网络虚拟化技术与应用场景

时间:2016-05-24 17:21:13      阅读:581      评论:0      收藏:0      [点我收藏+]

标签:kvm   网络   


    MacVTap和vhost-net技术原理

    VM  <---->   虚拟网卡  <----> 虚拟化层  <---->  内核网桥  <----> 物理网卡

    vhost-net技术使虚拟机的网络通信绕过用户空间的虚拟化层,必须使用Virtio半虚拟化的网卡
    MacVTap则是跳过内核的网桥

    传统桥接方案


    <interface  type=‘bridge‘>
        <mac address=‘00:16:42:34:45:6f‘/>
        <source bridge=‘br0‘/>
        <targetdev=‘tap0‘/>
        <model type=‘Virtio‘/>
        <alias name=‘net0‘/>
        <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x03‘ function=‘0x0‘/>
    </interface>


vhost-net是对于Vritio的优化,Virtio本来是设计用于进行客户系统的前端与VMM的后端通信,减少硬件虚拟化方式下根模式和非根模式的转换
vhost-net是后端优化方案.
不使用vhost-net,进入CPU的根模式后,需要进入用户态将数据发送到tap设备后,再次切入内核态,使用vhost-net方式后,进入内核态后不需要再进行内核态和用户态的切换,进一步减少特权级切换的开销.
    MacVTap方案

        > ip link add link eth1 name MacVTap0 type MacVTap
        > ip link set MacVTap0 address 1a:34:34:34:45:42 up
        > ip link show MacVTap0

        <interface type=‘direct‘>
            <mac address=‘1a:343434:45:42‘/>
            <source dev=‘eth1‘ mode=‘bridge‘/>
            <model type=‘e1000‘/>
            <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x03‘ function=‘0x0‘/>
        </interface>

    网卡的中断与多队列


    Linux内核调用中断处理程序的函数来处理中断,由于中断会频繁发生,必须要将一些繁重且不非常重要的任务从中断处理程序中剥离出来,这一部分在Linux称为下半部
    3中处理下半部的方法   
        软中断
        tasklet
        工作队列

        高负载的网卡是软中断产生的大户,很容易形成瓶颈.并且在相当长的时间里是CPU0来处理

        网卡多队列  网卡的数据请求通过多个CPU来处理

        RSS是硬件特性,实现多队列,将 不同的流发到不同的CPU上, 同一数据流始终在同一个CPU上, 避免CPU的并行性和TCP的顺序性发生冲突.


        ls /sys/class/net/eth0/queues/  
        会看到系统中看到网卡对应多个发送和接收队列

        irqbalance 优化中断分配
        工作模式
            performance
            power-save
                    https://gist.github.com/syuu1228/4352382   网卡绑定中断的脚本

            多队列Virtio网卡




        网卡PCI PassThrough技术

        > virsh nodedev -list -tree
        > virsh nodedev-dumpxml.pci_0000_04_00_0


        SR-IOV技术
        the Single Root I/O Virtualization 是一个将PCI-E设备共享给虚拟机使用的标准.多用在网络设备上,理论上也可以支持其他的PCI设备

        SR-IOV技术是一种硬件解决方案,提供了一种从硬件上绕过系统的虚拟化层,并且使没有虚拟机能有单独的内存地址,中断,DMA流

        PFs physical functions 拥有全功能PCI-E

        VFs Virtual Functions 只有轻量级的PCI-E 每个PF最多可以有64000个虚拟功能VF

        网卡SR-IOV
         需要先配置宿主机的PF,然后将子网卡通过网卡独占的方式供虚拟机使用.


         modprobe igb
         modprobe igb max_vfs=7
         千兆网卡最多支持8个VF(0-7)
         万兆网卡最多支持64个VF

         BIOS打开SR-IOV
         modprobe -r  igb
         echo "option igb max_vfs=7" >> /etc/modprobe.d/igb.conf
         lspci |grep 82576
         虚拟机使用网卡独占的方式使用子网卡

         virsh nodedev-list|grep 0b



Open vSwitch

            >  ovs-vsctl add-br br0   #创建网桥
            >  ovs-vsctl add-port br0 eth1


            编辑虚拟机文件
            <interface type=‘bridge‘>
                <mac address=‘xx:xx:xx:xx:xx:xx‘ />
                <source bridge=‘br0‘/>
                <virtualport type=‘KVM‘/>
                <vlan>
                    <tag id=‘2‘/>
                </vlan>
                <targetdev=‘tap1‘/>
                <model type=‘Virtio‘/>
            </interface>



            ovs-vsctl show

            >ovs-vsctl set port tap1 tag=3 通过改变虚拟机对应的tap网卡设置VLAN tag即可



            ovs-vsctl add-br br0
            ovs-vsctl add-bond br0 bond0 eth2 eth3 lacp=active
            ovs-vsctl set port bond0 bond_mode=balance-slb
            ovs-appctl bond/show bond0


            连接网格open vSwitch网桥
            1.利用VETH设备
            ovs-vsctl add-br br0
            ovs-vsctl add-br br1
            ip link add name veth0 type veth peer name veth1
            ovs-vsctl add-port br0 veth0
            ovs-vsctl add-port br1 veth1
            2.利用Open vSwitch的pacth类型的端口
                ovs-vsctl add-br br0
                ovs-vsctl add-br br1
                ovs-vsctl add-port br0 patch-to-br0
                ovs-vsctl set interface patch-to-br0 type=patch
                ovs-vsctl set interface patch-to-br0 options:peer=patch-to-br1
                ovs-vsctl add-port br1 patch-to-br1
                ovs-vsctl set interface patch-to-br1 type=patch
                ovs-vsctl set interface patch-to-br1 options:peer=patch-to-br0

     宿主机多网卡绑定
             cat /etc/modprobe.d/nicbond.conf
             alias bond0 bonding
             options bond0 mode=1 miimon=100


             配置聚合接口
             cd /etc/sysconfig/network-scripts
             cat ifcfg-bond0
             DEVICE=bond0
             ONBOOT=YES
             BRIDGE=br1

             配置子网卡
             cat ifcfg-enp4s0f0
             HWADDR=
             TYPE=Ethernet
             BOOTPROTO=none
             NAME=enp4s0f0
             UUID=
             ONBOOT=yes
             MASTER=bond0
             SLAVE=yes
             配置虚拟网桥
             cat ifcfg-br1
             DEVICE=br1
             TYPE=Bridge
             IPADDR=192.168.20.200
             NETMASK=255.255.255.0
             ONBOOT=yes

内容从<深度实践KVM>一书总结

本文出自 “lionel” 博客,请务必保留此出处http://reliable.blog.51cto.com/10292844/1782437

网络虚拟化技术与应用场景

标签:kvm   网络   

原文地址:http://reliable.blog.51cto.com/10292844/1782437

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!