vhost net 的目的是为了避免在host kerne上做一次qemu的调度,提升性能。
xmit: 让vm的数据报在 host的内核就把报文发送出去。
rcv:
核心数据结构
vhost_poll
是vhost里最关键的一个数据结构。
1 | 27 /* Pol> > file (eventfd or socket) */ |
- table:每次负责把wait域放倒wqh里。vhost_net_open将它的执行函数vhost_poll_func
- wqh:它的wqh被初始化指向一个eventfd的ctx,
- wait:每次把wait放倒这个wqh链表里,当guest vm的发送报文时,wait被摘下,
并执行其对应的func,vhost_net_open将该func被初始化为vhost_poll_wakeup。
vhost_poll_wakeup负责将work放入对应vhost_dev下的work_list链表中。 - work: 每个vhost_dev有一个thread,负责从work_list链表里的摘除work节点,
并执行work节点对应的fn. fn是真正干活的的函数。
对于rx vhost_virqueue, vhost_net_open将该fn初始化为handle_rx_kick
对于tx vhost_virqueue, vhost_net_open将该fn初始化为handle_tx_kick
对于rx vhost_virqueue, vhost_net_open将该fn初始化为
handle_rx_kick. - mask:是需要监听的eventfd的事件集合
- dev: 该vhost_poll对应的vhost_dev;