Skip to content
Tzach Livyatan edited this page Jan 26, 2014 · 3 revisions

Release Announcement

Announcing the release of OSv “El Colorado” 0.05 (unstable release) This release focus on performance and stability improvements.

Performance Improvement

Continuous effort is put on improving the throughput of OSv, and of OSv appliances. Few of the improvements in 0.05 are: Improved ZFS performance via proper setting of ARC cache bounds Improved virtio-blk performance by enabling write caching In particular, significant improvement was made in TCP, UDP roundtrip benchmark - 71%, 87% better than other OS (see Netperf) Memcached benchmark - 43% better than other OS (see Memcached)

New features

EC2 enablement

Support key-per authentication on EC2 instance launch Enabling 8xlarge (32 vCPU) EC2 instances

Build

Allow FS size specification from command line Generate tests manifest Allow image caching during build Support “make image=” for building modules

Tooling

Automatic patch testing Performance analysis

More features

Clean the default boot sequence. A new --verbose option allow backward compatibility with full boot messages. Posix thread clocks Support for virtio-scsi. SCSI is require for future support for OSv on Google Compute Engine (GCE) Improve Posix-compatibility with support for file remove, mknod, unlink, rmdir, readdir and thread detach.

Known issues

For complete list of open issues https://github.com/cloudius-systems/osv/issues?state=open

Ready to use images

Full list of contributions

Amnon Heiman (8):
      random: Separate device node from virtio-rng
      java: Add exception information to uncaught exceptions
      java: Fix argument splitting in MultiJarLoader
      OSv Coding Style
      api: Add osv::version for querying OSv version
      Makefile: Add httpserver rule
      modules: Add httpserver.so to mgmt module
      Makefile: Add httpserver rule

Asias He (56):
      interrupt: Allow not providing a bottom half thread for easy_register
      virtio-net: Drop tx_gc_thread thread
      virtio-net: Do _tx_queue->get_buf_gc() in virtio_net::tx_gc()
      virtio-net: Remove _tx_gc_lock lock
      virtio: Fix vring::used_ring_is_half_empty() calculation
      virtio: Do not scale desc_needed by _num / 2
      virtio: Fix vring::use_indirect
      virtio: Add vring::used_ring_can_gc() helper
      virtio-blk: Do not call queue->get_buf_gc() with wait_until
      virtio-rng: Do not call queue->get_buf_gc() with wait_until
      virtio-blk: Disable interrupts while irq handling is in progress
      vfs: Fix endless loop in bdev_read and bdev_write
      virtio: Use emplace_back instead of push_back
      virtio: Add add_out_sg and add_in_sg helper
      virtio: Add init_sg helper
      virtio-blk: Switch to sched::thread_handle for thread wakeup
      virtio-blk: Do not use std::stringstream for _driver_name
      virtio-net: Do not use std::stringstream for _driver_name
      bio: Add bio_private
      bio: Introduce BIO_SCSI
      virtio-scsi: Initial support
      ramdisk: Use dev->size instead of sc->size
      vfs: Do uio size check in bdev_read adn bdev_write
      ramdisk: Skip uio size check in driver
      virtio-blk: Skip uio size check in driver
      xenfront-blk: Skip uio size check in driver
      virtio-blk: Make the class name to virtio::blk.
      virtio-blk: Make the make request func name shorter
      virtio-blk: Reduce extra indention
      virtio-blk: Remove CamelCase naming
      virtio-blk: Do not call biodone in struct blk_req's destructor
      virtio-blk: Initialize req->bio in constructor
      virtio-blk: Add space around =
      virtio-blk: Rename response_worker to req_done
      virtio: Add add_buf_wait and wakeup_waiter
      virtio-blk: Use add_buf_wait and wakeup_waiter
      virtio-scsi: Use add_buf_wait and wakeup_waiter
      virtio-scsi: Share the same vblk name with virtio-blk
      run.py: Add --scsi option to boot from virtio-scsi
      run.py: Use newer -device and -drive syntax for virtio-blk device
      virtio-net: Reduce extra indention
      virtio-net: Make the class name to virtio::net.
      virtio-net: Rename if_ functions
      virtio-net: Rename vnet_txq_stats and vnet_rxq_stats
      net: Rename if_get_if_info to if_getinfo
      virtio-rng: Make the class name to virtio::rng.
      run.py: Add aio=native for virtio-blk device
      tests: Wait until all bio are done in bdev-write test.
      virtio-net: Do not specify VIRTIO_RING_F_INDIRECT_DESC twice.
      virtio: Enable indirect descriptor for vblk and vscsi
      tests: Fix bytes_written overflow in bdev-write and fs-stress
      tests: Print err when bio is not finished correctly in bdev-write
      Add "make image=haproxy"
      pci: Enable mmio bar support
      virtio: Do not call setup_features twice
      virtio-scsi: Skip uio size check in driver

