Kernel, Graphics, and Recent Collabora Work
-
Kernel Space
-
LWN ☛ A proposal for shared memory in BPF programs
Alexei Starovoitov introduced a patch series for the Linux kernel on February 6 to add bpf_arena, a new type of shared memory between BPF programs and user space. Starovoitov expects arenas to be useful both for bidirectional communication between user space and BPF programs, and for use as an additional heap for BPF programs. This will likely be useful to BPF programs that implement complex data structures directly, instead of relying on the kernel to supply them. Starovoitov cited Google's ghOSt project as an example and inspiration for the work.
BPF programs already have several ways to communicate with user space, including ring buffers, hash maps, and array maps. However, there are drawbacks to each of these methods. Ring buffers can be used to send performance measurements or trace events to user-space processes — but not to receive data from user space. Hash maps can be used for this purpose, but accessing them from user space requires making a bpf() system call. Array maps can be mapped into a user-space process's address space using mmap(), but Starovoitov notes that their ""disadvantage is that memory for the whole array is reserved at the start"". Array maps (and the new arenas) are stored in non-pageable kernel memory, so unused pages have a noticeable resource-usage cost.
-
LWN ☛ Windows NT synchronization primitives for Linux
The futex mechanism provided by the kernel allows for the creation of efficient and flexible locking primitives in user space. Futexes work well for many applications, but not all. One of the exceptions, it seems, is that perennially difficult-to-support use case: Windows games. With this patch series, Elizabeth Figura seeks to provide the sort of locking that those games need, by way of a special-purpose virtual device.
The performance of a futex can be hard to beat when it is used as intended; in the uncontended case, there is no need for a system call at all to acquire one. Surprisingly, though, the Windows NT locking primitives were not designed with the objective of being easy to implement efficiently with futexes; as a result, there are certain operations supported by Windows that are not straightforward to implement on Linux. At the top of the list is operations requiring the simultaneous acquisition of multiple locks.
-
-
Graphics Stack
-
GamingOnLinux ☛ NVIDIA disclose new driver security issues - Feb 28
NVIDIA has revealed new GPU driver security issues in their latest bulletin, so here's what you need to know if you're using an NVIDIA GPU on Linux. This was announced February 28th.
-
-
Collabora (Mostly) in Kernel Space
-
Collabora ☛ What's the latest with WirePlumber?
Back in 2022, after a series of issues were found in its design, I made the call to rework some of WirePlumber's fundamentals in order to allow it to grow. So where are we now? And what's next? Let's dive in!
-
Collabora ☛ A framework to share analytics data in GStreamer
Engineers have widely adopted GStreamer to build video analytics pipelines, and while many companies have indeed built their machine learning analysis framework around GStreamer, no one had made the effort to contribute upstream, until now.
-
Collabora ☛ Smells like team spirit: Meet our newest Collaborans!
With adversity comes the need to rise to the challenge. As the tech climate continues to shift, our talented new joiners have readily jumped in to advance the open source mission.
-
Collabora ☛ Wine on Wayland: A year in review (and a look ahead)
2023 was a great year for the Wayland driver for Wine. After several merge requests, many people are now already able to use the latest Wine release to enjoy some of their favorite backdoored Windows applications in a completely X11-free environment!
-
Collabora ☛ Persian Rug, Part 4 - The limitations of proxies
This is the fourth and final part in a series on persian-rug, a Rust crate for interconnected objects. We've touched on the two big limitations: lack of deletion and lack of enforced matching between proxies and containers. Let's look at other solutions.
-