Skip to content
Snippets Groups Projects
  1. Nov 26, 2013
  2. Nov 25, 2013
    • Pekka Enberg's avatar
    • Pekka Enberg's avatar
      mmu: Anonymous memory demand paging · c1d5fccb
      Pekka Enberg authored
      
      Switch to demand paging for anonymous virtual memory.
      
      I used SPECjvm2008 to verify performance impact. The numbers are mostly
      the same with few exceptions, most visible in the 'serial' benchmark.
      However, there's quite a lot of variance between SPECjvm2008 runs so I
      wouldn't read too much into them.
      
      As we need the demand paging mechanism and the performance numbers
      suggest that the implementation is reasonable, I'd merge the patch as-is
      and see optimize it later.
      
        Before:
      
          Running specJVM2008 benchmarks on an OSV guest.
          Score on compiler.compiler: 331.23 ops/m
          Score on compiler.sunflow: 131.87 ops/m
          Score on compress: 118.33 ops/m
          Score on crypto.aes: 41.34 ops/m
          Score on crypto.rsa: 204.12 ops/m
          Score on crypto.signverify: 196.49 ops/m
          Score on derby: 170.12 ops/m
          Score on mpegaudio: 70.37 ops/m
          Score on scimark.fft.large: 36.68 ops/m
          Score on scimark.lu.large: 13.43 ops/m
          Score on scimark.sor.large: 22.29 ops/m
          Score on scimark.sparse.large: 29.35 ops/m
          Score on scimark.fft.small: 195.19 ops/m
          Score on scimark.lu.small: 233.95 ops/m
          Score on scimark.sor.small: 90.86 ops/m
          Score on scimark.sparse.small: 64.11 ops/m
          Score on scimark.monte_carlo: 145.44 ops/m
          Score on serial: 94.95 ops/m
          Score on sunflow: 73.24 ops/m
          Score on xml.transform: 207.82 ops/m
          Score on xml.validation: 343.59 ops/m
      
        After:
      
          Score on compiler.compiler: 346.78 ops/m
          Score on compiler.sunflow: 132.58 ops/m
          Score on compress: 116.05 ops/m
          Score on crypto.aes: 40.26 ops/m
          Score on crypto.rsa: 206.67 ops/m
          Score on crypto.signverify: 194.47 ops/m
          Score on derby: 175.22 ops/m
          Score on mpegaudio: 76.18 ops/m
          Score on scimark.fft.large: 34.34 ops/m
          Score on scimark.lu.large: 15.00 ops/m
          Score on scimark.sor.large: 24.80 ops/m
          Score on scimark.sparse.large: 33.10 ops/m
          Score on scimark.fft.small: 168.67 ops/m
          Score on scimark.lu.small: 236.14 ops/m
          Score on scimark.sor.small: 110.77 ops/m
          Score on scimark.sparse.small: 121.29 ops/m
          Score on scimark.monte_carlo: 146.03 ops/m
          Score on serial: 87.03 ops/m
          Score on sunflow: 77.33 ops/m
          Score on xml.transform: 205.73 ops/m
          Score on xml.validation: 351.97 ops/m
      
      Reviewed-by: default avatarGlauber Costa <glommer@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      c1d5fccb
    • Pekka Enberg's avatar
      mmu: VMA permission flags · 8a56dc8c
      Pekka Enberg authored
      
      Add permission flags to VMAs. They will be used by mprotect() and the
      page fault handler.
      
      Reviewed-by: default avatarGlauber Costa <glommer@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      8a56dc8c
  3. Nov 22, 2013
  4. Nov 21, 2013
    • Nadav Har'El's avatar
      Replace numbers in prio.hh by automatically defined numbers · 147de06c
      Nadav Har'El authored
      prio.hh defines various initialization priorities. The actual numbers
      don't matter, just the order between them. But when we add too many
      priorities between existing ones, we may hit a need to renumber. This
      is plain ugly, and reminds me of Basic programming ;-)
      
      So this patch switches to an enum (enum class, actually).
      We now just have a list of priority names in order, with no numbers.
      
      It would have been straightforward, if it weren't for a bug in GCC
      (see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59211
      
      ) where the
      "init_priority" attribute doesn't accept the enum (while the "constructor"
      attribute does). Luckily, a simple workaround - explicitly casting to
      int - works.
      
      Signed-off-by: default avatarNadav Har'El <nyh@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      147de06c
    • Avi Kivity's avatar
      poll: refactor poll() in terms of file pointers, not file descriptors · 0b68144e
      Avi Kivity authored
      
      With epoll(), the lifetime of an ongoing poll may be longer than the
      lifetime of a file descriptor; if an fd is close()d then we expect it
      to be silently removed from the epoll.
      
      With the current implementation of epoll(), which just calls poll(), this is
      impossible to do correctly since poll() is implemented in terms of file
      descriptor.
      
      Add an intermedite do_poll() that works on file pointers. This allows a
      refactored epoll() to convert file descriptors to file pointers just once,
      and then a close()d and re-open()ed descriptor can be added without a problem.
      
      As a side effect, a lot of atomic operations (fget() and fdrop()) are saved.
      
      Signed-off-by: default avatarAvi Kivity <avi@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      0b68144e
  5. Nov 20, 2013
  6. Nov 19, 2013
  7. Nov 10, 2013
  8. Nov 07, 2013
  9. Nov 04, 2013
  10. Oct 31, 2013
  11. Oct 30, 2013
    • Nadav Har'El's avatar
      Start documenting condvar · 212a061a
      Nadav Har'El authored
      
      Add Doxygen comments to the condvar class. Only the C++ interface
      (condvar's methods) is documented, not the alternative C interface
      (condvar_* functions).
      
      A reminder: run "doxygen" and point your browser to doxyout/html/index.html
      to see the API documentation we have so far.
      
      A lot can still be added to this condvar documentation, including a
      good introduction to how to use condition variables, why they have
      a mutex, etc. But it's at least a start.
      
      Signed-off-by: default avatarNadav Har'El <nyh@cloudius-systems.com>
      212a061a
  12. Oct 28, 2013
    • Pekka Enberg's avatar
      percpu: Fix arithmetic on pointer to void · 8dbcbbf1
      Pekka Enberg authored
      
      Spotted by Clang:
      
      In file included from ../../loader.cc:27:
      In file included from ../../drivers/virtio-net.hh:12:
      In file included from ../../bsd/sys/net/if_var.h:80:
      In file included from ../../bsd/sys/sys/mbuf.h:40:
      In file included from ../../bsd/porting/uma_stub.h:161:
      ../../include/osv/percpu.hh:35:42: error: arithmetic on a pointer to void
              return reinterpret_cast<T*>(base + offset);
                                          ~~~~ ^
      
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      8dbcbbf1
  13. Oct 25, 2013
  14. Oct 24, 2013
  15. Oct 23, 2013
  16. Oct 22, 2013
  17. Oct 16, 2013
    • Avi Kivity's avatar
      paths.h: fix _PATH_MNTTAB · 4a487e2c
      Avi Kivity authored
      
      Signed-off-by: default avatarAvi Kivity <avi@cloudius-systems.com>
      4a487e2c
    • Avi Kivity's avatar
      libc: define mbstate_t as __mbstate_t · 7918cea9
      Avi Kivity authored
      
      std::streambuf<char> is defined as an "extern template", which means it is
      instantiated in the library, not at the point-of-use, in order to reduce
      object size and compilation time.
      
      One of its member functions, std::basic_streambuf::seekpos(...) has a
      parameter whose type depends on mbstate_t; this embeds the type name into
      the mangled function name.
      
      On Linux, mbstate_t is a typedef for __mbstate_t, so the latter type name
      is embedded into the mangled function name.  On osv, there is no such typedef,
      so mbstate_t is embedded.  This causes lookup to fail when loading a shared
      object that uses streambufs.
      
      Fix by defining mbstate_t in the same way as glibc.
      
      Signed-off-by: default avatarAvi Kivity <avi@cloudius-systems.com>
      7918cea9
  18. Oct 15, 2013
  19. Oct 14, 2013
    • Nadav Har'El's avatar
      Add osv::run function · e15b3322
      Nadav Har'El authored
      
      Add a convenience function, osv::run(), to run an ELF executable.
      
      The patch includes extensive Doxygen documentation for the new function,
      also detailing the how osv::run() differs from the familiar Linux
      functions like exec(2).
      
      Signed-off-by: default avatarNadav Har'El <nyh@cloudius-systems.com>
      e15b3322
    • Pekka Enberg's avatar
      mmu: Fix mincore() for non-resident mmaps · 7d532448
      Pekka Enberg authored
      
      Fix mincore() to follow Linux ABI and return ENOMEM only if (part of
      the) memory range is unmapped even if it's not resident.  This is needed
      for mincore() to work with demand paged mmaps.
      
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      7d532448
    • Nadav Har'El's avatar
      Rework elf::program's API · ba3e3efa
      Nadav Har'El authored
      
      This is patch v2, incorporating most of the comments from the previous round.
      
      Solves issue #47:
      
      elf::program's API - add_object() and remove_object() was problematic in
      two respects:
      
      1. It did not do reference-counting on the loaded object, so if add_object()
         was done 5 times, a single remove_object() would unmap the object and
        its 4 other users will crash.
      
      2. It is un-C++-like.
      
      This patch replaces these two functions by a single function get_library():
      
        std::shared_ptr<elf::object>
         get_library(std::string lib, std::vector<std::string> extra_path = {});
      
      get_library() returns a shared_ptr, which is reference counting and does
      proper C++-style RAII. For example in the code:
      
      	auto lib = elf::get_program()->get_library(path);
      	auto main = lib->lookup<int (int, char**)>("main");
      	int rc = main(argc, argv);
      
      once lib out of scope, the reference count of the elf::object automatically
      goes down, and if nobody else holds another shared-pointer to the same
      library, the object is destroyed (causing the shared library to be unloaded).
      
      This patch also documents, with Doxygen, all the functions it touches.
      
      IMPORTANT NOTE: This reference count is completely unrelated to the issue
      of concurrent use of dlopen()/dlclose()/dl_iterate_phdr(), which is still
      buggy and we need to fix (I have a patch for that, but it's too long to fit
      in the margin).
      
      Signed-off-by: default avatarNadav Har'El <nyh@cloudius-systems.com>
      ba3e3efa
  20. Oct 13, 2013
Loading