1、virtio框架包括哪些?

(1)virtio:面向guest驱动的API接口,它在概念上将前端驱动附加到后端驱动,具体实现位于driver/virtio/virtio.c

(2)Transport:利用virtio_ring 基础架构,实现对前端驱动的具体功能的配置(网络设备需要两个队列,块设备需要1个对垒),负责virtio和后端驱动进而到Hypervisor的交互(数据的接收和发送),具体实现位于driver/virtio/virtio_ring.c

(3)前端驱动移植部分:分散于各个前端驱动中,比方说:driver/net/virtio_net.c、driver/block/virtio_blk.c、driver/char/virtio_console.c等等

参考资料:Virtio:针对Linux的I/O虚拟化框架

2、为什么目前在Cubietruck上vhost不起作用?

可能原因1:

参考文章:SUSE 部署KVM网络虚拟化 中提到,要使用vhost功能,需要在guest中配置CONFIG_PCI_MSI、在Host中配置CONFIG_VHOST_NET等,然而,在ARM开发板上使用的是ARM_AMBA总线结构,所以KVM
on ARM目前还不支持vhost功能。

可能原因2:

目前我的实验是:在host的内核中编译进了vhost-net模块,因为在host启动后,可以找到设备/dev/vhost-net;然后在启动客户机的时候,也在网络参数里使用了“--network mode=tap,trans=mmio,vhost=1” ;然后使用public bridge模式,guest仍然无法上网;这里的原因可能是,由于vhost=1起作用了,lkvm用户空间找不到原来的后端驱动

结论:

(1)我通过邮件联系到Marc Zyngier(此人负责KVM到ARMv8(64-bit) 的移植),确认目前ARM上还不支持vhost-net

(2)通过通过virtio和PCI直通技术优化KVM虚拟网络这篇文章,了解到如果虚拟机是Linux,则默认使用了virtio driver

(3)从下面这个网络请求路线图看出,性能瓶颈最可能出现在LKVM工具对后端网卡驱动的模拟上:

网络请求调用路线图:

客户端用户空间——> 客户端内核网络协议栈——>客户端virtio driver——> LKVM模拟的后端驱动(Host用户空间)——>Host内核网络协议栈——>真实网卡驱动——>网卡

参考资料:

《ARM体系以及ARM总线分析》

官网上的指导(不过是X86结构)

3、笑看全世界:使用virtio-net 这篇文章中给了两个优化虚拟机网络性能的思路:(1)检查客户机虚拟网卡确实是用了virtio模型;(2)优化两个参数TSO和GSO

处理:

(1)需要使用ethtool工具:应用层可以使用ethtool -K eth0 tso off|on命令对支持TSO特性的网络设备进行TSO功能的关闭和启用。

(2)

TSO参数:TSO是通过网络设备进行TCP段的分割,从而来提高网络性能的一种技术

GSO参数:从前面有关TSO的论述可以看出,TSO只是针对TCP协议的,使TCP协议在硬件上得到了有力的支持。事实上,这种概念也可以应用于其他的传输层协议,如TCPv6,UDP,甚至DCCP等,这就是GSO(Generic Segmentation Offload)。

参考资料:《Linux内核源码剖析:TCP/IP实现》

4、Multiqueue virtio-net:an approach enables packet sending/receiving processing to scale with the number of available vcpus of guest. 在参数中使用-mq=4,表示用4个队列

提高虚拟机网络性能。参考文章:http://www.linux-kvm.org/page/Multiqueue

5、Guest的虚拟网卡工作模式

Tap mode:Specifies a bridged or routed networking,在tap-mode下,制定用bridge或者routed网络;QEMU(LKVM) creates a network bridge by connecting the host TAP network device to a specified VLAN of VM Guest. Its network interface is then visible to the rest of the network。

桥接模式分为:public bridge(主机的网卡添加添加到bridge上,每个客户机有自己的IP) 和 private bridge(bridge拥有私有IP地址,虚拟机通过NAT方式连通外网,虚拟机没有自己的IP)

User mode:效果是,guest可以访问外面的网络,但是不允许向内的网络通道,也就是说guest机器在网络上不可见。No administrator privileges are required in this networking mode. 当如下使用场景时适合用User-mode:在guest-VM上执行网络启动的任务,而网络文件系统假设在host主机上。

