Skip to content
Snippets Groups Projects
  1. Nov 07, 2023
  2. Nov 06, 2023
    • Maciej S. Szmigiero's avatar
      Add Hyper-V Dynamic Memory Protocol driver (hv-balloon) base · 0d9e8c0b
      Maciej S. Szmigiero authored
      
      This driver is like virtio-balloon on steroids: it allows both changing the
      guest memory allocation via ballooning and (in the next patch) inserting
      pieces of extra RAM into it on demand from a provided memory backend.
      
      The actual resizing is done via ballooning interface (for example, via
      the "balloon" HMP command).
      This includes resizing the guest past its boot size - that is, hot-adding
      additional memory in granularity limited only by the guest alignment
      requirements, as provided by the next patch.
      
      In contrast with ACPI DIMM hotplug where one can only request to unplug a
      whole DIMM stick this driver allows removing memory from guest in single
      page (4k) units via ballooning.
      
      After a VM reboot the guest is back to its original (boot) size.
      
      In the future, the guest boot memory size might be changed on reboot
      instead, taking into account the effective size that VM had before that
      reboot (much like Hyper-V does).
      
      For performance reasons, the guest-released memory is tracked in a few
      range trees, as a series of (start, count) ranges.
      Each time a new page range is inserted into such tree its neighbors are
      checked as candidates for possible merging with it.
      
      Besides performance reasons, the Dynamic Memory protocol itself uses page
      ranges as the data structure in its messages, so relevant pages need to be
      merged into such ranges anyway.
      
      One has to be careful when tracking the guest-released pages, since the
      guest can maliciously report returning pages outside its current address
      space, which later clash with the address range of newly added memory.
      Similarly, the guest can report freeing the same page twice.
      
      The above design results in much better ballooning performance than when
      using virtio-balloon with the same guest: 230 GB / minute with this driver
      versus 70 GB / minute with virtio-balloon.
      
      During a ballooning operation most of time is spent waiting for the guest
      to come up with newly freed page ranges, processing the received ranges on
      the host side (in QEMU and KVM) is nearly instantaneous.
      
      The unballoon operation is also pretty much instantaneous:
      thanks to the merging of the ballooned out page ranges 200 GB of memory can
      be returned to the guest in about 1 second.
      With virtio-balloon this operation takes about 2.5 minutes.
      
      These tests were done against a Windows Server 2019 guest running on a
      Xeon E5-2699, after dirtying the whole memory inside guest before each
      balloon operation.
      
      Using a range tree instead of a bitmap to track the removed memory also
      means that the solution scales well with the guest size: even a 1 TB range
      takes just a few bytes of such metadata.
      
      Since the required GTree operations aren't present in every Glib version
      a check for them was added to the meson build script, together with new
      "--enable-hv-balloon" and "--disable-hv-balloon" configure arguments.
      If these GTree operations are missing in the system's Glib version this
      driver will be skipped during QEMU build.
      
      An optional "status-report=on" device parameter requests memory status
      events from the guest (typically sent every second), which allow the host
      to learn both the guest memory available and the guest memory in use
      counts.
      
      Following commits will add support for their external emission as
      "HV_BALLOON_STATUS_REPORT" QMP events.
      
      The driver is named hv-balloon since the Linux kernel client driver for
      the Dynamic Memory Protocol is named as such and to follow the naming
      pattern established by the virtio-balloon driver.
      The whole protocol runs over Hyper-V VMBus.
      
      The driver was tested against Windows Server 2012 R2, Windows Server 2016
      and Windows Server 2019 guests and obeys the guest alignment requirements
      reported to the host via DM_CAPABILITIES_REPORT message.
      
      Acked-by: default avatarDavid Hildenbrand <david@redhat.com>
      Signed-off-by: default avatarMaciej S. Szmigiero <maciej.szmigiero@oracle.com>
      0d9e8c0b
  3. Jun 15, 2022
    • Jagannathan Raman's avatar
      vfio-user: build library · 55116968
      Jagannathan Raman authored
      
      add the libvfio-user library as a submodule. build it as a meson
      subproject.
      
      libvfio-user is distributed with BSD 3-Clause license and
      json-c with MIT (Expat) license
      
      Signed-off-by: default avatarElena Ufimtseva <elena.ufimtseva@oracle.com>
      Signed-off-by: default avatarJohn G Johnson <john.g.johnson@oracle.com>
      Signed-off-by: default avatarJagannathan Raman <jag.raman@oracle.com>
      Reviewed-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
      Message-id: c2adec87958b081d1dc8775d4aa05c897912f025.1655151679.git.jag.raman@oracle.com
      
      [Changed submodule URL to QEMU's libvfio-user mirror on GitLab. The QEMU
      project mirrors its dependencies so that it can provide full source code
      even in the event that its dependencies become unavailable. Note that
      the mirror repo is manually updated, so please contact me to make newer
      libvfio-user commits available. If I become a bottleneck we can set up a
      cronjob.
      
      Updated scripts/meson-buildoptions.sh to match the meson_options.txt
      change. Failure to do so can result in scripts/meson-buildoptions.sh
      being modified by the build system later on and you end up with a dirty
      working tree.
      --Stefan]
      
      Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
      55116968
  4. May 07, 2022
  5. Oct 14, 2021
  6. Feb 09, 2021
  7. Sep 29, 2020
  8. Sep 10, 2020
  9. Jul 10, 2020
  10. Dec 17, 2019
  11. Aug 20, 2019
  12. Mar 18, 2019
  13. Mar 07, 2019
    • Paolo Bonzini's avatar
      build: switch to Kconfig · e0e312f3
      Paolo Bonzini authored
      
      The make_device_config.sh script is replaced by minikconf, which
      is modified to support the same command line as its predecessor.
      
      The roots of the parsing are default-configs/*.mak, Kconfig.host and
      hw/Kconfig.  One difference with make_device_config.sh is that all symbols
      have to be defined in a Kconfig file, including those coming from the
      configure script.  This is the reason for the Kconfig.host file introduced
      in the previous patch. Whenever a file in default-configs/*.mak used
      $(...) to refer to a config-host.mak symbol, this is replaced by a
      Kconfig dependency; this part must be done already in this patch
      for bisectability.
      
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: default avatarYang Zhong <yang.zhong@intel.com>
      Acked-by: default avatarThomas Huth <thuth@redhat.com>
      Message-Id: <20190123065618.3520-28-yang.zhong@intel.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      e0e312f3
    • Paolo Bonzini's avatar
      kconfig: introduce kconfig files · 82f51817
      Paolo Bonzini authored
      
      The Kconfig files were generated mostly with this script:
      
        for i in `grep -ho CONFIG_[A-Z0-9_]* default-configs/* | sort -u`; do
          set fnord `git grep -lw $i -- 'hw/*/Makefile.objs' `
          shift
          if test $# = 1; then
            cat >> $(dirname $1)/Kconfig << EOF
      config ${i#CONFIG_}
          bool
      
      EOF
            git add $(dirname $1)/Kconfig
          else
            echo $i $*
          fi
        done
        sed -i '$d' hw/*/Kconfig
        for i in hw/*; do
          if test -d $i && ! test -f $i/Kconfig; then
            touch $i/Kconfig
            git add $i/Kconfig
          fi
        done
      
      Whenever a symbol is referenced from multiple subdirectories, the
      script prints the list of directories that reference the symbol.
      These symbols have to be added manually to the Kconfig files.
      
      Kconfig.host and hw/Kconfig were created manually.
      
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: default avatarYang Zhong <yang.zhong@intel.com>
      Message-Id: <20190123065618.3520-27-yang.zhong@intel.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      82f51817
Loading