* Paolo Bonzini (pbonz...@redhat.com) wrote: > On 17/01/20 14:40, Michael S. Tsirkin wrote: > > We don't really need v2 just to add a field. Compatibility is maintained > > using feature bits. Adding that is a subject for another patch. > > But I'm not sure I understand why does remote need to know about alignment. > > This patch seems to handle it locally ... > > Because the remote vhost here will not be able to use the synic regions. > If it did, it would have the same overlap problem as vhost-kernel. > > The alignment is needed because, even if you are mapping only [768k,1M) > of a 2M hugepage, you need to mmap [0,2M). You can then discard the > rest, but IIUC if you only mmap [768k,1M) then the kernel will fail the > mmap.
The vhost-user problem is worse than that. Lets ignore the synic regions for a minute; imagine a normal PC, 0-512k ish, and a 512k-1GB map; the client side can do the alignment to allow an mmap to work for each of those two mappings, you then end up with two mmap's on the client, both aligned at 0, each covering part of the same range. If the client is careful in normal use it can make sure it's OK, but you do end up with two mappings which is odd. Once you add userfault for psotcopy, having those two mappings of the same range gets even more problematic when we wait for one of the pages to become available. The other problem is that there's a limited number of slots for mappings in the vhost-user protocol; and they easily get filled up if you break up the memory ranges. Doing the aggregation on the qemu side keeps your slot usage down and also removes the problem of the double mappings. The client can't easily resolve the double mapping alignment because it can't tell if the two fd's it's been passed actually refer to the same backing file; so it can't aggregate (from memory). Dave > Paolo > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK