Improve fairness in virtio transports
This BZ 2009935 highlighted a fairness issue in the Linux kernel when virtio-vsock and vhost-vsock are used.
The driver/device is only unfair between directly managed sockets (sockets that communicate with the same VM). There is no interference with sockets of other VMs and therefore managed by other drivers/devices.
Currently in both transports there is a single worker sending packets to the other peer and a single list where sockets enqueue packets to send.
If a socket queues a lot of small packets, it may delay other sockets a lot. The credit mechanism does not prevent this problem.
One solution might be to have a list of ready packets for each socket and a single list of ready sockets that the worker scrolls through, sending a maximum number of packets before moving on to the next ready socket. Unfortunately an application could create a lot of sockets to get around this mechanism, so it's worth taking a closer look at how TCP handles this problem. Maybe using skbuff also in vsock and reusing the same code.