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主机上。

最新文章

  1. HashSet 浅析示例
  2. Unity5 AssetBundle
  3. C#关于word文档的书签替换操作
  4. LeakCanary中英文文档+使用例子
  5. spring + spring mvc + mybatis + react + reflux + webpack Web工程例子
  6. linux shell 获取进程pid
  7. Task中的异常处理
  8. 如何将ToolBar 样式设置Title文字水平居中
  9. C# 分支语句
  10. ES6,ES2105核心功能一览,js新特性详解
  11. white的配置使用
  12. JQuery基础教程:事件(下)
  13. Java多线程之 ThreadLocal
  14. idea15 如何设置代码不自动折叠
  15. (转)重置Mac OS X管理员密码
  16. ftp 解决不能上传问题
  17. Undefined symbols for architecture xxx
  18. Java进阶篇设计模式之四 -----适配器模式和桥接模式
  19. LoadRunner遇到的错误及解决方法
  20. [转][C#]文件流读取

热门文章

  1. 014 Mui
  2. Error-Javascript:错误:页面文档类型(DOCTYPE)未声明!
  3. (转)Ngx_Lua使用分享
  4. 复制centos 后不能上网,处理办法
  5. Egret《决战沙城》框架学习
  6. C++中的结构体所占内存空间总结
  7. mysql8.0 grant 创建账号及权限记录
  8. ThinkPHP3(添加,修改,删除)
  9. js实现html表格<td>标签中带换行的文本显示出换行效果
  10. SQL Server ---- 创建好的表修改不了字段