OpenStack SR-IOV

OpenStack SR-IOV

大家好,又见面了,我是全栈君。

本文主要介绍SR-IOV及实践openstack的SR-IOV功能的过程。

sriov功能介绍

SR-IOV 使一个单一的功能单元(比如,一个以太网端口)能看起来像多个独立的物理设备,即支持SR-IOV 功能的物理设备能被配置为多个功能单元。

SR-IOV 两种功能(function):

  • 物理功能(Physical Functions,PF):这是完整的带有 SR-IOV 能力的PCIe 设备。PF 能像普通 PCI 设备那样被发现、管理和配置。
  • 虚拟功能(Virtual Functions,VF):简单的 PCIe 功能,它只能处理I/O。每个 VF 都是从 PF 中分离出来的。每个物理硬件都有一个 VF 数目的限制。一个 PF,能被虚拟成多个 VF 用于分配给多个虚拟机。
Hypervisor 能将一个或者多个 VF 分配给一个虚机。在某一时刻,一个 VF 只能被分配给一个虚机。一个虚机可以拥有多个 VF。在虚机的操作系统看来,一个 VF 网卡看起来和一个普通网卡没有区别。SR-IOV 驱动是在内核中实现的。

网卡 SR-IOV 的例子:

OpenStack SR-IOV

光纤卡 SR-IOV 的例子:

OpenStack SR-IOV

 

OpenStack实践SR-IOV

系统运行环境:

              系统:Centos 6.6,  Intel 82576

              openstack版本: Juno

配置计算节点物理主机:

             开启 VT-d                #BIOS配置

             开启IOMMU功能     #在文件中添加 /boot/grub.conf  intel_iommu=on

OpenStack SR-IOV

 创建VF设备             #modprobe  igb max_vfs=8   或 echo 8 > /sys/class/net/ethx/device/sriov_numvfs

配置Openstack(Juno):

 Controller Node:

1.配置sriov mechanism driver      

 编辑 /etc/neutron/plugins/ml2/ml2_conf.ini 

OpenStack SR-IOV

 2.配置支持SR-IOV网卡类型

 查看系统网卡类型      lspci -nn | grep Eth

OpenStack SR-IOV

 编辑 /etc/neutron/plugins/ml2/ml2_conf_sriov.ini     

OpenStack SR-IOV

3.修改 neutron-server 脚本 /etc/init.d/neutron-server

OpenStack SR-IOV

4.重启neutron-server 服务.

           

Compute Node:

1.配置计算节点 PCI Device  重启 openstack-nova-compute 服务

编辑 /etc/nova/nova.conf

OpenStack SR-IOV

2.配置计算节点 neutron-sriov-agent

 编辑 /etc/neutron/plugins/ml2/ml2_conf_sriov.ini

OpenStack SR-IOV

3.启动neutron-sriov-agent 服务

OpenStack SR-IOV

虚机使用SR-IOV网卡的步骤:

1.创建sriov类型的Port 

 # neutron port-create ${net-id} –binding:vnic-type direct

 2.创建虚机

#  nova boot –flavor  ${flavor_name} –image  ${image_id} –nic port-id=${port_id}    ${vm_name}

 实践总结

   Openstack(Juno)使用SRIOV特性存在以下局限:

  1. 不支持迁移
  2. 不支持卡的热插入虚机
  3. 不支持虚机的Qos .
  4. 不支持安全组
  5. 仅支持Vlan

虚机使用sriov类型的网卡时,1.创建sriov类型的Port .  2.将sriov类型的Port分配给虚机.

1) 暂时不支持迁移,

         冷迁移:

                      https://bugs.launchpad.net/nova/+bug/1400784
                      https://bugs.launchpad.net/nova/+bug/1512880

         热迁移:虚机直接使用物理设备造成不能实时迁移和保存,https://blueprints.launchpad.net/nova/+spec/sriov-live-migration

                     后续跟进macvtap,Liberty支持macvtap https://blueprints.launchpad.net/nova/+spec/libvirt-macvtap-vif

2) sriov类型虚拟网卡只能新建时加入目标虚机。在创建虚机时,nova会关联Instance和sriov类型port(保存到数据库)

和配置binding profile信息,interface_attach则会不能配置bind profile导致port绑定失败。

3) 不支持虚机的Qos,最终支持虚机Qos。  openstack对Qos有两种支持方式 :1.基于

Qos-Service ,Agent(OVS,sriov),该部分功能代码还在master分支.   2. 基于虚机的Quota(Libvirt ,TC).

4) 系统环境(centos6.6 + intel 82576)不支持管理员手动配置vf的状态,计算节点不需要启动neutron-server-agent服务.

5) 创建vnic-type为macvtap类型的sriov的port,计算节点libvirt会产生设置ethx(vf对应的eth) MAC的错误.

