It’s been a while since I’ve written about the progress on X15. As an open source project I work on in my free time, its development pace is unsurprisingly not constant, but despite that, a lot of progress was made since it was seriously restarted in 2017.
Among the goals of the X15 operating system is real time. This expression is undoubtedly one of the vaguest buzzwords out there in the computer industry, which means I can’t really say anything about it without first attempting to provide a decent definition. More »
This could be the title of a novel, but no, the subject is really about computers and systems. More »
As an intended successor to the Mach microkernel, X15 inherited some of its trends, in both its internal APIs and its implementation. More »
Well, Buildbot didn’t turn out well. Quality is too low for my taste, so I decided to switch to another one, namely Jenkins. And for now, despite not being very fond of Java applications, I’m quite satisfied. It supports the basic features I was looking for (automatic building, decent configuration power, a nice web interface, users and rights management, IRC notifications), but I was also surprised by multi-configuration builds, which fit perfectly with my needs.
Despite being small, X15 already supports quite a few configurations, such as i386 (32-bits x86, with or without PAE), amd64 (also known as x86_64) and a bunch of test modules. It’s very likely to support more in the future, so I decided to take some time and try Buildbot, a continuous integration framework, to automate builds with varying options. A link to the web interface is now in the main menu bar of the web site.
The new sref module provides scalable reference counters, implemented as described in the RadixVM paper (3.1 Reference counting with Refcache). Weak references aren’t supported, since I’m not sure they’ll actually be needed, but it’s already realtime-friendly, as all critical sections implemented by disabling preemption are constant-time and short, and also dyntick-friendly, by tracking which processors actually participate in reference counting, without the need to regularly wake idle processors to function. Along with per-processor page tables, this was the last major step towards revamping (and completing) the virtual memory system.
As I started working on a Refcache prototype (Refcache being a scalable reference counting scheme introduced in the RadixVM paper), tests run with little physical memory (currently 6 MB, could be less but Grub seems to require that much) started to fail. The introduction of the delta caches blew the size of the bss section up by about 10 MB, for only 32 processors at most. It was time to provide real support for percpu variables, at least those that are statically allocated.