Skip to content

Getting somewhere

Pre-release
Pre-release
Compare
Choose a tag to compare
@alfreb alfreb released this 08 Jun 22:29
· 9164 commits to master since this 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 :-)