Friday, September 9, 2016

HelenOS Camp 2016 Report

By tomorrow it will have been a week since we decamped from HelenOS Camp 2016. So while the memory is fresh, it's time for a short summary.

The traditional showcasing of gadgets of all sorts near the beginning of the camp

The camp took place some 100 kilometers east of Prague in a rented cottage, virtually a stone's throw away from the Lichnice castle. The total of 45 changesets went into the mainline during the camp and some more are waiting in the pipeline. Here is a breakdown of the camp development activities per attendee:

The Lichnice castle offered some fine panoramas

Jakub (JJ) worked on:

  • generic user pager framework and a simple pager implementation in the VFS server capable of private file mappings; shared mappings are not supported yet because more work is needed: a cache for tracking pages served by the pager and a software solution compensating for the missing dirty bit in the hardware PTEs on arm32 and ppc32;
  • modification of the page mapping interfaces so that page_mapping_find() returns a copy of the actual PTE and a new interface called page_mapping_update() for updating the actual PTE dirty and accessed bits from a copy; this allows the global page hash table lock (on ia64 and sparc64) to protect much smaller critical sections and avoid deadlocks with the user pager code;
  • removal of sparc32 support due to the lack of maintenance and suitable debugging/development tools; this is not necessarily the end of story for sparc32 - if the situation improves wrt. tooling, I am fond of reviving it;
  • still-unfinished upgrade to QEMU 2.7.0 held up by an Integrator/CP regression/oddity.

Martin (MD) reports:
Before the camp begun I set myself the primary goal to finally finish the RISC-V support in HelenOS. Unfortunately, fulfilling this goal has turned to be less straightforward than originally expected, mostly due to the changes in the draft of the privileged specification of RISC-V and even more importantly due to the changes in the Spike reference simulator of RISC-V since late spring 2016. Because both the privileged specification and the simulator are still not considered frozen/stable, some of the changes are not explicitly tracked and documented, thus making the debugging process slightly tedious at times. Due to these unexpected obstacles I have only managed to commit a dummy placeholder implementation of the RISC-V support into the HelenOS mainline branch during the camp. This placeholder implementation can be successfully built using the RISC-V specific cross-compiler toolchain, but it is not actually operational.

Since the work on the RISC-V has been somewhat less rewarding at times, I have also reviewed the commits to the HelenOS mainline branch from the recent past and made some cosmetic fixes to the code -- mostly coding style improvements. I have also implemented a very trivial GUI calculator (inspired by an independent student project that appeared on GitHub some years ago) as a demonstrator for adding the support for keeping user data in the GUI widgets. Finally, I have implemented an optional support for running the HelenOS kernel in the 'large' memory model on AMD64 for the purposes of functional comparison with RISC-V.

Jiří's (JS) account of the camp:
I spent one day trying to debug why my TP-Link (Atheros) WiFi is not working, but without much success. The driver simply fails to receive a response from the device at one point. I spent the rest of the time implementing an ordered dictionary data type based on red-black trees. It is roughly comparable to the B+tree currently available in the kernel, but has a few additional advantages (e.g. all memory is pre-allocated by the caller). I also implemented basic unit tests which helped me verify basic operation. There is still a little bit of work left before integrating, including one known bug that I've discovered after the camp and some optimizations.

Stanislav, a CS student working on porting the BIRD Internet Routing Daemon to HelenOS as his thesis, paid us a one-day visit to demo and also work a little bit on, well, just that: porting BIRD to HelenOS.

Apart from coding, of which there was plenty (12-hour shifts not being an exception), we managed to make a short trip to the Lichnice castle, have two BBQ's, stargaze and drink beer.

BBQ with current and future developers

All in all, we enjoyed a fun and productive week with a lot of opportunities to talk and plan ahead. I am already looking forward to HelenOS Camp 2017!