OVS使用笔记(四十三)
一、OVS概念
使用OpenStack neutron+vxlan部署模式下网络节点OVS网桥作为例子
ovs-vsctl show
e44abab7-2f65-4efd-ab52-36e92d9f0200Manager "ptcp:6640:127.0.0.1"is_connected: trueBridge br-extController "tcp:127.0.0.1:6633"is_connected: truefail_mode: securePort br-extInterface br-exttype: internalPort "eth1"Interface "eth1"Port phy-br-extInterface phy-br-exttype: patchoptions: {peer=int-br-ext}Bridge br-tunController "tcp:127.0.0.1:6633"is_connected: truefail_mode: securePort br-tunInterface br-tuntype: internalPort patch-intInterface patch-inttype: patchoptions: {peer=patch-tun}Port "vxlan-080058ca"Interface "vxlan-080058ca"type: vxlanoptions: {df_default="true", in_key=flow, local_ip="8.0.88.201", out_key=flow, remote_ip="8.0.88.202"}Bridge br-intController "tcp:127.0.0.1:6633"is_connected: truefail_mode: securePort "qr-11591618-c4"tag: 3Interface "qr-11591618-c4"type: internalPort patch-tunInterface patch-tuntype: patchoptions: {peer=patch-int}Port int-br-extInterface int-br-exttype: patchoptions: {peer=phy-br-ext}
1、Bridge
Bridge代表一个以太网交换机(Switch),一个主机中可以创建一个或者多个Bridge。Bridge的功能是根据一定规则,把从端口收到的数据包转发到另一个或多个端口,上面例子中有三个Bridge,br-tun,br-int,br-ext
添加一个网桥br0
ovs-vsctl add-br br0
网桥的fail-mode设置
- standalone:该模式下,没有运行controller的情况下,OVS会自动调整为普通交换机模式,像物理交换机一样,此时可能会有环路产生的问题。如果有controller的情况,OVS会自动变成openflow交换机
- secure: 该模式下,无论有没有controller,OVS都会作为openflow交换机运行,也就是所有网桥上的端口,等待controller或者用户添加flow到OVS来进行通信。
2、Port
端口Port与物理交换机的端口概念类似,Port是OVS Bridge上创建的一个虚拟端口,每个Port都隶属于一个Bridge。Port有以下几种类型
1)Normal
可以把操作系统中已有的网卡(物理网卡em1/eth0,或虚拟机的虚拟网卡tapxxx)挂载到ovs上,ovs会生成一个同名Port处理这块网卡进出的数据包。此时端口类型为Normal。
如下,主机中有一块物理网卡eth1,把其挂载到OVS网桥br-ext上,OVS会自动创建同名Port eth1。
ovs-vsctl add-port br-ext eth1 //Bridge br-ext中出现port “eth1”
有一点要注意的是,挂载到OVS上的网卡设备不支持分配IP地址,因此若之前eth1配置有IP地址,挂载到OVS之后IP地址将不可访问。这里的网卡设备不只包括物理网卡,也包括主机上创建的虚拟网卡。
2)Internal
Internal类型是OVS内部创建的虚拟网卡接口,每创建一个Port,OVS会自动创建一个同名接口(Interface)挂载到新创建的Port上。接口的概念下面会提到。
下面创建一个网桥br0,并创建一个internal类型的Port p0
ovs-vsctl add-br br0
ovs-vsctl add-port br0 p0 -- set Interface p0 type=internal
查看结果
//查看网桥br0
ovs-vsctl show br0Bridge "br0"fail_mode:securePort "p0"Interface "p0"type:internalPort "br0"Interface "br0"type:internal
可以看到有两个Port。当ovs创建一个新网桥时,默认会创建一个与网桥同名的Internal Port。在OVS中,只有”internal”类型的设备才支持配置IP地址信息,因此我们可以为br0接口配置一个IP地址,当然p0也可以配置IP地址
ip addr add 192.168.10.11/24 dev br0
ip link set br0 up
//添加默认路由
ip route add default via 192.168.10.1 dev br0
上面两种Port类型区别在于,Internal类型会自动创建接口(Interface),而Normal类型是把主机中已有的网卡接口添加到OVS中
3)Patch
当主机中有多个ovs网桥时,可以使用Patch Port把两个网桥连起来。Patch Port总是成对出现,分别连接在两个网桥上,从一个Patch Port收到的数据包会被转发到另一个Patch Port,类似于Linux系统中的veth。使用Patch连接的两个网桥跟一个网桥没什么区别,OpenStack Neutron中使用到了Patch Port。上面网桥br-ext中的Port phy-br-ext与br-int中的Port int-br-ext是一对Patch Port
可以使用ovs-vsctl创建patch设备,如下创建两个网桥br0,br1,然后使用一对Patch Port连接它们
ovs-vsctl add-br br0
ovs-vsctl add-br br1
ovs-vsctl \
-- add-port br0 patch0 --set interface patch0 type=patch options:peer=patch1 \
-- add-port br1 patch1 --set interface patch1 type=patch options:peer=patch0
结果如下
ovs-vsctl showBridge "br0"Port "br0"Interface "br0"type:internalPort "patch0"Interface "patch0"type:patchoptions:{peer="patch1"}Bridge "br1"Port "br1"Interface "br1"type:internalPort "patch1"Interface "patch1"type:patchoptions:{peer="patch0"}
4)Tunnel
OVS中支持添加隧道(Tunnel)端口,常见隧道技术有两种gre或vxlan。隧道技术是在现有的物理网络之上构建一层虚拟网络,上层应用只与虚拟网络相关,以此实现的虚拟网络比物理网络配置更加灵活,并能够实现跨主机的L2通信以及必要的租户隔离。不同隧道技术其大体思路均是将以太网报文使用隧道协议封装,然后使用底层IP网络转发封装后的数据包,其差异性在于选择和构造隧道的协议不同。Tunnel在OpenStack中用作实现大二层网络以及租户隔离,以应对公有云大规模,多租户的复杂网络环境。
OpenStack是多节点结构,同一子网的虚拟机可能被调度到不同计算节点上,因此需要有隧道技术来保证这些同子网不同节点上的虚拟机能够二层互通,就像他们连接在同一个交换机上,同时也要保证能与其它子网隔离。
OVS在计算和网络节点上建立隧道Port来连接各节点上的网桥br-int,这样所有网络和计算节点上的br-int互联形成了一个大的虚拟的跨所有节点的逻辑网桥(内部靠tunnel id或VNI隔离不同子网),这个逻辑网桥对虚拟机和qrouter是透明的,它们觉得自己连接到了一个大的br-int上。从某个计算节点虚拟机发出的数据包会被封装进隧道通过底层网络传输到目的主机然后解封装。
上面网桥br-tun中Port "vxlan-080058ca"就是一个vxlan类型tunnel端口。下面使用两台主机测试创建vxlan隧道
//主机192.168.7.21上
ovs-vsctl add-br br-vxlan
//主机192.168.7.23上
ovs-vsctl add-br br-vxlan
//主机192.168.7.21上添加连接到7.23的Tunnel Port
ovs-vsctl add-port br-vxlan tun0 --set Interface tun0 type=vxlan options:remote_ip=192.168.7.23
//主机192.168.7.23上添加连接到7.21的Tunnel Port
ovs-vsctl add-port br-vxlan tun0 --set Interface tun0 type=vxlan options:remote_ip=192.168.7.21
然后,两个主机上桥接到br-vxlan的虚拟机就像连接到同一个交换机一样,可以实现跨主机的L2连接,同时又完全与物理网络隔离。
3、Interface
Interface是连接到Port的网络接口设备,是OVS与外部交换数据包的组件,在通常情况下,Port和Interface是一对一的关系,只有在配置Port为 bond模式后,Port和Interface是一对多的关系。这个网络接口设备可能是创建Internal类型Port时OVS自动生成的虚拟网卡,也可能是系统的物理网卡或虚拟网卡(TUN/TAP)挂载在ovs上。 OVS中只有”Internal”类型的网卡接口才支持配置IP地址
Interface是一块网络接口设备,负责接收或发送数据包,Port是OVS网桥上建立的一个虚拟端口,Interface挂载在Port上。一个接口就是操作系统的一块网卡
当Open vSwitch创建一个新网桥时,默认会创建一个与网桥同名的Internal Port,同时也创建一个与Port同名的Interface。三位一体,所以操作系统里就多了一块网卡,但是状态是down的。
4、Controller
OpenFlow控制器。OVS可以同时接受一个或者多个OpenFlow控制器的管理。主要作用是下发流表(Flow Tables)到OVS,控制OVS数据包转发规则。控制器与OVS通过网络连接,不一定要在同一主机上
可以看到上面实例中三个网桥br-int,br-ext,br-tun都连接到控制器Controller "tcp:127.0.0.1:6633上
5、Datapath
OVS内核模块,负责执行数据交换。由于流可能非常复杂,对每个进来的数据包都去尝试匹配所有流,效率会非常低,所以有了datapath这个东西。Datapath是流的一个缓存,会把流的执行结果保存起来,当下次遇到匹配到同一条流的数据包,直接通过datapath处理。考虑到转发效率,datapath完全是在内核态实现的,并且默认的超时时间非常短,大概只有3秒左右。
二、open vswitch常用操作
1、ovs-vsctl
ovs-vsctl
是一个管理或配置ovs-vswitchd
的高级命令行工具,高级是说其操作对用户友好,封装了对数据库的操作细节。它是管理OVS最常用的命令,除了配置flows之外,其它大部分操作比如Bridge/Port/Interface/Controller/Database/Vlan等都可以完成
添加网桥br0
ovs-vsctl add-br br0列出所有网桥
ovs-vsctl list-br添加一个Port p1到网桥br0
ovs-vsctl add-port br0 p1查看网络br0上所有Port
ovs-vsctl list-ports br0获取br0网桥的Openflow控制器地址,没有控制器则返回空
ovs-vsctl get-controller br0设置OpenFlow控制器,控制器地址为192.168.1.10,端口为6633
ovs-vsctl set-controller br0 tcp:192.168.1.10:6633移除controller
ovs-vsctl del-controller br0删除网桥br0
ovs-vsctl del-br br0设置端口p1的vlan tag为100
ovs-vsctl set Port p1 tag=100设置端口p0类型为internal
ovs-vsctl set Interface p0 type=internal添加vlan10端口,并设置vlan tag为10,Port类型为Internal
ovs-vsctl add-port br0 vlan10 tag=10 --set Interface vlan10 type=internal添加隧道端口gre0,类型为gre,远端IP为1.2.3.4
ovs-vsctl add-port br0 gre0 --set Interface gre0 type=gre options:remote_ip=1.2.3.4
2、ovsdb-tool
ovsdb-tool是一个专门管理OVS数据库文件的工具,不常用,它不直接与ovsdb-server进程通信
//可以使用此工具创建并初始化database文件
ovsdb-tool create [db][schema]
//可以使用ovsdb-client get-schema [database]获取某个数据库的schema(json格式)
//可以查看数据库更改记录,具体到操作命令,这个比较有用
ovsdb-tool show-log -m
record 48: 2017-01-07 03:34:15.147 "ovs-vsctl: ovs-vsctl --timeout=5 -- --if-exists del-port tapcea211ae-10"table Interface row "tapcea211ae-10" (151f66b6):delete rowtable Port row "tapcea211ae-10" (cc9898cd):delete rowtable Bridge row "br-int" (fddd5e27):table Open_vSwitch row a9fc1666 (a9fc1666):record 49: 2017-01-07 04:18:23.671 "ovs-vsctl: ovs-vsctl --timeout=5 -- --if-exists del-port tap5b4345ea-d5 -- add-port br-int tap5b4345ea-d5 -- set Interface tap5b4345ea-d5 "external-ids:attached-mac=\"fa:16:3e:50:1b:5b\"" -- set Interface tap5b4345ea-d5 "external-ids:iface-id=\"5b4345ea-d5ea-4285-be99-0e4cadf1600a\"" -- set Interface tap5b4345ea-d5 "external-ids:vm-id=\"0aa2d71e-9b41-4c88-9038-e4d042b6502a\"" -- set Interface tap5b4345ea-d5 external-ids:iface-status=active"table Port insert row "tap5b4345ea-d5" (4befd532):table Interface insert row "tap5b4345ea-d5" (b8a5e830):table Bridge row "br-int" (fddd5e27):table Open_vSwitch row a9fc1666 (a9fc1666):
...
3、ovsdb-client
ovsdb-client是ovsdb-server进程的命令行工具,主要是从正在运行的ovsdb-server中查询信息,操作的是数据库相关
//列出主机上的所有databases,默认只有一个库Open_vSwitch
ovsdb-client list-dbs
//获取指定数据库的schema信息
ovsdb-client get-schema [DATABASE]
//列出指定数据库的所有表
ovsdb-client list-tables [DATABASE]
//dump指定数据库所有数据,默认dump所有table数据,如果指定table,只dump指定table数据
ovsdb-client dump [DATABASE] [TABLE]
//监控指定数据库中的指定表记录改变
ovsdb-client monitor DATABASE TABLE
4、ovs-ofctl
ovs-ofctl是专门管理配置OpenFlow交换机的命令行工具,我们可以用它手动配置OVS中的OpenFlow flows,注意其不能操作datapath flows和”hidden” flows
//查看br-tun中OpenFlow flows
ovs-ofctl dump-flows br-tun
//查看br-tun端口信息
ovs-ofctl show br-tun
//添加新的flow:对于从端口p0进入交换机的数据包,如果它不包含任何VLAN tag,则自动为它添加VLAN tag 101
ovs-ofctl add-flow br0 "priority=3,in_port=100,dl_vlan=0xffff,actions=mod_vlan_vid:101,normal"
//对于从端口3进入的数据包,若其vlan tag为100,去掉其vlan tag,并从端口1发出
ovs-ofctl add-flow br0 in_port=3,dl_vlan=101,actions=strip_vlan,output:1
//添加新的flow: 修改从端口p1收到的数据包的源地址为9.181.137.1,show 查看p1端口ID为100
ovs-ofctl add-flow br0 "priority=1 idle_timeout=0,in_port=100,actions=mod_nw_src:9.181.137.1,normal"
//添加新的flow: 重定向所有的ICMP数据包到端口 p2
ovs-ofctl add-flow br0 idle_timeout=0,dl_type=0x0800,nw_proto=1,actions=output:102
//删除编号为 100 的端口上的所有流表项
ovs-ofctl del-flows br0 "in_port=100"
三、使用open vswitch构建虚拟网络
1、构建物理机和物理机相互连接的网络
在安装open vswitch的主机上有两块网卡,分别为eth0、eth1,把这两块网卡挂接到open vswitch的网桥上,然后有两台物理机host1、host2分别连接到eth0和eth1上,实现这两台物理机的通信。构建结果图如下:
执行以下命令:
ovs-vsctl add-br br0 //建立一个名为br0的open vswitch网桥
ovs-vsctl add-port br0 eth0 //把eth0挂接到br0中
ovs-vsctl add-port br0 eth1 //把eth1挂接到br0中
2、构建虚拟机与虚拟机相连的网络
在安装open vswitch的主机上安装两个虚拟机,把两个虚拟机的网卡都挂接在open vswitch的网桥上,实现两台虚拟机的通信,构建结果图如下:
执行以下命令:
ovs-vsctl add-br br0 //建立一个名为br0的open vswitch网桥
如果使用vbox或virt-manager把bridge设置为br0即可,如果使用cli kvm则先创建两个文件,用于虚拟网卡的添加与删除。假设这两个文件分别为/etc/ovs-ifup和/etc/ovs-ifdown,则向这两个文件中写入以下内容:
/etc/ovs-ifup
#!/bin/shswitch='br0'
/sbin/ifconfig $1 0.0.0.0 up
ovs-vsctl add-port $(switch) $1
/etc/ovs-ifdown
#!/bin/shswitch='br0'
/sbin/ifconfig $1 0.0.0.0 down
ovs-vsctl del-port $(switch) $1
使用以下命令建立虚拟机
kvm -m 512 -net nic,macaddr=00:11:22:33:44:55 \-net tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown \-drive file=/path/to/disk-image,boot=on kvm -m 512 -net nic,macaddr=11:22:33:44:55:66 \-net tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown-drive \file=/path/to/disk-image,boot=on
3、构建虚拟机与物理机相连的网络
在装有open vswitch的主机上有一个物理网卡eth0,一台主机通过网线和eth0相连,在open vswitch的主机上还装有一台虚拟机,把此虚拟机和连接到eth0的主机挂接到同一个网桥上,实现两者之间的通信,构建结果图如下:
执行命令:
ovs-vsctl add-br br0 //建立一个名为br0的open vswitch网桥
ovs-vsctl add-port br0 eth0 //把eth0挂接到br0中
kvm -m 512 -net nic,macaddr=00.11.22.33.44.55-net \
tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown-drive \
file=/path/to/disk-image,boot=on //ovs-ifup和ovs-ifdown和上一节相同
4、构建网桥和网桥相连的网络
以上操作都是将多个主机(物理机或虚拟机)连接到同一个网桥上,实现它们之间的通信,但是要构建复杂的网络,就需要多个网桥,在装有open vswitch的主机上建立两个网桥,实现它们之间的连接,构建结果如下:
执行命令:
ovs-vsctl add-br br0 //添加一个名为br0的网桥
ovs-vsctl add-br br1 //添加一个名为br1的网桥ovs-vsctl add-port br0 patch-to-br1 //为br0添加一个虚拟端口ovs-vsctl set interface patch-to-br1 type=patch //把patch-to-br1的类型设置为patch
ovs-vsctl set interface patch-to-br1 options:peer=patch-to-br0 //把对端网桥和此网桥连接的端口名称设置为patch-to-br0ovs-vsctl add-port br1 patch-to-br0 //为br0添加一个虚拟端口
ovs-vsctl set interface patch-to-br0 type=patch //把patch-to-br0的类型设置为patchovs-vsctl set interface patch-to-br0 options:peer=patch-to-br1 //把对端网桥和此网桥连接的端口名称设置为patch-to-br1
5、在不同的主机之间构建网桥之间的连接
在两台机器上分别安装上open vswitch并创建网桥,分别为两个网桥添加物理网卡,然后通过网线连接两个网桥,实现两个网桥之间的互通。构建结果图如下:
执行命令:
host1
ovs-vsctl add-br br0 //添加名为br0的网桥
ovs-vsctl add-port br0 eth0 //把eth0挂接到br0上
host2
ovs-vsctl add-br br0 //添加名为br0的网桥
ovs-vsctl add-port br0 eth0 //把eth0挂接到br0上
然后使用网线把host1的eth0和host2的eth0相连即可。
使用上边五种方法的组合就可以构建出各种复杂的网络,为各种实验提供网络的支持。
四、OVS中的各种流(flows)
flows是OVS进行数据转发策略控制的核心数据结构,区别于Linux Bridge是个单纯基于MAC地址学习的二层交换机,flows的存在使OVS作为一款SDN交换机成为云平台网络虚拟机化主要组件
OVS中有多种flows存在,用于不同目的,但最主要的还是OpenFlow flows这种,文中未明确说明的flows都是指OpenFlow flows
1、OpenFlow flows
OVS中最重要的一种flows,Controller控制器下发的就是这种flows,OVS架构部分已经简单介绍过,关于OpenFlow 的具体使用,会在另一篇文章中说明
2、“hidden” flows
OVS在使用OpenFlow flows时,需要与OpenFlow控制器建立TCP连接,若此TCP连接不依赖OVS,即没有OVS依然可以建立连接,此时就是out-of-band control
模式,这种模式下不需要"hidden" flows。
但是在in-band control
模式下,TCP连接的建立依赖OVS控制的网络,但此时OVS依赖OpenFLow控制器下发的flows才能正常工作,没法建立TCP连接也就无法下发flows,这就产生矛盾了,因此需要存在一些"hidden" flows,这些"hidden" flows保证了TCP连接能够正常建立。关于in-band control
详细介绍,参考OVS官方文档Design Decisions In Open vSwitch 中In-Band Control
部分,“hidden” flows优先级高于OpenFlow flows,它们不需要手动设置。可以使用ovs-appctl
查看这些flows,下面命令输出内容包括OpenFlow flows
,"hidden" flows
ovs-appctl bridge/dump-flows<br>
3、datapath flows
datapath flows是datapath
内核模块维护的flows,由内核模块维护意味着我们并不需要去修改管理它。与OpenFlow flows不同的是,它不支持优先级,并且只有一个表,这些特点使它非常适合做缓存。与OpenFlow一样的是它支持通配符,也支持指令集(多个action)
datapath flows可以来自用户空间ovs-vswitchd
缓存,也可以是datapath内核模块进行MAC地址学习到的flows,这取决与OVS是作为SDN交换机,还是像Linux Bridge那样只是一个简单基于MAC地址学习的二层交换机
4、管理flows的命令行工具
我们可以修改和配置的是OpenFlow flows。datapath flow和"hidden" flows由OVS自身管理,我们不必去修改它。当然,调试场景下还是可以使用工具修改的
介绍下上面三种flows管理工具,不具体说明,具体使用可以查看相关man手册
ovs-ofctl dump-flows <br>
打印指定网桥内的所有OpenFlow flows,可以存在多个流表(flow tables),按表顺序显示。不包括"hidden" flows。这是最常用的查看flows命令,当然这条命令对所有OpenFlow交换机都有效,不单单是OVSovs-appctl bridge/dump-flows <br>
打印指定网桥内所有OpenFlow flows,包括"hidden" flows,in-band control模式下排错可以用到ovs-dpctl dump-flows [dp]
打印内核模块中datapath flows,[dp]可以省略,默认主机中只有一个datapathsystem@ovs-system
man手册可以找到非常详细的用法说明,注意ovs-ofctl
管理的是OpenFlow flows
原文链接:
https://www.sdnlab.com/sdn-guide/14747.html
https://opengers.github.io/openstack/openstack-base-use-openvswitch/
OVS使用笔记(四十三)相关推荐
- 【Visual C++】游戏开发笔记四十三 浅墨DirectX教程十一 为三维世界添彩:纹理映射技术(二)...
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 作者:毛星云(浅墨) 邮箱: happylifemxy@163.com 本篇文章里,我们首先对Direct3D之中固定功能流水线中的 ...
- 【Visual C++】游戏开发笔记四十三 浅墨DirectX教程十一 为三维世界添彩 纹理映射技术 二
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...
- OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co
OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...
- 庄懂的TA笔记(十三)<特效-混合模式:四种主要透明通道用法 AC,AB,AD,自定义混合>
庄懂的TA笔记(十三)<特效-混合模式:四种主要透明通道用法 AC,AB,AD,自定义混合> 效果展示: 正文: 一.特效类大纲: 1.特效 · 透 2.特效 · 动 3.特效 · 映 二 ...
- 【Visual C++】游戏开发笔记四十五 浅墨DirectX教程十三 深度测试和Z缓存专场
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8607864 作者:毛星云(浅墨 ...
- OpenCV学习笔记(十三):霍夫变换:HoughLines(),HoughLinesP(),HoughCircles( )
OpenCV学习笔记(十三):霍夫变换:HoughLines(),HoughLinesP(),HoughCircles( ) 1.霍夫线变换HoughLines() OpenCV支持三种不同的霍夫线变 ...
- ROS入门笔记(十三):分布式通信
ROS入门笔记(十三):分布式通信 文章目录 01 如何实现分布式多机通信 1.1 设置IP地址,确保底层链路的连通 1.2 在从机端设置ROS_MASTER_URI,让从机找到ROS Master ...
- python数据挖掘学习笔记】十三.WordCloud词云配置过程及词频分析
#2018-03-28 09:59:40 March Wednesday the 13 week, the 087 day SZ SSMR 11,12因为涉及到数据库被我暂时放弃了 python数据挖 ...
- 《深入浅出DPDK》读书笔记(十三):DPDK虚拟化技术篇(加速包处理的vhost优化方案)
Table of Contents 加速包处理的vhost优化方案 142.vhost的演进和原理 143.Qemu与virtio-net 144.Linux内核态vhost-net 145.用户态v ...
- ng机器学习视频笔记(十三) ——异常检测与高斯密度估计
ng机器学习视频笔记(十三) --异常检测与高斯密度估计 (转载请附上本文链接--linhxx) 一.概述 异常检测(anomaly detection),主要用于检查对于某些场景下,是否存在异常内容 ...
最新文章
- 漫话:如何给女朋友解释为什么不能在 MySQL 中使用 UTF-8 编码
- vi查找替换命令详解
- 云炬WEB开发笔记2-5 chrome调试工具
- eShopOnContainers 知多少[4]:Catalog microservice
- [react] 在react中遍历的方法有哪些?它们有什么区别呢?
- Segment-based Disparity Refinement with Occlusion Handling for Stereo Matching翻译和理解
- 初学Java,LinkedList功能最全的集合类
- 15.5.1【Task实现细节】 生成的代码
- linux6.0设置共享文件夹,[原创] how to virtualbox sharefolder共享文件夹(数据空间)设置全记录...
- UE4之cmd调用函数
- 牛人也得看的CSS常识
- Atitit 面试分析--面试次数 复试次数 期望薪资分析法 目录 1. 汇总分析 面试次数 复试次数 期望薪资	1 2. 一些理论	1 2.1. 差额选举是指候选人数多于应选人数的选举。	1
- STM32/STM8+DMX512协议
- Ubuntu文件目录结构详解
- [ubuntu][原创]ubuntu18.04安装rabbitvcs正确方法
- 电脑键盘部分按键失灵_笔记本键盘失灵怎么办,电脑键盘失灵-中关村在线
- shell:sed 替换换行符
- 记录下这一年发生的事
- java 线程管理_Java提供的线程池来创建多线程,进一步优化线程管理。
- 如何入门独立开放游戏
热门文章
- pythonexe32位-如何使用pyinstaller打包32位的exe
- python培训班那家好-Python培训机构去哪好
- python手机版下载3.7.3-QPython3手机版下载
- 查看安装的cuda和cudnn的版本号
- Tensorflow2.0报错:ProfilerNotRunningError: Cannot stop profiling. No profiler is running.
- Windows10下git bash中添加wget下载工具
- mysql读写分离和组复制_数据库主从复制,读写分离,负载均衡,分库分表分别表达的什么概念?...
- java中文乱码decode_java中文乱码
- UVa10672 - Marbles on a tree(BFS)
- .net core i上 K8S(二)运行简单.netcore程序