On Wed, 29 Nov 2017 18:50:19 +0000 "Dr. David Alan Gilbert (git)" <dgilb...@redhat.com> wrote:
> From: "Dr. David Alan Gilbert" <dgilb...@redhat.com> > > Hi, > This is an experimental set that reworks the way the vhost > code handles changes in physical address space layout that > came from a discussion with Igor. Thanks for looking into it. > Instead of updating and trying to merge sections of address > space on each add/remove callback, we wait until the commit phase > and go through and rebuild a list by walking the Flatview of > memory and end up producing an ordered list. > We compare the list to the old list to trigger updates. > > Note, only very lightly tested so far, I'm just trying to see if it's > the right shape. > > Igor, is this what you were intending? I was thinking about a little less intrusive approach where vhost_region_add/del are modified to maintain sorted by GPA array of mem_sections, vhost_dev::mem is dropped altogether and vhost_memory_region array is build/used/freed on every vhost_commit(). Maintaining sorted array should roughly cost us O(2 log n) if binary search is used. However I like your idea with iterator even more as it have potential to make it even faster O(n) if we get rid of quadratic and relatively complex vhost_update_compare_list(). Pls, see comments on individual patches. > Dave > > Dr. David Alan Gilbert (7): > memory: address_space_iterate > vhost: Move log_dirty check > vhost: New memory update functions > vhost: update_mem_cb implementation > vhost: Compare new and old memory lists > vhost: Copy updated region data into device state > vhost: Remove vhost_set_memory and children > > hw/virtio/trace-events | 8 + > hw/virtio/vhost.c | 424 > ++++++++++++++++++++++--------------------------- > include/exec/memory.h | 23 +++ > memory.c | 22 +++ > 4 files changed, 241 insertions(+), 236 deletions(-) >