mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
vsock/virtio: limit the memory used per-socket
Since virtio-vsock was introduced, the buffers filled by the host and pushed to the guest using the vring, are directly queued in a per-socket list. These buffers are preallocated by the guest with a fixed size (4 KB). The maximum amount of memory used by each socket should be controlled by the credit mechanism. The default credit available per-socket is 256 KB, but if we use only 1 byte per packet, the guest can queue up to 262144 of 4 KB buffers, using up to 1 GB of memory per-socket. In addition, the guest will continue to fill the vring with new 4 KB free buffers to avoid starvation of other sockets. This patch mitigates this issue copying the payload of small packets (< 128 bytes) into the buffer of last packet queued, in order to avoid wasting memory. Signed-off-by: Stefano Garzarella <[email protected]> Reviewed-by: Stefan Hajnoczi <[email protected]> Acked-by: Michael S. Tsirkin <[email protected]> Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
parent
d1a55841ab
commit
473c7391ce
4 changed files with 55 additions and 9 deletions
|
|
@ -329,6 +329,8 @@ vhost_vsock_alloc_pkt(struct vhost_virtqueue *vq,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
pkt->buf_len = pkt->len;
|
||||
|
||||
nbytes = copy_from_iter(pkt->buf, pkt->len, &iov_iter);
|
||||
if (nbytes != pkt->len) {
|
||||
vq_err(vq, "Expected %u byte payload, got %zu bytes\n",
|
||||
|
|
|
|||
Loading…
Reference in a new issue