KVM on CubieTruck 原理以及网络性能相关思考的更多相关文章

  1. 不错网络性能相关的文章-BaiduRPC

    http://wiki.baidu.com/display/RPC/Threading+Overview#ThreadingOverview-单线程reactor Threading Overview ...

  2. KVM总结-KVM性能优化之网络性能优化

    前面已经介绍了KVM CPU优化(http://blog.csdn.net/dylloveyou/article/details/71169463).内存优化(http://blog.csdn.net ...

  3. KVM网络性能调优

    首先,我给大家看一张图,这张图是数据包从虚拟机开始然后最后到物理网卡的过程. 我们分析下这张图,虚拟机有数据包肯定是先走虚拟机自身的那张虚拟网卡,然后发到中间的虚拟化层,再然后是传到宿主机里的内核网桥 ...

  4. 常见的GAN网络的相关原理及推导

    常见的GAN网络的相关原理及推导 在上一篇中我们给大家介绍了GAN的相关原理和推导,GAN是VAE的后一半,再加上一个鉴别网络.这样而导致了完全不同的训练方式. GAN,生成对抗网络,主要有两部分构成 ...

  5. VNF网络性能提升解决方案及实践

    VNF网络性能提升解决方案及实践 2016年7月 作者:    王智民 贡献者:     创建时间:    2016-7-20 稳定程度:    初稿 修改历史 版本 日期 修订人 说明 1.0 20 ...

  6. 常用CSS优化总结——网络性能与语法性能建议

    在前端面试中最常见的问题就是页面优化和缓存(貌似也是页面优化),被问了几次后心虚的不行,平然平时多少会用到一些,但突然问我,很难把自己知道的都说出来.页面优化明显不是一两句能够说完的,这两天总结了一下 ...

  7. Android常见崩溃或闪退的问题描述及原因总结、及与性能相关的模块——持续更新

    1.nullpointer——就是使用一个对象的时候还没有对其进行初始化导致该问题 一般在何种情况下容易出现呢? (1)父窗口+子窗口同时出现的,父窗口因为某种原因消掉了,子窗口还在,操作子窗口找不到 ...

  8. Linux 下网络性能优化方法简析

    概述 对于网络的行为,可以简单划分为 3 条路径:1) 发送路径,2) 转发路径,3) 接收路径,而网络性能的优化则可基于这 3 条路径来考虑.由于数据包的转发一般是具备路由功能的设备所关注,在本文中 ...

  9. (转)常用CSS优化总结——网络性能与语法性能建议

    原文地址:http://www.cnblogs.com/dolphinX/p/3508657.html 在前端面试中最常见的问题就是页面优化和缓存(貌似也是页面优化),被问了几次后心虚的不行,平然平时 ...

随机推荐

  1. mysql索引本质

    一.索引帮助mysql高效获取数据排好序的数据结构. 二.索引存储位置:磁盘文件. 三.索引结构:二叉树.红黑树.hash.BTree.B+Tree .索引结构为了更快找到目标数据. 四.数据结构 4 ...

  2. (转)Navicat_12安装与破解,亲测可用!!!

    原文:http://www.yq1012.com/jichu/4634.html https://www.52pojie.cn/thread-867986-1-1.html 快速方式:CSDN下载安装 ...

  3. BIO,NIO,AIO到NETTY

    NIO 近期接触了几个产品都触及NIO,要么应用,要么改造项目,听多了也有些了解,但仍然不能真正理解,工期比较赶,还是要潜心下来看看. NIO是什么呢,应该是NOT-BLOCKING IO的意思,不阻 ...

  4. python工程设置工具(pipenv)

    原始安装 pip工具 --- 包安装工具, 可以从Python包索引hub上安装,也可以使用自定义的hub. 命令: pip install xxx 缺点: 1.命令方式, 一次只能安装一个包, 对于 ...

  5. JavaScript 图片与Base64数据互相转换脚本

    JavaScript 图片与Base64数据互相转换脚本 注: 转换过程中注意跨域问题.测试页是否支持相关标签创建.dom结构. 方法一:非Html 5使用FileReader 使用XMLHttpRe ...

  6. 如何利用maven将本地jar包引入到工程之中

    1.在个人开发模式下,可以将jar包放入项目的lib目录中,在pom.xml中做如下配置: <dependencies> <dependency> <groupId> ...

  7. 创建Observer

    观察者 观察者作用就是监听事件, 然后对这个事件做出响应, 或者说任何响应时间的行为都是观察者 1. 在subscribe()方法中创建监听者 创建观察者最直接的方法就是在Observable的sub ...

  8. react一些问题

    一.死循环 1.问题描述 function handleClick() { this.setState({count: ++this.state.count}); console.log(" ...

  9. ejs不能读取js变量??????

    一.问题描述 用express搭了一个nodejs服务端,为了测试接口数据是否能够正常输出,用ejs作为模版引擎的html文件写js发请求. 1.请求正常,能在network看到,但是没有输出cons ...

  10. IBM X3650 M4 安装 Windows Server 2008 R2

    1 准备好  Windows Server 2008 R2 安装用的U盘 2 采用PowerISO制作启动U盘: 或者用Rufus做启动U盘. 3 接上启动U盘 4 设置Bios启动模式为 UEFI ...