Re: [PATCH v4 1/5] vsock/virtio: limit the memory used per-socket
From: Stefano Garzarella <sgarzare@redhat.com>
Date: 2019-09-02 08:55:08
Also in:
kvm, lkml
From: Stefano Garzarella <sgarzare@redhat.com>
Date: 2019-09-02 08:55:08
Also in:
kvm, lkml
On Mon, Sep 02, 2019 at 09:39:12AM +0100, Stefan Hajnoczi wrote:
On Sun, Sep 01, 2019 at 02:56:44AM -0400, Michael S. Tsirkin wrote:quoted
OK let me try to clarify. The idea is this: Let's say we queue a buffer of 4K, and we copy if len < 128 bytes. This means that in the worst case (128 byte packets), each byte of credit in the socket uses up 4K/128 = 16 bytes of kernel memory. In fact we need to also account for the virtio_vsock_pkt since I think it's kept around until userspace consumes it. Thus given X buf alloc allowed in the socket, we should publish X/16 credits to the other side. This will ensure the other side does not send more than X/16 bytes for a given socket and thus we won't need to allocate more than X bytes to hold the data. We can play with the copy break value to tweak this.
Thanks Michael, now it is perfectly clear. It seems an excellent solution and easy to implement. I'll work on that.
This seems like a reasonable solution. Hopefully the benchmark results will come out okay too.
Yes, as Michael suggested I'll play with the copy break value to see as benchmark has affected. Thank you very much, Stefano