Avi Kivity (46):
      elf: fix DPTMOD64 relocations with null symbol
      build: use -Og for mode=debug, if available
      runtime: fix prio_find_thread() ignoring missing threads
      rcu: forward declare preempt_enable() to avoid #include hell
      rcu: add preempt_lock_in_rcu
      rcu: make rcu_ptr default initialize to a reasonable value
      sched: add a wake() function that is safe to use on a thread that may terminate
      sched: change wake_with() to use rcu locking
      sched: remove thread::_ref_counter
      tst-threadcomplete: fix race between t2 running and t1 destroying
      linux_ioctl.cc: fix unicode in comment
      build: get rid of libunwind.a
      net: remove unneeded linux compatibility macros
      net: reconcile bsd and api IPPROTO_* macros
      net: reconcile bsd and api SOL_* macros
      net: reconcile in.h IN_CLASS* macros and friends
      net: reconcile bsd and linux IP_ socket options
      net: reconcile api and bsd INADDR_* macros
      net: reconcile bsd and api IP_MAX_MEMBERSHIPS
      bsd: fix horrible m_* macro clash
      poll: move away from bsd msleep()
      build: allow image cacheing during build
      rcu: add variant of assign() for null pointers
      netport: make CTASSERT work in both C and C++
      net: convert most of the networking stack to C++
      vring: avoid expensive divides
      bsd: convert the Xen stuff to C++
      bsd: refine __ntohl() and friends as inline functions
      bsd: convert tcp_seq to a class
      bsd: add comparison operators to tcp_seq
      bsd: change operator-(tcp_seq, tcp_seq) to be signed
      net: fix excessive window updates
      virtio: fix received packet size tracepoint
      virtio: support UDP fragmentation offload (UFO)
      x64: enable A20 gate very early
      xen: remove designated initializer in C++ code
      serial: initialize word size correctly
      net: call socket constructor and destructor
      condvar: make WAIT_MORPHING required
      condvar: rename members to conform to coding style
      condvar: improve constructor
      condvar: switch implementation to member functions
      mutex: remove spinlock-based mutex
      gdb: fix 'osv info thread' thread address printout
      net: fix socket send/receive timeout
      tst-kill: fix timeout test

Benoît Canet (1):
      loader: Move back __libc_stack_end to the loader.

Dmitry Fleytman (13):
      release-ec2: bugfixes
      release-ec2: beautifications
      netperf: patch to work-around partial alarm() functionality
      build: allow FS size specification from command line
      netinet: Fix broken checksum verification in LRO mechanism
      alarm: prepare for syscall interruption implementation
      msleep: prepare for interruptible sleep implementation
      wait_until: introduce infrastructure for interruptible wait
      msleep: wait in interruptible manner
      alarm: wake threads in interruptible sleep
      tst-kill: add tests for interrupted syscalls (SIG_ALRM)
      netperf: drop patch for limited alarm() implementation workaround
      DHCP: Support MTU option

Dor Laor (1):
      Silence the qemu-ifup script

Eduardo Piva (3):
      debug: create circular buffer for silent mode
      loader: Add --verbose option to OSv
      debug: Change calls to printf on boot messages

