aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/virtio_vsock.h
diff options
context:
space:
mode:
authorStefano Garzarella <sgarzare@redhat.com>2019-07-30 17:43:30 +0200
committerDavid S. Miller <davem@davemloft.net>2019-07-30 15:00:00 -0700
commit473c7391ce731adb482c03e420964676ed8b494d (patch)
treea17fc41db539425ea78234bf0ddbebceef11f4cd /include/linux/virtio_vsock.h
parentnet: Remove dev_err() usage after platform_get_irq() (diff)
downloadlinux-dev-473c7391ce731adb482c03e420964676ed8b494d.tar.xz
linux-dev-473c7391ce731adb482c03e420964676ed8b494d.zip
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 <sgarzare@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/virtio_vsock.h')
-rw-r--r--include/linux/virtio_vsock.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/virtio_vsock.h b/include/linux/virtio_vsock.h
index e223e2632edd..7d973903f52e 100644
--- a/include/linux/virtio_vsock.h
+++ b/include/linux/virtio_vsock.h
@@ -52,6 +52,7 @@ struct virtio_vsock_pkt {
/* socket refcnt not held, only use for cancellation */
struct vsock_sock *vsk;
void *buf;
+ u32 buf_len;
u32 len;
u32 off;
bool reply;