Getting somewhere
Pre-release
Pre-release
Block device, filesystem and memdisk
- Finished filesystem interface with sync and async calls
- Support for custom filesystems
- FAT 12/16/32 filesystem implementation
- Added the Memdisk disk device, linked in as binary section
- Added Virtio Block device driver
- Added Virtio Console device driver
- Automated MemDisk builder from disk image file
- Async class for automatic handling of async file transfers
TCP - more or less complete rewrite
- State logic is now separated into classes
- "Socket" replaced with "Connection".
- Fully implemented RFC 793 "TransmissionControl Protocol".
- Retransmission, round trip time calculation (RFC 6298)
- Support options - MSS implemented.
- Congestion Control (New Reno) (RFC 5681 & 6582)
- Fixed checksum bug causing instability
- Send queue - queue several write requests which will be stored until fully acknowledged to be used for retransmission. Possible to avoid any copy by assigning a shared pointer to data.
- Fair packet distribution among connections.
- Packets with payload now released immediately after copying data once to a shared buffer, released to the user when subscribed.
- More events to subscribe to - OnConnect, OnDisconnect among others.
Time
- Async timers, one-shot and repeating (using PIT)
- We finally have a wall clock! (RTC via CMOS)
Test
- Added tests covering the major kernel and networking features
- New system for automating tests written in python
- Added support for LEST unit test framework (used in e.g. ./test/GSL)
Misc
- UDP now has send queue to help maximize bandwidth
- Improvements in packet- and buffer-management increasing bandwidth
- Added an optional async terminal with TCP and Serial backend, support for Telnet
- C++ GSL now included with project, with some limited usage in the kernel
- New safer virtio interface with GSL
- Pretty boot
- Pretty boot screen
- Tons of bugfixes
- Updated to llvm 3.8, both libc++ and clang, also for OS X.
Caveats:
- You currently can't use virtio-block devices together with virtio-net in Qemu, as they'll get the same IRQ number. This has been sorted in dev, but it's involved.
- The CMOS wall clock is super expensive - I counted about 200k cycles (!). This is because it has to do a lot of single-byte in- and out-instructions which all cause vm exits. We're working on a better way to keep time, possibly synchronizing with CMOS only now and then.
Up next:
On our dev-branch we've replaced the classic PIC-based interrupt system with APIC / IOAPIC and MSI-x. We expect this to give a major boost to resource efficiency and it does make it possible to run virtio-net together with virtio-block. We're also working on a lot of web service stuff, but that's mostly in stealth-mode as of yet - we'll open it up when we have something we think you'll like.
Thanks a lot to the budding community of contributors - we have a long way to go but it feels like we're getting somewhere :-)