Glauber Costa (47):
      loader.cc: don't start DHCP when no interface is found
      loader.py: unbreak info threads
      xen: int vs long issues - OSv side
      sched: initialize clock later
      xen: disable pvclock for more than 32 CPUs
      sched: Use an integer for thread ids
      sched: standardize call to _cleanup
      sched: implement pthread_detach
      tests: add test for thread completion
      mmu: don't bail out on huge page failure
      tests: Test huge page allocation failure.
      mmu: support MAP_UNINITIALIZED flag
      tests: fix threads being destroyed earlier.
      vma_fault: propagate exception frame to fault handlers
      mmu: fix allocate_intermediate_level
      enable interrupts during page fault handling
      mempool: memory statistics
      runtime: Fix hard-coded _SC_PAGESIZE
      linux: add support for clock_getres through syscall
      sched: keep track of thread's runtime
      sched: reserve some thread ids
      pthread: add support for pthread_getcpuclockid
      tests: add test for memmove string library functionality
      mem: fix allocation accounting
      x64: Provide a backwards version of memcpy
      string: implement memmove using memcpy
      string: add fixups for memcpy operations
      mmu: make operate quantifiable.
      mmu: account evacuated size
      semaphore: allow extending the interface
      mempool: shrink memory when no longer used.
      mmu: implement a new JVM vma
      JVM ballon driver
      jvm_balloon: control shrinker activation / deactivation
      java: memory pressure monitor
      jvm: insert probe
      mm: Count total memory used by the JVM heap
      jvm_balloon: disable balloon upon jvm memory pressure.
      jvm: set max_heap to all available memory.
      libc: support more time modes
      tests: add test for thread clock
      msleep: make it accept any kind of mutex
      bsd glue: simplify curproc so it returns a pointer
      reclaim: export address of the OSV reclaimer
      ZFS: remove one OSv ifdef
      balloon: remove leftover code
      java: disable balloon when heap size is set.

Gleb Natapov (20):
      pthread: add stubs for pthread_condattr_* functions
      mprotect() should not fail if it encounters non present pte
      mmu: Hold vma list lock in mmap() paths
      mmu: Move code around
      mmu: generic page table walker based on linear_map_level
      mmu: convert populate/unpopulate/protect page walkers to the generic page walker
      mmu: convert virt_to_phys_pt() page walker to generic one
      mmu: add constexpr to some functions
      mmu: do not free pages before flushing remote tlbs during unpopulate
      mmu: do tlb flush while changing permission only if permissions are reduced
      mmu: remove tlb_flush from vdepopulate
      mmu: Align mmap start address to large page if possible
      mmu: Validate file permission in mprotect()
      tests: add mprotect() permission checking test
      mmu: split map_range() into two functions
      mmu: make map_level<> usable only through map_range() function.
      mmu: fix calculation of offset during page table traversal
      mmu: fix vma locking during mmap related operations
      mmu: Make map_file() more efficient
      loader.py: print flags and permissions in "osv mmap"

Juan Antonio Osorio (2):
      corrected small typo on the README.md
      run.py: Remove global variable usage

Nadav Har'El (53):
      Support "make image=rogue"
      Support "make image=specjvm"
      Revive testrunner.so
      Don't assert() in tests/tst-readdir.cc
      libc: Fix remove() return value
      Some small fixes to tst-pipe.cc
      Reindent fs/vfs/main.cc
      Implement mknod()
      Fix wrong error codes in unlink(), rmdir() and readdir()
      Fix shared-object finalization
      Rename blacklisted tests
      Verify slow page fault only happens when preemption is allowed
      Add "make image=memcached"
      gdb: make "osv info threads" work again
      Add rcu_lock_in_preempt_type
      Fix wake_with()
      Fix race between join() and thread completion
      backtrace(): Use libgcc_eh.a instead of libunwind.a.
      Fix assertion failure during many-cpu boot
      Trivial: pipe.cc doesn't need to include af_local.h
      sched: correctly fix for timer re-set bug
      Convenience attr constructor for a thread with a small stack
      Add timerfd_*() system calls
      tst-timerfd.cc: Test for timerfd_*()
      Update pre-requisites in README.md
      sched: Overhaul sched::thread::attr construction
      libc: fix size check in select()
      tst-mmap: fix two leaks
      README: build requires 64-bit distribution
      file: reduce boiler-plate code in special files
      fs: clean up old "fo_*" C functions
      Sched: fix race start_early_threads()
      README: Add a short intro to OSv
      Exile spinlock to a separate file
      build.mk: Fix dependency
      Refactor timerfd.cc
      clock: add monotonic uptime clock
      loader: fix spurious error message
      time.cc: generalize the std::chrono -> timespec conversion
      Makefile: remove unnecessary -lstdc++
      tst-vfs: don't rely on some random Java file
      modules: Move more files to modules/{java,mgmt}/usr.manifest
      Makefile: get rid of "make external"
      Move tests to a separate module
      Document clock::time() and fix its implementation on kvmclock
      osv/clock.hh: Add std::chrono::duration literals
      Add osv::clock::wall
      Fix regression in early output to stdout
      loader.cc: make error messages visible
      sysinfo(): fix stack overwrite
      sysinfo(): Provide some real measurements
      run.py: without -e, revert to the default command line.
      run.py: Add -V (--verbose) option

Or Cohen (1):
      libc: Add getgrgid_r for group querying