6)  在创建虚机时可以指定Net,不能指定被创建Port的vnic-type。 建议后期将Port抽象成虚拟网

卡的概念,用户直接管理虚机网卡类型。后续通过扩展,提供方便的sriov类型网卡使用方式。

 

需要处理的问题:无ovs-agent服务的计算节点(仅支持sriov类型的port),可能会被选中来vnic-type为normal的虚拟网卡,这样

会导致虚机启动失败,建议计算节点有开启neutron-openvswitch-agent,创建非sriov类型的网卡。

 

*使用SRIOV Feather 怎么物理网卡的的HA ?

SRIOV直接从物理网卡分配VF,VF的状态与PF的状态保持一直,物理网卡或网卡直连的交换机down都会引起VF不能正常通信,应该怎么处理这个问题呢?

在OVS的场景下bonding多块网卡保证网卡HA。在SRIOV的场景下直接bonding物理网卡,并不能网卡HA的问题,因为VF状态与物理网卡保持一致,VF直接通过物理网卡处理packet。

 

方案参见:https://communities.intel.com/thread/54061?start=0&tstart=0

Openstack 网卡bonding 参见:https://blueprints.launchpad.net/nova/+spec/libvirt-sriov-nic-bonding

 

参考文档:

    http://www.openstack.cn/?p=2118

    http://www.ovirt.org/Feature/SR-IOV

    http://www.cnblogs.com/sammyliu/p/4548194.html

    http://docs.openstack.org/networking-guide/adv_config_sriov.html

转载于:https://www.cnblogs.com/gaozhengwei/p/7100287.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108387.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ipset详解[通俗易懂]

    ipset详解[通俗易懂]ipset创建:create创建一个新的ipset集合:ipsetcreateSETNAMETYPENAMESETNAME是创建的ipset的名称,TYPENAME是ipset的类型:TYPENAME:=method:datatype[,datatype[,datatype]]method指定ipset中的entry存放的方式,随后的datatype约定了每个entry…

    2022年10月7日
    0
  • 解决java.lang.RuntimeException: com.netflix.client.ClientException: Load balancer does not have availa[通俗易懂]

    解决java.lang.RuntimeException: com.netflix.client.ClientException: Load balancer does not have availa[通俗易懂]解决java.lang.RuntimeException:com.netflix.client.ClientException:Loadbalancerdoesnothaveavailableserverforclient:xxx-xxx-xxx小弟第一次发博客,不喜勿喷,工作经验(1个月)各位大佬你们,最近在接触微服务项目,在运行的过程中遇到许多问题,第一次写博客,就发…

    2022年7月24日
    16
  • 什么是变限积分求导公式_积分上限函数求导法则

    什么是变限积分求导公式_积分上限函数求导法则自己理解:当积分上限为被积函数的自变量时,变限积分在某一点的导数等于被积分函数在这一点的值,就是说积分这一点的增量为被积分函数在这一点的值乘以自变量增量区间大小,求导求出来的就是这一点的导数即为被积分

    2022年8月4日
    13
  • 如何打开sln文件并显示窗口_在.sln文件中设置Visual Studio默认启动项目的简单方法…[通俗易懂]

    如何打开sln文件并显示窗口_在.sln文件中设置Visual Studio默认启动项目的简单方法…[通俗易懂]昨天在一台电脑上用git新签出一个项目进行build,却出现一堆编译错误,而在原先的开发机上build无任何错误。对比分析后发现,开发机上VS的启动项目(startupproject)与这台电脑上的不一样,改为一样后,build立马成功。看来问题与msbuild编译VS项目的顺序有关,而哪个项目作为启动项目会影响到这个编译顺序。要避免这个问题,就要保证git签出的VS解决方案的启动项目是一致的,…

    2022年6月9日
    89
  • redflag linux7.0 grub引导终极原创

    redflag linux7.0 grub引导终极原创很多同志在安装redflag时,安装引导时选了将引导安装在根分区而不是MBR分区,所以开机时还是只能进入XP系统而不能进入Linux系统其实要解决这个问题,引导进入redflag很简单,只要在xp下的C盘中找到menu.ls这个文件,用记事本找开,在其中添加title红旗Linux桌面7root(hd0,8)kernel/boot/vmlinuz-2.6….

    2022年8月20日
    4
  • (c语言)选择排序法和冒泡排序法

    (c语言)选择排序法和冒泡排序法问题描述:给定一个数组(或者输入一个数组),分别运用选择排序法和冒泡排序法将所要的结果输出。程序分析:                    选择排序1>.对于选择排序,首先理解排序的思想。给定一个数组,这种思想首先假定数组的首元素为最大(最小)的。此时就要利用3个变量i,j,k表示元素的下标。i表示当前,j表示找到的最大(最小)的下标,k用

    2022年6月25日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号