vhost and vhost-user

virtio是一种我们耳熟能详的IO半虚拟化方案,它是guest和host所约定的一种协议用来减少guest IO时的VM-Exit(guest和host的上下文切换)并且使guest和host能并行处理IO来提高throughput和减少latency。

通常来说,virtio的数据都会在guest和hypervisor 间转发, 这就导致了在数据交换的时候有多次的上文切换。例如guest在发包到外部网络的情况下,首先guest需要切换到host kernel,然后host kernel会切换到hyperisor来处理guest的请求,hypervisor通过系统调用将数据包发送到外部网络后切换回host kernel,然后再切换回guest。这样漫长的路径无疑会带来性能上的损失。vhost就在这样的背景下产生了。它是位于host kernel的一个模块,用于和guest直接通信,所以数据交换就在guest和host kernel间进行了。

openvswitch和与之类似的SDN的解决方案可以用来更好地管理云计算资源,在这种情况下,guest就需要和中心的vswitch(它是host上的一个进程)进行数据交换,此时vhost就无能为力了。vhost-user在这种情况下应运而生,它和vhost的设计非常相似,它允许guest和vswitch间直接数据转发。

这个slides是我在team内部sharing的一个简缩版本,用来解释virtio的vring的操作,以及vhost和vhost-user的架构。

vhost and vhost-user

2 thoughts on “vhost and vhost-user

发表评论

电子邮件地址不会被公开。

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> 

*