Skip to content
Snippets Groups Projects
  1. Feb 11, 2014
  2. Feb 10, 2014
  3. Feb 09, 2014
  4. 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
  5. Feb 06, 2014
  6. 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
  7. Feb 02, 2014
  8. Jan 30, 2014
  9. 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
  10. Jan 22, 2014
  11. Jan 10, 2014
  12. Jan 08, 2014
  13. Dec 30, 2013
  14. 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
  15. Dec 16, 2013
  16. 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
  17. Dec 11, 2013
Loading