Spice Usbredirect 性能改进

虚拟桌面,相对于物理桌面便于管理部署以及安全可靠的优点,已经应用于教育,电力,金融等行业。其除了具备各种办公软件,网络访问,多媒体娱乐等应用良好的桌面体验外,如何较高效的访问基于USB接口的各类外设也是一个很重要的产品功能。

usbredir是一个重定向usb traffic到其他设备(如虚拟机)的协议,基于spice的虚拟桌面,正是通过usbredir实现了虚拟桌面可以访问usb外设。由于像usb 摄像头,打印机,扫描仪,移动硬盘,这样的外设都会涉及大量的数据传输拷贝,如何改善提高现有的性能呢?

一:减少数据拷贝

        通过分析,在设备终端这边,传输usb数据到服务端,消息的封装如下图所示,一个usb数据,需要经过两次数据拷贝,分别加上usbredir消息头和spice client消息头。

          

        参考操作系统网络协议栈的实现,如udp发送数据时,分配内存时,会预留udp+ip+ethernet包头空间,在udp,ip,ethernet协议层面,用不着拷贝数据,协议分析后,更新各自的包头即可。 所以,在机制上,也需要预留usbredir+spice的消息头空间,分别在usbredir 消息出队列,spice marshaller阶段,只更新各种消息头,不拷贝数据。


二:多线程,并发

        在多核CPU环境下,有效的分配协调资源,多线程并发,提高处理能力。
              

        如上图所示,三个线程,libusb负责从外设读写数据,usbredir负责处理转发消息,spice usb chanel负责与服务端通信,彼此互斥共享资源。


三:数据压缩

        对于usb摄像头这类的设备,数据量就会多到导致网络拥塞,有必要对数据进行压缩,usbredir这个线程负责处理压缩。即要减少网络传输量,又要确保传输实时性,CPU性能必须得好。

猜你喜欢

转载自blog.csdn.net/somyjun/article/details/25390113