KVM on CubieTruck 原理以及网络性能相关思考
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等等
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总线分析》
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 原理以及网络性能相关思考的更多相关文章
- 不错网络性能相关的文章-BaiduRPC
http://wiki.baidu.com/display/RPC/Threading+Overview#ThreadingOverview-单线程reactor Threading Overview ...
- KVM总结-KVM性能优化之网络性能优化
前面已经介绍了KVM CPU优化(http://blog.csdn.net/dylloveyou/article/details/71169463).内存优化(http://blog.csdn.net ...
- KVM网络性能调优
首先,我给大家看一张图,这张图是数据包从虚拟机开始然后最后到物理网卡的过程. 我们分析下这张图,虚拟机有数据包肯定是先走虚拟机自身的那张虚拟网卡,然后发到中间的虚拟化层,再然后是传到宿主机里的内核网桥 ...
- 常见的GAN网络的相关原理及推导
常见的GAN网络的相关原理及推导 在上一篇中我们给大家介绍了GAN的相关原理和推导,GAN是VAE的后一半,再加上一个鉴别网络.这样而导致了完全不同的训练方式. GAN,生成对抗网络,主要有两部分构成 ...
- VNF网络性能提升解决方案及实践
VNF网络性能提升解决方案及实践 2016年7月 作者: 王智民 贡献者: 创建时间: 2016-7-20 稳定程度: 初稿 修改历史 版本 日期 修订人 说明 1.0 20 ...
- 常用CSS优化总结——网络性能与语法性能建议
在前端面试中最常见的问题就是页面优化和缓存(貌似也是页面优化),被问了几次后心虚的不行,平然平时多少会用到一些,但突然问我,很难把自己知道的都说出来.页面优化明显不是一两句能够说完的,这两天总结了一下 ...
- Android常见崩溃或闪退的问题描述及原因总结、及与性能相关的模块——持续更新
1.nullpointer——就是使用一个对象的时候还没有对其进行初始化导致该问题 一般在何种情况下容易出现呢? (1)父窗口+子窗口同时出现的,父窗口因为某种原因消掉了,子窗口还在,操作子窗口找不到 ...
- Linux 下网络性能优化方法简析
概述 对于网络的行为,可以简单划分为 3 条路径:1) 发送路径,2) 转发路径,3) 接收路径,而网络性能的优化则可基于这 3 条路径来考虑.由于数据包的转发一般是具备路由功能的设备所关注,在本文中 ...
- (转)常用CSS优化总结——网络性能与语法性能建议
原文地址:http://www.cnblogs.com/dolphinX/p/3508657.html 在前端面试中最常见的问题就是页面优化和缓存(貌似也是页面优化),被问了几次后心虚的不行,平然平时 ...
随机推荐
- 019 spring social
1.原理 2. 3. 4.
- Java基础 awt Font 四种字体样式
JDK :OpenJDK-11 OS :CentOS 7.6.1810 IDE :Eclipse 2019‑03 typesetting :Markdown code ...
- ELK集群安装配置X-Pack
目前使用的版本不是最新的-6.2.4,6.3以后的版本应该就是集成的了 官方资料: 在线安装步骤:https://www.elastic.co/cn/downloads/x-pack 离线安装步骤:h ...
- 用GEOquery从GEO数据库下载数据--转载
https://www.plob.org/article/9969.html Gene Expression Omnibus database (GEO)是由NCBI负责维护的一个数据库,设计初衷是为 ...
- 关于怎么提取m3u8地址
摘自: https://blog.51cto.com/4373601/1920758 很长时间没有写博客了,这一段时间比较忙,接下来的日子要坚持写博客了,后期抽空会把这一年多的测试心得补上来,写博客其 ...
- 部署TiDB集群
架构图 节点规划 120.52.146.213 Control Machine 120.52.146.214 PD1_TiDB1 120.52.146.215 PD2_TiDB2 120.52.146 ...
- 设置table表格的单元格间距两种方式
table表格里设置单元格td之间的间距,通常用cellspacing设置单元格间距,有时候该属性可能无效,或需要用其他方式时,可用其他方式实现,例如在背景是白色背景的时候,设置单元格td的borde ...
- 图片懒加载--lazyload.js的用法
这几天公司的项目已经完成的差不多了,只剩下各种优化问题.今天着重于图片加载的优化.当一个页面需要下拉很长而且又有过多的图片要加载时,就会发生很多http请求,就会拉慢网页加载速度,用户体验不友好.怎么 ...
- 简单工厂(SimpleFactory)模式
简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 简单工厂就是将多个if,else...代码 ...
- day19——包、logging日志
day19 包 文件夹下具有______init______.py文件就是一个包 方法 import 包.包.包 from 包.包.包 import 模块 需要在______init______.py ...