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. 019 spring social

    1.原理 2. 3. 4.

  2. Java基础 awt Font 四种字体样式

        JDK :OpenJDK-11      OS :CentOS 7.6.1810      IDE :Eclipse 2019‑03 typesetting :Markdown   code ...

  3. ELK集群安装配置X-Pack

    目前使用的版本不是最新的-6.2.4,6.3以后的版本应该就是集成的了 官方资料: 在线安装步骤:https://www.elastic.co/cn/downloads/x-pack 离线安装步骤:h ...

  4. 用GEOquery从GEO数据库下载数据--转载

    https://www.plob.org/article/9969.html Gene Expression Omnibus database (GEO)是由NCBI负责维护的一个数据库,设计初衷是为 ...

  5. 关于怎么提取m3u8地址

    摘自: https://blog.51cto.com/4373601/1920758 很长时间没有写博客了,这一段时间比较忙,接下来的日子要坚持写博客了,后期抽空会把这一年多的测试心得补上来,写博客其 ...

  6. 部署TiDB集群

    架构图 节点规划 120.52.146.213 Control Machine 120.52.146.214 PD1_TiDB1 120.52.146.215 PD2_TiDB2 120.52.146 ...

  7. 设置table表格的单元格间距两种方式

    table表格里设置单元格td之间的间距,通常用cellspacing设置单元格间距,有时候该属性可能无效,或需要用其他方式时,可用其他方式实现,例如在背景是白色背景的时候,设置单元格td的borde ...

  8. 图片懒加载--lazyload.js的用法

    这几天公司的项目已经完成的差不多了,只剩下各种优化问题.今天着重于图片加载的优化.当一个页面需要下拉很长而且又有过多的图片要加载时,就会发生很多http请求,就会拉慢网页加载速度,用户体验不友好.怎么 ...

  9. 简单工厂(SimpleFactory)模式

    简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 简单工厂就是将多个if,else...代码 ...

  10. day19——包、logging日志

    day19 包 文件夹下具有______init______.py文件就是一个包 方法 import 包.包.包 from 包.包.包 import 模块 需要在______init______.py ...