Skip to content
Snippets Groups Projects
  1. Jan 10, 2014
    • Glauber Costa's avatar
      mempool: shrink memory when no longer used. · 4afd087b
      Glauber Costa authored
      
      This patch introduces the memory reclaimer thread, which I hope to use to
      dispose of unused memory when pressure kicks in. "Pressure" right now is
      defined to be when we have only 20 % of total memory available. But that can be
      revisited.
      
      The way it will work is that each memory user that is able to dispose of its
      memory will register a shrinker, and the reclaimer will loop through them.
      However, the current "loop through all" only "works" because we have only one
      shrinker being registered. When other appears, we need better policies to drive
      how much to take, and from whom.
      
      Memory allocation will now wait if memory is not available, instead of
      aborting.  The decision of aborting should belong to the reclaimer and no one
      else.
      
      We should never expect to have an unbounded and more importantly, all opaque,
      number of shrinkers like Linux does. We have control of who they are and how
      they behave, so I expect that we will be able to make a lot better decisions
      in the long run.
      
      Signed-off-by: default avatarGlauber Costa <glommer@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      4afd087b
    • Glauber Costa's avatar
      semaphore: allow extending the interface · 21d9c318
      Glauber Costa authored
      
      Following an early suggestion from Nadav, I am trying to use semaphores for the
      balloon instead of keeping our own queue. For that to work, I need to have a bit
      more functionality that may not belong in the main balloon class. Namely:
      
      1) I need to query for the presence of waiters (and maybe in the future for the
      number of waiters)
      
      2) I need a special post that would allow me to make sure that we are almost posting
      at most as much we're waiting for, and nothing more.
      
      This patch transforms the post method in an unlocked version (and exposes a
      trivial version that just locks around it) and make other changes necessary to allow
      subclassing
      
      Signed-off-by: default avatarGlauber Costa <glommer@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      21d9c318
    • Glauber Costa's avatar
      mmu: account evacuated size · ab459e83
      Glauber Costa authored
      
      This will be useful when we shrink, so we know how much memory we newly
      released for system consumption.
      
      Signed-off-by: default avatarGlauber Costa <glommer@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      ab459e83
    • Glauber Costa's avatar
      mmu: make operate quantifiable. · f1cd4f8d
      Glauber Costa authored
      
      operate so far operates in a page range and at the very most sets a success
      flag somewhere. I am here extending the API to allow it to return how much
      data it manipulated.
      
      So as an example, if we fault in 2Mb in an empty range, it will return 2 << 20.
      But if fault in the same 2Mb in a range that already contained some sparse 4k
      pages, we will return 2 << 20 - previous_pages.
      
      That will be useful to count memory usage in certain VMAs.
      
      Signed-off-by: default avatarGlauber Costa <glommer@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      f1cd4f8d
    • Glauber Costa's avatar
      string: add fixups for memcpy operations · 9cce0f87
      Glauber Costa authored
      
      When we start using the JVM balloon, our memcpy could fail for valid reasons
      when the JVM is moving memory that is now in an unmapped region. To handle that,
      register a fixup that will trigger a JVM call when the fault happens. If all goes
      well, we will be able to continue normally.
      
      Signed-off-by: default avatarGlauber Costa <glommer@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      9cce0f87
    • Takuya ASADA's avatar
      pci: Fix offsets in *_pci_config_* · f0aa8143
      Takuya ASADA authored
      On VMware, pci_readw(PCI_CFG_DEVICE_ID) returns the *vendor ID*.
      pci_readw(PCI_CFG_VENDOR_ID) returns vendor ID as well.
      
      Compare to FreeBSD implementation of read/write PCI config space,
      FreeBSD masks lower bit of offset when write to PCI_CONFIG_ADDRESS, and
      adds lower bit of offset to PCI_CONFIG_DATA.
      
      http://fxr.watson.org/fxr/source/amd64/pci/pci_cfgreg.c#L206
      
      
      
      This patch changes accessing method in OSv to the FreeBSD way.  Tested
      on QEMU/KVM and VMware.
      
      Reviewed-by: default avatarGlauber Costa <glommer@cloudius-systems.com>
      Signed-off-by: default avatarTakuya ASADA <syuu@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      f0aa8143
    • Nadav Har'El's avatar
      clock: add monotonic uptime clock · 8dffa912
      Nadav Har'El authored
      
      This patch starts to solve both issue #142 ("Support MONOTONIC_CLOCK")
      and issue #81 (use <chrono> for time).
      
      First, it adds an uptime() function to the "clock" interface, and
      implements it for kvm/xen/hpet by returning the system time from which
      we subtract the system time at boot (but not adding any correction
      for wallclock).
      
      Second, it adds a new std::chrono-based interface to this clock, in
      a new header file <osv/clock.hh>. Instead of the old-style
      clock::get()->uptime(), one should prefer osv::clock::uptime::now().
      This returns a std::chrono::time_point which is type-safe, in the
      sense that: 1. It knows what its epoch is (i.e., that it belongs to
      osv::clock::uptime), and 2. It knows what its units are (nanoseconds).
      This allows the compiler to prevent a user from confusing measurements
      from this clock with those from other clocks, or making mistakes in
      its units.
      
      Third, this patch implements clock_gettime(MONOTONIC_CLOCK), using
      the new osv::clock::uptime::now().
      
      Note that though the new osv::clock::uptime is almost identical to
      std::chrono::steady_clock, they should not be confused. The former is
      actually OSv's implementation of the latter: steady_clock is implemented
      by the C++11 standard library using the Posix clock_gettime, and that
      is implemented (in this patch) using osv::clock::uptime.
      
      With this patch, we're *not* done with either issues #142 or #81.
      For issue #142, i.e., for supporting MONOTONIC_CLOCK in timerfd, we
      need OSv's timers to work on uptime(), not on clock::get()->time().
      For issue #81, we should add a osv::clock::wall type too (similar to
      what clock::get()->time() does today, but more correctly), and use either
      osv::clock::wall or osv::clock::uptime everywhere that
      clock::get()->time() is currently used in the code.
      clock::get()->time() should be removed.
      
      Reviewed-by: default avatarGlauber Costa <glommer@cloudius-systems.com>
      Signed-off-by: default avatarNadav Har'El <nyh@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      8dffa912
    • Tomasz Grabiec's avatar
      build: incremental make without image= argument should use the default · 5c68e049
      Tomasz Grabiec authored
      
      Currently the parameter was read from the generated Makefile which was
      not re-generated on incremental build. The fix is to move the default
      to build.mk, this way the default will always be picked unless masked
      by command line argument.
      
      Fixes #153
      
      Signed-off-by: default avatarTomasz Grabiec <tgrabiec@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      5c68e049
  2. Jan 09, 2014
  3. Jan 08, 2014
  4. Jan 07, 2014
  5. Jan 06, 2014
  6. Jan 03, 2014
Loading