Linux Vepa:网络虚拟化技术再升级 (linux vepa)

随着云计算和大数据的发展,网络虚拟化技术在企业和数据中心中得到了广泛应用。Linux Vepa(Virtual Ethernet Port Aggregator)作为一种网络虚拟化技术,通过将虚拟机的网络流量分离到物理网络中,实现了流量隔离和灵活配置。近期,Linux Vepa又迎来一次升级,更为强大的性能和更加便捷的操作将推动网络虚拟化技术的更进一步发展。

一、Linux Vepa的定义及优势

Linux Vepa是一种在Linux主机中使用的网络虚拟化技术,将虚拟机产生的网络流量从物理网络传输中隔离开来。具体而言,该技术在虚拟机和物理网络间增加了一个交换机,在这个交换机中进行虚拟机之间的流量转发和物理网络之间的流量传输,实现了虚拟机流量和物理网络流量的隔离。

Linux Vepa的主要优势在于网络安全性和网络管理的灵活性。因为虚拟机的网络流量被隔离开来,实现了流量的隔离和安全,可以避免虚拟机之间的流量交叉和安全漏洞。同时,该技术允许管理者根据实际需求,动态调整虚拟机与物理网络之间的流量关系,实现了网络管理的灵活性。

二、Linux Vepa升级带来的性能提升

最新的Linux Vepa升级在性能方面带来了重大突破。新版的Linux Vepa支持多台主机间的流量互通,实现了跨主机的网络流量传输。软件定义网络(SDN)的支持也是该升级的重要内容。借助SDN技术,Linux Vepa可以轻松地实现网络流量的弹性调整和动态配置,实现了对网络的更加细致和精准的管理。

此外,Linux Vepa的升级还对网络设备的配置进行了优化。在新版的Linux Vepa中,用户可以通过简单的配置,使用基于IP的技术来实现虚拟机之间的流量转发,极大提升了虚拟化网络的可用性和可靠性。而且,该技术支持ip forwarding和ip filtering等特性,能够在虚拟机和物理网络之间实现互动通信,为网络管理带来了更加全面和丰富的功能。

三、Linux Vepa升级带来的易用性提升

除了性能的提升,Linux Vepa升级还带来了易用性的提升。具体而言,新版的Linux Vepa增加了对Linux内核版本的自动检测和支持,进行自动化升级和安装,使得这款技术的部署和使用更加便捷和简单。同时,新版的Linux Vepa还增加了对多种虚拟化管理系统的支持,包括OpenStack、VMware和KVM等,为虚拟化管理带来了更加广泛的可能性。

四、Linux Vepa升级对网络虚拟化技术的促进

作为一种网络虚拟化技术,Linux Vepa在本次升级中带来了空前的性能和易用性提升,拓展了其在各个领域的应用范围。在未来,在云计算、大数据和等行业中,网络虚拟化技术将逐渐成为发展的核心,而Linux Vepa的升级必将推动虚拟化网络技术的更进一步发展。

综上所述,随着Linux Vepa的升级,网络虚拟化技术将得到更为强大的支持和更加便捷的操作,为企业和数据中心带来更加灵活、安全和高效的网络管理。相信在未来的发展中,该技术将继续成为网络虚拟化领域的重要代表之一。

相关问题拓展阅读:

Linux上的物理网卡与虚拟网络设备

通过 ip link add 可以创建多种类型的虚拟网络设备,在 man ip link 中可以得知有以下类型的device:

Virtual Ethernet Port Aggregator。它是HP在虚拟化支持领域对抗Cisco的VN-Tag的技术。

解决了虚拟机之间网络通信的问题,特别是位于同一个宿主机内的虚拟机之间的网络通信问题。

VN-Tag在标准的协议头中增加了一个全新的字段,VEPA则是通过修改网卡驱动和交换机,通过发夹弯技术回注报文。

TUN是Linux系统里的虚拟网络设备,它的原理和使用在 Kernel Doc 和 Wiki 做了比较清楚的说明。

TUN设备模拟网络层设备(network layer),处理三层报文,IP报文等,用于将报文注入到网络协议栈。

应用程序(app)可以从物理网卡上读写报文,经过处理后通过TUN回送,或者从TUN读取报文处理后经物理网卡送出。

创建:

创建之后,使用 ip addr 就会看见一个名为”tun-default”的虚拟网卡

可以对tun-default设置IP:

使用open/write等文件操作函数从fd中进行读取操作,就是在收取报文,向fd中写入数据,就是在发送报文。

TAP是Linux系统里的虚拟网络设备,它的原理和使用在 Kernel Doc 和 Wiki 做了比较清楚的说明。

不同于TUN的是,TAP设备模拟链路层设备(link layer),处理二层报文,以太网帧等。

TAP设备的创建过程和TUN类似,在ioctl设置的时候,将类型设置为IFF_TAP即可。

