OSv release 0.05 - nyh/osv GitHub Wiki
Announcing the release of OSv “El Colorado” 0.05 (unstable release) This release focus on performance and stability improvements.
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)
Support key-per authentication on EC2 instance launch Enabling 8xlarge (32 vCPU) EC2 instances
Allow FS size specification from command line Generate tests manifest Allow image caching during build Support “make image=” for building modules
Automatic patch testing Performance analysis
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.
For complete list of open issues https://github.com/cloudius-systems/osv/issues?state=open
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"