Skip to content
Snippets Groups Projects
  1. Feb 07, 2014
    • Glauber Costa's avatar
      boot: take early timings · d38883fa
      Glauber Costa authored
      
      In the past, we have struggled with long delays while reading data from disk in
      real mode, leading to big boot times (not that they are totally gone). For that
      reason, it is useful to know how much time is being spent in that process.  As
      unstable and broken the TSC is, it is pretty much our only ally for that.
      
      What I am proposing in this patch, is that we take timings from key states of
      the bootloader, and pass that to main loader. We will do that by adding some
      space at the end of the multiboot_info structure, so that we can pass some
      fields to it. Right now, we are using 16 bytes so we can pass 2 64-bit tsc
      reads.
      
      Signed-off-by: default avatarGlauber Costa <glommer@cloudius-systems.com>
      Reviewed-by: default avatarNadav Har'El <nyh@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      d38883fa
    • Glauber Costa's avatar
      general infrastructure for boot time calculation · 3ab3a6bb
      Glauber Costa authored
      
      I am proposing a mechanism here that will allow us to have a better idea about
      how much time do we spend booting, and also how much time each of the pieces
      contribute to. For that, we need to be able to get time stamps really early, in
      places where tracepoints may not be available, and a clock most definitely
      won't.
      
      With my proposal, one should be able to register events. After the system
      boots, we will calculate the total time since the first event, as well as the
      delta since the last event. If the first event is early enough, that should
      produce a very good picture about our boot time.
      
      Signed-off-by: default avatarGlauber Costa <glommer@cloudius-systems.com>
      Reviewed-by: default avatarNadav Har'El <nyh@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      3ab3a6bb
  2. Feb 03, 2014
    • Takuya ASADA's avatar
      x64: Add symbol on assembly functions · f6ab17a4
      Takuya ASADA authored
      
      If abort() called the result of an exception (ex: segv), my
      backtrace-on-abort patch outputs incorrect symbol name on exception
      handler.  Because it doesn't have enough information on elf header.
      
      This patch adds the information.
      
      Before the patch applied:
      page fault outside application
      [backtrace]
      0x2f3b31 <mmu::vm_sigsegv(unsigned long, exception_frame*)+37>
      0x2f3d4d <mmu::vm_fault(unsigned long, exception_frame*)+215>
      0x325b34 <page_fault+157>
      0x324797 <void std::__introsort_loop<fault_fixup*, long>(fault_fixup*, fault_fixup*, long)+1129>  <-- This is incorrect !
      0x312a05 <vmware::vmxnet3::vmxnet3(pci::device&)+473>
      
      After applied:
      page fault outside application
      [backtrace]
      0x2f3b31 <mmu::vm_sigsegv(unsigned long, exception_frame*)+37>
      0x2f3d4d <mmu::vm_fault(unsigned long, exception_frame*)+215>
      0x325b34 <page_fault+157>
      0x324797 <ex_pf+35> <-- Correct name
      0x312a05 <vmware::vmxnet3::vmxnet3(pci::device&)+473>
      
      Reviewed-by: default avatarNadav Har'El <nyh@cloudius-systems.com>
      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>
      f6ab17a4
  3. Feb 02, 2014
  4. Jan 30, 2014
  5. Jan 27, 2014
    • Nadav Har'El's avatar
      clock: relative-time clock_event::set() · 5c5f5971
      Nadav Har'El authored
      
      OSv's timer mechanism hinges on the Local APIC's (per-cpu) one-shot timer,
      which delivers an interrupt after the requested number of nanoseconds.
      
      The API to set this timer, clock_event::set(), took the absolute time of
      the next interrupt. However, what it really needs is the duration in
      nanoseconds until the next interrupt.
      
      So this patch we change the basic clock_event::set() API to take a
      duration, and implement the original clock_event::set(s64) - taking an s64
      absolute wall-clock time - as a simple wrapper.  The next patch will add
      more wrappers for set() taking absolute times from different clocks.
      Later patches in this series will stop using the old set(s64) version,
      until it is dropped in the end of the series.
      
      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>
      5c5f5971
  6. Jan 22, 2014
  7. Jan 10, 2014
  8. Jan 08, 2014
  9. Dec 30, 2013
  10. Dec 24, 2013
    • Avi Kivity's avatar
      bsd: convert the Xen stuff to C++ · 828ec291
      Avi Kivity authored
      
      Helps making bsd header changes that xen includes.
      
      Signed-off-by: default avatarAvi Kivity <avi@cloudius-systems.com>
      828ec291
    • Nadav Har'El's avatar
      sched: Overhaul sched::thread::attr construction · eb48b150
      Nadav Har'El authored
      
      We use sched::thread::attr to pass parameters to sched::thread creation,
      i.e., create a thread with non-default stack parameters, pinned to a
      particular CPU, or a detached thread.
      
      Previously we had constructors taking many combinations of stack size
      (integer), pinned cpu (cpu*) and detached (boolean), and doing "the
      right thing". However, this makes the code hard to read (what does
      attr(4096) specify?) and the constructors hard to expand with new
      parameters.
      
      Replace the attr() constructors with the so-called "named parameter"
      idiom: attr now only has a null constructor attr(), and one modifies
      it with calls to pin(cpu*), detach(), or stack(size).
      
      For example,
          attr()                                  // default attributes
          attr().pin(sched::cpus[0])              // pin to cpu 0
          attr().stack(4096).pin(sched::cpus[0])  // pin and non-default stack
          and so on.
      
      Signed-off-by: default avatarNadav Har'El <nyh@cloudius-systems.com>
      Signed-off-by: default avatarAvi Kivity <avi@cloudius-systems.com>
      eb48b150
  11. Dec 16, 2013
  12. Dec 15, 2013
    • Glauber Costa's avatar
      enable interrupts during page fault handling · ec7ed8cd
      Glauber Costa authored
      
      Context: going to wait with irqs_disabled is a call for disaster.  While it is
      true that not every time we call wait we actually end up waiting, that should
      be an invalid call, due to the times we may wait. Because of that, it would
      be good to express that nonsense in an assertion.
      
      There is however, places we sleep with irqs disabled currently. Although they
      are technically safe, because we implicitly enable interrupts, they end up
      reaching wait() in a non-safe state. That happens in the page fault handler.
      Explicitly enabling interrupts will allow us to test for valid / invalid wait
      status.
      
      With this test applied, all tests in our whitelist still passes.
      
      Signed-off-by: default avatarGlauber Costa <glommer@cloudius-systems.com>
      Signed-off-by: default avatarAvi Kivity <avi@cloudius-systems.com>
      ec7ed8cd
  13. Dec 11, 2013
    • Pekka Enberg's avatar
      x64: Make page fault handler arch specific · 43491705
      Pekka Enberg authored
      
      Simplify core/mmu.cc and make it more portable by moving the page fault
      handler to arch/x64/mmu.cc.  There's more arch specific code in
      core/mmu.cc that should be also moved.
      
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      43491705
    • Nadav Har'El's avatar
      Verify slow page fault only happens when preemption is allowed · b7620ca2
      Nadav Har'El authored
      
      Once page_fault() checks that this is not a fast fixup (see safe_load()),
      we reach the page-fault slow path, which needs to allocate memory or
      even read from disk, and might sleep.
      
      If we ever get such a slow page-fault inside kernel code which has
      preemption or interrupts disabled, this is a serious bug, because the
      code in question thinks it cannot sleep. So this patch adds two
      assertions to verify this.
      
      The preemptable() assertion is easily triggered if stacks are demand-paged
      as explained in commit 41efdc1c (I have
      a patch to solve this, but it won't fit in the margin).
      However, I've also seen this assertion without demand-paged stacks, when
      running all tests together through testrunner.so. So I'm hoping these
      assertions will be helpful in hunting down some elusive bugs we still have.
      
      This patch adds a third use of the "0x200" constant (the nineth bit of
      the rflags register is the interrupt flag), so it replaces them by a
      new symbolic name, processor::rflags_if.
      
      Signed-off-by: default avatarNadav Har'El <nyh@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      b7620ca2
  14. Dec 10, 2013
  15. Dec 08, 2013
  16. Dec 05, 2013
    • Glauber Costa's avatar
      sched: remove on_thread_stack · 9bd939f8
      Glauber Costa authored
      
      no users in tree.
      
      Signed-off-by: default avatarGlauber Costa <glommer@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      9bd939f8
    • Glauber Costa's avatar
      apic: fix allbutself delivery mode · 8a48cb55
      Glauber Costa authored
      
      Our APIC code is so wrong, but so wrong, that it even produce incorrect
      results.  X2APIC is fine, but XAPIC is using xapic::ipi() for all its
      interrupts. The problem with that, is that the costumary place for "vector" is
      inverted in the case of allbutself delivery mode, and therefore, we're sending
      these IPIs to God Knows Where - not to the processors, that is for sure.
      As a result, we would spin waiting for IRQ acks that would never arrive.
      
      I could invert and reorganize the parameters and comment this out, but I've
      decided it is a lot clearer just to open code it. Also, there is no need at all
      to set ICR2 for allbutself, because the destination is already embedded in the
      firing mode.
      
      One issue: NMI is copied over because it is also wrong by the same reasons, so
      I fixed. But I don't have a test case for this.
      
      Fixes #110
      
      Signed-off-by: default avatarGlauber Costa <glommer@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      8a48cb55
  17. Dec 04, 2013
  18. Dec 03, 2013
  19. Dec 01, 2013
  20. Nov 26, 2013
    • Nadav Har'El's avatar
      Reduce number of unnecessary sections in our executable · 03aaf6b8
      Nadav Har'El authored
      
      This patch resolves issue #26. As you can see with "objdump -h
      build/release/loader.elf", our executable had over a thousand (!)
      separate sections, most of them should really be merged.
      We already started doing this in arch/x64/loader.ld, but didn't
      complete the work.
      
      This patch merges all the ".gcc_except_table.*" sections into one,
      and all the ".data.rel.ro.*" sections into one. After this merge,
      we are left with just 52 sections, instead of more than 1000.
      
      The default linker script (run "ld --verbose" to see it) also does
      similar merges, so there's no reason why we shouldn't.
      
      By reducing the number of ELF sections (each comes with a name, headers,
      etc.), this patch also reduces the size of our loader-stripped.elf
      by about 140K.
      
      Fixes #26.
      
      Signed-off-by: default avatarNadav Har'El <nyh@cloudius-systems.com>
      Signed-off-by: default avatarAvi Kivity <avi@cloudius-systems.com>
      03aaf6b8
    • Dmitry Fleytman's avatar
      xen: move per-cpu interrupt threads to .percpu section · 63d2e472
      Dmitry Fleytman authored
      
      Bug fixed by this patch made OSv crash on Xen during boot.
      The problem started to show up after commit:
      
        commit ed808267
        Author: Nadav Har'El <nyh@cloudius-systems.com>
        Date:   Mon Nov 18 23:01:09 2013 +0200
      
            percpu: Reduce size of .percpu section
      
      Signed-off-by: default avatarDmitry Fleytman <dmitry@daynix.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      63d2e472
  21. Nov 21, 2013
Loading