TAP设备与TUN设备的区别在于:

有时我们可能需要一块物理网卡绑定多个 IP 以及多个 MAC 地址,虽然绑定多个 IP 很容易,但是这些 IP 会共享物理网卡的 MAC 地址,可能无迹蠢颂法满足我们的设计需求,所以有了 MACVLAN 设备,其工作方式如下:

MACVLAN 会根据收到包的目的 MAC 地址判断这个包需要交给哪个虚拟网卡。单独使用 MACVLAN 好像毫无意义,但是配合之前介绍的 network namespace 使用,我们可以构建这样的网络:

采摘

创建一个基于eth0的名为macv1的macvlan网卡:

macvlan支持三种模式,bridge、vepa、private,在创建的时候设置“mode XXX”:

bridge模式,macvlan网卡和物理网卡直接可以互通,类似于接入到同一个bridge。

vepa模式下,两个macvlan网卡直接不能直接通信,必须通过外部的支持“发夹弯”交换机才能通信。

private模式下,macvlan发出的广播包(arp等)被丢弃,即使接入了支持“发夹弯”的交换机也不能发现其它macvlan网卡,除非手动设置mac。

MACVTAP 是对 MACVLAN的改进,把 MACVLAN 与 TAP 设备的特点综合一下,使用 MACVLAN 的方式收发数据包,但是收到的包不交给 network stack 处理,而是生成一个 /姿郑dev/tapX 文件,交给这个文件:

由于 MACVLAN 是工作在 MAC 层的,所以 MACVTAP 也只能工档凳作在 MAC 层,不会有 MACVTUN 这样的设备。

ipvlan和macvlan的区别在于它在ip层进行流量分离而不是基于mac地址,同属于一块宿主以太网卡的所有ipvlan虚拟网卡的mac地址都是一样的。

veth设备是成对创建的:

创建之后,执行 ip link 就可以看到新创建的veth设备:

注意veth设备前面的ID, 58: 和 59: ,一对veth设备的ID是相差1的,并且系统内全局唯一。可以通过ID找到一个veth设备的对端。

veth设备理解

如何在linux中安装ixgbe驱动

Intel的10G网卡(比如,82598、 82599、 x540)由ixgbe驱动支持。现代的Linux发行版已经带有了ixgbe驱动,通过可加载模块的方式使用。然而,有些情况你希望在你机器上的自己编译安装ixgbe驱动,比如,你想要体验ixbge驱动的最新特性时。同样,内核默认自带的ixgbe驱动中的一个问题是不允许你自定义驱动的参数。如果你想要一个完全定制的ixgbe驱动(比如 RSS、多队列、中断阈值等等),你需要手动从源码编译ixgbe驱动。

这里是如何在Ubuntu、Debian或者它们的衍生版中下载安装ixgbe驱动的教程。

之一步: 安装前提

安装之前,需要安装匹配的内核头文件和开发工具包。

$ sudo apt-get install linux-headers-$(uname -r)

$ sudo apt-get install gcc make

第二步: 编译Ixgbe驱动

从最新的ixgbe驱动中下载源码。

?

$ wget

如下编译ixgbe驱动。

?

$ tar xvfvz ixgbe-3.23.2.tar.gz

$ cd ixgbe-3.23.2/src

$ make

第三步: 检查Ixgbe驱动

编译之后,你会看到在ixgbe-3.23.2/src目录下创建了ixgbe.ko。这就是会加载到内核之中的ixgbe驱动。

用modinfo命令检查内核模块的信息。注意你需要指定模块文件的绝对路径(比如 ./ixgbe.ko 或者 /home/xmodulo/ixgbe/ixgbe-3.23.2/src/ixgbe.ko)。输出中会显示ixgbe内核的版本。

?

$ modinfo ./ixgbe.ko

?

filename: /home/xmodulo/ixgbe/ixgbe-3.23.2/src/ixgbe.ko

version: 3.23.2

license: GPL

description: Intel(R) 10 Gigabit PCI Express Network Driver

author: Intel Corporation,

srcversion: 2ADA5E537923E983FA9DAE2

alias: pci:vdsv*sd*bc*sc*i*

alias: pci:vdsv*sd*bc*sc*i*

alias: pci:vdAsv*sd*bc*sc*i*

alias: pci:vdsv*sd*bc*sc*i*

alias: pci:vdFsv*sd*bc*sc*i*

alias: pci:vdDsv*sd*bc*sc*i*

alias: pci:vdsv*sd*bc*sc*i*

alias: pci:vd000010F8sv*sd*bc*sc*i*

alias: pci:vdCsv*sd*bc*sc*i*

alias: pci:vdsv*sd*bc*sc*i*

alias: pci:vdAsv*sd*bc*sc*i*

alias: pci:vd000010F9sv*sd*bc*sc*i*

