• P
    memory: Introduce memory listener hook log_clear() · 077874e0
    Peter Xu 提交于
    Introduce a new memory region listener hook log_clear() to allow the
    listeners to hook onto the points where the dirty bitmap is cleared by
    the bitmap users.
    
    Previously log_sync() contains two operations:
    
      - dirty bitmap collection, and,
      - dirty bitmap clear on remote site.
    
    Let's take KVM as example - log_sync() for KVM will first copy the
    kernel dirty bitmap to userspace, and at the same time we'll clear the
    dirty bitmap there along with re-protecting all the guest pages again.
    
    We add this new log_clear() interface only to split the old log_sync()
    into two separated procedures:
    
      - use log_sync() to collect the collection only, and,
      - use log_clear() to clear the remote dirty bitmap.
    
    With the new interface, the memory listener users will still be able
    to decide how to implement the log synchronization procedure, e.g.,
    they can still only provide log_sync() method only and put all the two
    procedures within log_sync() (that's how the old KVM works before
    KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2 is introduced).  However with this
    new interface the memory listener users will start to have a chance to
    postpone the log clear operation explicitly if the module supports.
    That can really benefit users like KVM at least for host kernels that
    support KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2.
    
    There are three places that can clear dirty bits in any one of the
    dirty bitmap in the ram_list.dirty_memory[3] array:
    
            cpu_physical_memory_snapshot_and_clear_dirty
            cpu_physical_memory_test_and_clear_dirty
            cpu_physical_memory_sync_dirty_bitmap
    
    Currently we hook directly into each of the functions to notify about
    the log_clear().
    Reviewed-by: NDr. David Alan Gilbert <dgilbert@redhat.com>
    Reviewed-by: NJuan Quintela <quintela@redhat.com>
    Signed-off-by: NPeter Xu <peterx@redhat.com>
    Message-Id: <20190603065056.25211-7-peterx@redhat.com>
    Signed-off-by: NJuan Quintela <quintela@redhat.com>
    077874e0
memory.c 99.6 KB