OpenStack SR-IOV_weixin_34288121的博客-程序员秘密

本文主要介绍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 的例子:

光纤卡 SR-IOV 的例子:

 

OpenStack实践SR-IOV

系统运行环境:

              系统:Centos 6.6,  Intel 82576

              openstack版本: Juno

配置计算节点物理主机:

             开启 VT-d                #BIOS配置

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

 创建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 

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

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

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

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

4.重启neutron-server 服务.

           

Compute Node:

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

编辑 /etc/nova/nova.conf

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

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

3.启动neutron-sriov-agent 服务

虚机使用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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34288121/article/details/94647048

智能推荐

【Linux学习】epoll详解_share_internet的博客-程序员秘密

什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44),它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。 epoll的相关

一个Monad的不严谨介绍桶_weixin_34361881的博客-程序员秘密

之前了解了下Monad,后来一段时间没碰,最近研究Parser用到Monad时发现又不懂了。现在重新折腾,趁着记忆还热乎,赶紧写下来。本文不会完整讲解Monad,而只介绍Monad相关的思想与编程技巧。不要被唬人的数学概念吓唬到了。对于程序员来说,Monad不过就是一种编程技巧,或者说是一种设计模式。Monad并非Haskell特有。实际上,大部分语言都有应用过Monad的...

git 本地创建新的分支,并推送远程仓库_海洋的渔夫的博客-程序员秘密

本地创建新的分支git branch new-branch 创建新的分支new-branch$ git branch download-api切换至新的分支$ git checkout download-api将新分支推送至远程仓库$ git pushfatal: The current branch download-api has no upstream br...

数据挖掘Data Set收集_请完成data目录下的数据集的数据挖掘_discxuwei的博客-程序员秘密

<br />UCI数据集是一个常用的标准测试数据集,下载地址在<br />http://www.ics.uci.edu/~mlearn/MLRepository.html<br />我的主页上也有整理好的一些UCI数据集(arff格式):<br />http://lamda.nju.edu.cn/yuy/files/download/UCI_arff.zip<br />在看别人的论文时,别人使用的数据集会给出数据集的出处或下载地址(除非是很机密的数据,例如与国家安全有关)。如果你看的论文没有给出数据集的出处

折腾了一个月算稳定了_lujdfi的博客-程序员秘密

折腾了一个月,终于找到一个双休的了,这里的人都很好!

eclipse run时找不到main方法_eclipse run main_垃圾继承拖拉机的博客-程序员秘密

在类 test.Test1 中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args)否则 JavaFX 应用程序类必须扩展javafx.application.Application我已经配置了run configuration ,但是还是报错,原因是我没有save all。日期:...

随便推点

使用telnet登陆smtp服务,使用163发邮件_杨西瓜的博客-程序员秘密

看前提醒:1、跑一遍telnet发邮件有什么好处??就是你对发邮件有了一个更清晰的认识,对发邮件类库的使用有了全新的认知http://blog.csdn.net/qq_33862644/article/details/79339967这个网址是我使用PHPMailer类库发邮件,我发现在类库中的debug模式和telnet发邮件一模一样,相信你跑完一遍telnet发邮件之后在看debug的内容就会...

Protobuf反射机制设置元素_google::protobuf::reflection_tanghaiyu777的博客-程序员秘密

Protobuf反射机制使用使用Protobuf的反射机制读取/写入元素的值 #include <cstdio> #include <google/protobuf/descriptor.h> #include "test_message.pb.h" using test_pb::TestRaw; using ::google::protobuf::Descripto

SecureCRT下安装详细教程_securecrt-kg_狂野小青年的博客-程序员秘密

SecureCRT 下安装详细破解教程 Secure CRT是一款支持 SSH2、SSH1、Telnet、Telnet/SSH、Relogin、Serial、TAPI、RAW 等协议的终端仿真程序,最吸引用户的是,SecureCRT 支持标签化 SSH 对话,从而可方便地管理多个 SSH 连接,设置项也极为丰富,简单的说是Windows下登录UNIX、Linux服务器主机的软件,支持SSH,同时支持Telnet和rlogin协议。FAQ  问题描述:  以前安装过SecureCRT,现在出现

SCI论文写作训练营笔记汇总03_科技论文写作(方法篇)_LiBiGo的博客-程序员秘密

4、科技论文写作——方法篇4.1 准备工作与概述4.1.2杂志编辑评估文章的标准4.2图表部分的写作方法4.2.1 为什么使用图表4.2.2 如何使用图表4.2.3如何选择图or表or文字4.2.4 图片/表格制作软件4.2.5图片的各种指标4.2.6图片的分类4.2.6图注的使用4.2.7表格4.2.8如何写图注或是表格标题4.3材料与...

macOS 打开redis服务器_不会写程序猿的代码的博客-程序员秘密

最近因为做毕设,需要用到redis数据库。但是每次关机之后redis就要重新打开,这里跟大家分享一种今天我发现的快捷的打开方法:一般的默认路径都是usr/local/Cellar然后就可以找到redis的文件夹,进bin,最后双击redis-server就ok啦。然后就看到了熟悉的UI和6379端口~redis的可视化工具RDM我放在csdn资源分享里啦~...

Linux之系统时间同步_linux时间同步_宗而研之的博客-程序员秘密

在 ubuntu 上开发时,发现系统时间与网络时间有偏差,毫无疑问,没有做网络校时,因此本文对相关的操作做一下记录。首先查看系统时间问题,运行 date 指令,输出如下首先安装相关工具sudo apt-get install ntpdate然后运行 timedatectl 指令,输出如下$ timedatectl Local time: 二 2021-07-20 19:36:38 CST Univers...