alias: pci:vdsv*sd*bc*sc*i*

alias: pci:vdsv*sd*bc*sc*i*

alias: pci:vd000010FBsv*sd*bc*sc*i*

alias: pci:vdsv*sd*bc*sc*i*

alias: pci:vd000010FCsv*sd*bc*sc*i*

alias: pci:vd000010F7sv*sd*bc*sc*i*

alias: pci:vdsv*sd*bc*sc*i*

alias: pci:vd000010DBsv*sd*bc*sc*i*

alias: pci:vd000010F4sv*sd*bc*sc*i*

alias: pci:vd000010E1sv*sd*bc*sc*i*

alias: pci:vd000010F1sv*sd*bc*sc*i*

alias: pci:vd000010ECsv*sd*bc*sc*i*

alias: pci:vd000010DDsv*sd*bc*sc*i*

alias: pci:vdBsv*sd*bc*sc*i*

alias: pci:vd000010C8sv*sd*bc*sc*i*

alias: pci:vd000010C7sv*sd*bc*sc*i*

alias: pci:vd000010C6sv*sd*bc*sc*i*

alias: pci:vd000010B6sv*sd*bc*sc*i*

depends: ptp,dca

vermagic: 3.11.0-19-generic P mod_unload modversions

parm: InterruptType:Change Interrupt Mode (0=Legacy, 1=MSI, 2=MSI-X), default IntMode (deprecated) (array of int)

parm: IntMode:Change Interrupt Mode (0=Legacy, 1=MSI, 2=MSI-X), default 2 (array of int)

parm: MQ:Disable or enable Multiple Queues, default 1 (array of int)

parm: DCA:Disable or enable Direct Cache Access, 0=disabled, 1=descriptor only, 2=descriptor and data (array of int)

parm: RSS:Number of Receive-Side Scaling Descriptor Queues, default 0=number of cpus (array of int)

parm: VMDQ:Number of Virtual Machine Device Queues: 0/1 = disable, 2-16 enable (default=8) (array of int)

parm: max_vfs:Number of Virtual Functions: 0 = disable (default), 1-63 = enable this many VFs (array of int)

parm: VEPA:VEPA Bridge Mode: 0 = VEB (default), 1 = VEPA (array of int)

parm: InterruptThrottleRate:Maximum interrupts per second, per vector, (0,1,), default 1 (array of int)

parm: LLIPort:Low Latency Interrupt TCP Port () (array of int)

parm: LLIPush:Low Latency Interrupt on TCP Push flag (0,1) (array of int)

parm: LLISize:Low Latency Interrupt on Packet Size (0-1500) (array of int)

parm: LLIEType:Low Latency Interrupt Ethernet Protocol Type (array of int)

parm: LLIVLANP:Low Latency Interrupt on VLAN priority threshold (array of int)

parm: FdirPballoc:Flow Director packet buffer allocation level:

1 = 8k hash filters or 2k perfect filters

2 = 16k hash filters or 4k perfect filters

3 = 32k hash filters or 8k perfect filters (array of int)

parm: AtrSampleRate:Software ATR Tx packet sample rate (array of int)

parm: FCoE:Disable or enable FCoE Offload, default 1 (array of int)

parm: LRO:Large Receive Offload (0,1), default 1 = on (array of int)

parm: allow_unsupported_sfp:Allow unsupported and untested SFP+ modules onbased adapters, default 0 = Disable (array of int)

第四步: 测试Ixgbe驱动

在测试新的模块之前,如果你内核中已存在旧版本ixgbe模块的话你需要先移除它。

?

$ sudo rmmod ixgbe

接着使用inod命令插入新编译的ixgbe模块。确保指定一个模块的绝对路径。

?

$ sudo inod ./ixgbe.ko

如果上面的命令成功运行,就不会显示任何的信息。

如果你需要,你可以尝试加入额外的参数。比如,设置RSS的队列数量为16:

?

$ sudo inod ./ixgbe.ko RSS=16

检查/var/log/kern.log来查看ixgbe驱动是否成功激活。查看日志中的“Intel(R) 10 Gigabit PCI Express Network Driver”。ixgbe的版本信息应该和之前的modinfo的显示应该相同。

Sep 18 14:48:52 spongebob kernel: Intel(R) 10 Gigabit PCI Express Network Driver – version 3.22.3

第五步: 安装Ixgbe驱动

一旦你验证新的ixgbe驱动可以成功加载,最后一步是在你的系统中安装驱动。

?

$ sudo make install

ixgbe.ko 会安装在/lib/modules//kernel/drivers/net/ethernet/intel/ixgbe 下。

从这一步起,你可以用下面的modprobe命令加载ixgbe驱动了。注意你不必再指定绝对路径。

?

$ sudo modprobe ixgbe

关于linux vepa的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Linux Vepa:网络虚拟化技术再升级 (linux vepa)