Pekka Enberg (58):
      Revert "Add tests into tst-fs-link.so to check vnode duplicity"
      Revert "vfs: Fix duplicate in-memory vnodes"
      mman: Fix errno handling in mmap and munmap
      test.py: Make test runner silent by default
      test.py: Switch to blacklist
      test.py: Make output pretty and show duration
      test.py: add '--repeat' option
      tst-fs-link.so: Use mktemp() for path names
      core: vma abstract base class
      mmu: Use addr_range for vma constructors
      x64: Make page fault handler arch specific
      loader: Remove locale test
      test.py: Add tst-threadcomplete.so to blacklist
      test.py: Show blacklisted tests
      mmu: Add is_page_aligned() helper function
      mman: Move mincore() to libc/mman.cc
      mman: Simplify mmap()
      munmap: Fail if munmap address range is not mapped
      x64: Move PTE definitions to arch-mmu.hh
      virtio-blk: Use 'auto' where possible
      test.py: Bring back tst-threadcomplete.so
      Revert "build: allow image cacheing during build"
      acpi: Use tprintf-based API for logging
      java: Simplify uncaught exception reporting
      pci: Remove unused 'Driver' forward declaration
      build: Require 64-bit x86 compiler
      modules: support "include"ing a module list
      images: Bring back haproxy.py
      build.mk: Fix Java test build
      Update mgmt.git version
      loader: Update Cloudius copyright
      bsd: Simplify networking init message
      x64: Simplify CPU bringup boot message
      x64: Drop APIC base boot message
      Remove vga.cc.orig committed by mistake
      Add patch command backup files to gitignore
      build: Force version.h generation
      Revert "build: Force version.h generation"
      Update to latest mgmt.git
      Revert "Makefile: Add httpserver rule"
      modules: Remove httpserver.so from mgmt
      java: Use debugf() for autotuning message
      run.py: Add '--graphics' option
      trace: add 'extract' command
      loader: Bring back OSv version at boot
      mgmt.git: boot message cleanups
      README: Replace debugging sections with links to Wiki
      devfs: Remove "device not found" printout
      loader: Remove copyright statement from boot log
      pthread: Add pthread_attr_getstacksize()
      libc: Use pthread stack info for RLIMIT_STACK
      vfs: 'struct file' to VOP_READ
      mmu: procfs support
      proc filesystem
      vfs: mount procfs at boot
      tests: miscs-procfs.so
      Revert "build: Support VMDK and other image formats"
      java: Disable JVM balloon

Raphael S. Carvalho (25):
      vfs: Fix duplicate in-memory vnodes
      Add tests into tst-fs-link.so to check vnode duplicity
      libc/mount: Change umount2 and add umount
      libc: Add munmap validation
      tests: Add munmap tests into tst-mmap-file
      vfs: Fix duplicate in-memory vnodes
      Add tests into tst-fs-link.so to check vnode duplicity
      tst-fs-link.so: Use mktemp() in check_vnode_duplicity()
      mmu: Add page_size_shift constant to avoid magic values
      umount2: Add parameter checks
      tst-zfs-mount: Rename and change test to use report approach
      mmu: Replace magic values by constants
      bsd: Fix unimplemented copystr() and copyinstr()
      loader: Fix leak on library objects
      tst-fsx.c: Fix: fallocate() is defined when FALLOCATE is defined
      gdb: Add 'osv zfs' command for ZFS analysis
      vfs: change the approach of releasing dentries during unmount
      vfs: Fix dentry leak in sys_pivot_root
      vfs: Add hierarchy support to directory entries
      Fix fs/vfs/vfs_lookup.c coding style
      tst-vfs: Add test case to dentry hierarchy support
      scripts/test: Add option to run all test cases in a single OSv instance
      Fix tests/testrunner.cc coding style
      gdb: improve 'osv zfs' command
      zfs: Fix on-disk data inconsistency on shutdown

Takuya ASADA (8):
      pci: Fix offsets in *_pci_config_*
      vga: Fix VGA base address
      vga: Handle line feed
      VGA: Add input_ready() and readch() stubs
      loader: Add '--vga' to switch console
      build: Support VMDK and other image formats
      console: add vga.hh include
      elf: fix object::lookup_addr to lookup correct symbol

