Skip to content
Snippets Groups Projects
  1. Oct 30, 2013
    • Pekka Enberg's avatar
      tests: Remove tst-zfs-simple.so · f966188e
      Pekka Enberg authored
      
      The tst-zfs-simple.so test case has serverd its purpose for bringup.  As
      OSv build relies on working ZFS now, there's no need to run the tests.
      
      Furthermore, we have the full ztest stress test in the tree:
      
        bsd/cddl/contrib/opensolaris/cmd/ztest/ztest.c
      
      which we can use if needed.
      
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      f966188e
  2. Oct 29, 2013
    • Tomasz Grabiec's avatar
      vfs: namei() should return ENOTDIR when component is not a directory · 1fe30840
      Tomasz Grabiec authored
      
      The call to namei("/dir/file/") currently fails with ENOENT when
      "/dir/file" exists. A more standard way is to return ENOTDIR
      instead. This way calls to stat, open, rename, etc. will be in
      line with the POSIX spec.
      
      It is also useful to rename() implementation which needs to
      differentiate behaviour between the case in which target does not
      exist and the case in which it does but the path has trailing slash
      and the last component is not a directory.
      
      In addition to that the check was performed in an inconsistent matter
      - only when dentry lookup failed. This change makes the check
      performed always.
      
      Signed-off-by: default avatarTomasz Grabiec <tgrabiec@cloudius-systems.com>
      1fe30840
  3. Oct 24, 2013
  4. Oct 23, 2013
  5. Oct 17, 2013
  6. Oct 16, 2013
  7. Oct 14, 2013
  8. Oct 06, 2013
  9. Oct 02, 2013
  10. Sep 29, 2013
    • Nadav Har'El's avatar
      Add kill() support - sort of · b9ed15c2
      Nadav Har'El authored
      
      This patch adds support for the Linux kill(2) function.
      The next patch will add alarm(2) support, which uses kill(2).
      
      To be honest, we sort-of implement kill(). This implementation is
      compatible with the API, but the semantics are somewhat different:
      While in Linux kill() causes the signal handler to run on one of the
      existing threads, in this implementation, the signal handler is run in a
      *new* thread.
      
      Implementing the exact Linux semantics in OSv would require tracking when
      OSv runs kernel code (i.e., code in the main executable, not a shared
      object) so we can delay running the signal handler until returning to the
      user code. Moreover, we'll need to be able to interrupt sleeping kernel
      code. This is complicated and adds overhead even if signals aren't used
      (and they aren't used in most modern code).
      
      I expect that this code will be "good enough" in many use cases.
      This code will *not* be good in enough in programs that expect one of the
      following:
      
      1. A program that by using Posix Thread's "signal masks" tried to ensure
         that the signal is delivered to one specific thread, and not to an
         arbitrary thread.
      
      2. A program that used kill() or alarm() not intending to run a signal
         handler, but rather intending to interrupt a sleeping system call
         like sleep() or read(). Our kill() does not interrupt sleeping OSv
         function calls, which will continue to sleep on the thread they run
         on.
      
      The support in this patch (and see next patch, for alarm()) is good
      enough for netperf's use of alarm().
      
      P.S. kill() can be used only to send a signal to the current process, the
      only process we have in OSv (you can also use pid=0 and pid=-1 to achieve
      the same results).
      
      This patch also adds a test for kill() and alarm(). The alarm() test
      will fail until the next patch :-)
      
      Signed-off-by: default avatarNadav Har'El <nyh@cloudius-systems.com>
      b9ed15c2
  11. Sep 26, 2013
  12. Sep 20, 2013
    • Nadav Har'El's avatar
      Tests: add trivial sleep test · ade5bc3e
      Nadav Har'El authored
      
      Add a trivial sleep() test, which sleep()s for 2 seconds, and verifies
      that this finishes and has slept for roughly 2 seconds.
      
      I used this for debugging issue #26 - the attempts there ruined timers,
      and in particular this trivial test hangs, as sleep() never returns.
      
      (A note to our future automatic testing implementor: We need to allow
      for the possibility that a test doesn't cleanly fail, but rather hangs,
      and consider this a failure too).
      
      Signed-off-by: default avatarNadav Har'El <nyh@cloudius-systems.com>
      ade5bc3e
  13. Sep 19, 2013
  14. Sep 13, 2013
  15. Sep 12, 2013
    • Nadav Har'El's avatar
      Test: cpu load balancing test · b255c259
      Nadav Har'El authored
      This is a test for the effectiveness of our scheduler's load balancing while
      running several threads on several cpus.
      
      A full description of the test and its expected results is included in
      comments in the beginning of the code. but briefly, the test runs multiple
      concurrent busy-loop threads, and an additional "intermittent" thread (one that
      busy-loops for a short duration, and then sleeps), and expects that all busy
      threads will get their fair share of the CPU, and the intermittent thread
      won't bother them too much.
      
      Testing the current code, this tests demonstrates the following problems
      we have:
      
      1. Two busy-loop threads on 2 cpus are 5%-10% slower than just one.
         This is not kernel overhead (profiling show 100% of the time in the
         test's inner loop), and I see exactly the slowdown when running this
         test on the Linux host, so it might be related to the host's multitasking?
         For now, let's not worry about that.
      
      2. Much more worrying is that the intermittent thread sometimes (in about half
         the tests) causes us to only fully use one CPU, and of course get bad
         performance.
      
      3. In many of the tests involving more than 2 threads (2 threads +
         intermittent, or 4 threads) load balancing wasn't fair and some
         threads got more CPU than the others.
      
      Later I'll send patches to fix issues 2 and 3, which appear to happen because
      the load balancer thread doesn't run as often as it should, because of vruntime
      problems.
      b255c259
  16. Sep 11, 2013
  17. Sep 10, 2013
  18. Sep 08, 2013
  19. Sep 02, 2013
    • Pekka Enberg's avatar
      Filed-backed mmap tests · 22c85933
      Pekka Enberg authored
      Add simple tests for munmap() for file-backed memory maps. This exposes
      a limitation in munmap() not writing out MAP_SHARED mappings.
      22c85933
  20. Aug 29, 2013
  21. Aug 26, 2013
  22. Aug 21, 2013
  23. Aug 06, 2013
    • Nadav Har'El's avatar
      Test exceptions · 7d6f0aaf
      Nadav Har'El authored
      The previous commit (fix symbol resolution order) caused a regression -
      tst-pipe.so stopped working, aborting on segfault while handling an
      expected exception (one of the only places in OSV where we use an
      exception to signal an error - running out of file descriptors).
      
      However, it turns that commit just exposed an already existing bug
      in our exception unwinding support. The following trivial test of
      exceptions, throwing an integer and catching it, crashes both with
      the previous commit, and without it.
      7d6f0aaf
  24. Aug 05, 2013
    • Nadav Har'El's avatar
      Test for for dynamic linker order bug · e5b876a0
      Nadav Har'El authored
      Christoph discovered a bug in our dynamic linker, where symbols which
      exist in the kernel cannot be used in a shared object, which can
      cause nasty bugs when trying to run existing programs.
      
      This test demonstrates this bug, and verifies its fix (in the
      previous commit).
      e5b876a0
  25. Jul 28, 2013
  26. Jul 08, 2013
    • Guy Zana's avatar
      tests: test the spsc lockless ring · c00f2dc1
      Guy Zana authored
      2 threads are created on 2 different vcpus, one consumer and one producer.
      
      Both threads are pushing and popping concurrently 1,000,000,000 elements,
      the producer is pushing a random number between 0 and 7 and consumer pops
      those numbers. Both of the threads keeps track on the values they
      pushed/popped. per each value, the number of pushed elements
      should be equal to the number of popped elements.
      
       - ring_spsc: 14.8 Mop/s per core
      c00f2dc1
  27. Jul 02, 2013
  28. Jun 25, 2013
    • Nadav Har'El's avatar
      Add epoll() test · 183c656c
      Nadav Har'El authored
      Add tst-epoll.cc for testing the epoll_*() functions.
      This test finds a bug, which will be fixed in a separate patch.
      183c656c
  29. Jun 24, 2013
  30. Jun 19, 2013
    • Nadav Har'El's avatar
      tst-wake: test for wake_with() · d0b56169
      Nadav Har'El authored
      Added a test for wake_with(). It tries to ensure that the problematic
      case solved by wake_with() actually happens quickly, by:
       1. Spin a long time between the setting of the flag and t->wake()
       2. Do a spurious wake() to ensure that the waiting thread is woken
          up right after setting the flag, before the intended wake.
       3. Use mprotect() to ensure that working with an already join()ed
          thread crashes immediately, instead of just maybe crashing.
      
      This test fails when wake_with() doesn't use ref()/unref(), and succeeds
      with the full wake_with().
      
      tst-wake contains a second test, which does the same thing but without
      the additional measures we used to show the bug (spinning, spurious
      wake and mprotect). Without these additional measures the test iteration
      is much faster, which allows us to stress wake/join much more.
      d0b56169
  31. Jun 18, 2013
    • Avi Kivity's avatar
      cli: add stat command · 092f28c6
      Avi Kivity authored
      Usage:
      
        perf list (lists all tracepoints)
        perf stat tp... (counts tracepoints)
      
      Example:
      
      [/]$ perf stat mutex_lock ctxsw=sched_switch mutex_unlock wake=sched_wake
        mutex_lock   ctxsw  mutex_unlock    wake
                40       3          1909       2
              2075     147           190      82
               193     138           193      78
               146     139           146      92
               317     179           317      78
               146     139           146      78
               146     139           186      78
               205     139           165      78
               146     139           146      78
               146     139           146      78
               146     139           146      80
               193     143           193      81
               151     147           151      78
               146     139           146      78
               146     139           146      78
               146     139           146      78
               159     139           159      78
               149     139           149      78
               146     139           146      78
               164     139           164      78
               146     139           176      78
               176     139           146      78
               149     139           149      78
               146     139           146      78
               146     139           146      78
        mutex_lock   ctxsw  mutex_unlock    wake
               146     139           146      79
               715     147           715      80
               188     139           204      78
      092f28c6
    • Christoph Hellwig's avatar
      add a zfs test using the disk backend · f8a4ece3
      Christoph Hellwig authored
      f8a4ece3
    • Christoph Hellwig's avatar
      actually wire up the simple zfs test · ff566211
      Christoph Hellwig authored
      ff566211
  32. Jun 17, 2013
Loading