Scalable reference counters in X15

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.

Per-CPU variables in X15

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.