Tomasz Grabiec (79):
      tst-rename: simplify
      Add test for sequential write performance at file I/O layer
      Add test for sequential write performance at bdev layer
      virtio-blk: enable write caching
      loader.py: Make 'osv info threads' not fail when all frames are blacklisted
      loader.py: Skip inlined frames in 'osv info threads'
      run.py: Use 'signal' option of chardev to control signal behavior
      loader.py: Make 'osv trace duration' not sorted by default
      elf: implement missing module_index() function.
      elf: change module_index type from unsigned long to ulong
      tls: Make __tls_get_addr() work for symbols defined in core module
      tests: add test for std::promise
      elf: fix handling of R_X86_64_TPOFF64 relocation
      tests: print stats asynchronously in fs/bdev write tests
      Make BSD code use hardware atomics
      Fix compilation error in uips_socket.cc
      loader.py: fix 'osv memory' and 'osv mmap' commands
      tests: print average transfer rate after test
      tests: Convert 'total' to double instead of float
      bsd: Initialize physmem variable
      loader.py: fix `osv info threads`
      vring: move add_buf_wait() definition to .cc
      vring: add tracepoint for tracking _avail_count
      runtime: fix "may be uninitialized" warnings
      core: extract graceful shutdown logic
      runtime: call shutdown() on exit()
      bsd/xdr: Silence uninitialized use warnings with -O3
      netinet: fix uninitialized use of 'nims' in inm_merge()
      sched: add tracepoint for thread creation
      libc: make dlopen() return main program for empty file name
      tests: add tests for dlopen()
      imgedit: fix potential deadlock between qemu and nbd_file.__init__
      imgedit: simplify the loop
      imgedit: fix hang in case qemu terminates before nbd client connects
      imgedit: fail if qemu exits with non-zero code
      config.json: convert tabs to spaces
      modules: support nested module dependencies
      modules: make presence of either manifests optional
      modules: cleanup resolve.py
      modules: make java a separate OSv module
      modules: introduce higer level API to aid manifest generation
      modules: allow for file mapping declaration in module.py
      java: add all JRE files to the image by default
      conf: make release build use -O3
      module.py: move test.manifest.gen processing out of jvm class
      Add netperf image configuration
      build: incremental make without image= argument should use the default
      gdb: make Trace convertible to string
      gdb: support backtraces shorter than backtrace_len
      gdb: resolve tracepoint_base outside the loop
      Add python wrapper for addr2line
      gdb: extract trace related abstractions to an independent module
      trace: support persisting trace stream to file
      gdb: introduce command to save traces in binary form
      trace: add command-line tool for processing trace files
      Introduce python module for tree printing
      trace: add source address formatting options
      sched: add tracepoint for resuming from wait
      trace: add command for printing wait profile
      trace: add command for printing tracepoint hit profile
      trace: separate backtrace elements with a comma rather than space
      trace: show all digits of timestamp
      debug.py: fix output parsing for addr2line ver. 2.23.52.0.1-9.fc19
      trace: remove WritingPacker.offset
      trace: improve help
      trace: exit silently when stdout pipe is broken
      trace: add `summary` command
      trace: use call-site instead of return-site in flat backtrace
      trace: move trace related commands from loader.py to trace.py
      trace: move TimeRange from prof.py to trace.py
      trace: make time slicing options available in trace listing
      trace: introduce '--period' time slicing option
      trace: accept time units in --since and --until
      trace: make -t option required for prof command
      trace: get rid of unnecessary int_or_none()
      trace: fix help text of 'trace.py summary'
      trace: get rid of extra new-line in 'list-timed' output
      Revert "conf: make release build use -O3"
      build: do not generate .d file of the uploaded manifest

Vlad (3):
      include/api/assert.h: Add the missing protection
      compilation: Fix compilation errors
      virtio-net: use if_transmit() instead of legacy if_start()

Vlad Zolotarov (17):
      build: Fix some debug build errors
      build.mk: Add -DNDEBUG when mode!=debug
      Added DEBUG_ASSERT() macro
      virtio-net: Introducing rxq and txq structs
      net: Added IFCAP_HWSTATS
      virtio-net: Collect statistics in virtio-net
      net: Added ifnet->if_get_if_info()
      ifconfig: Fix issue #134
      loader.cc: Print a message when a program returns a non-zero status
      test.py: Add additional error patterns to test.py
      test.py: Blacklist tst-fsx test since it fails
      usr.manifest.skel: Add missing tests
      build.mk: Generate a manifest of tests automatically
      posix_memalign: Remove the extra check on size
      libc: added gethostbyname()
      libc: added __snprintf_chk() and __vasprintf_chk()
      libc: added rand_r()

Zhi Yong Wu (1):
      xen: Fix "error: unable to find tring literal operator"
Clone this wiki locally