Doctoral Thesis: The Benefits and Costs of Writing a POSIX Kernel in a High-Level Language

SHARE:

Event Speaker: 

Cody Cutler

Event Location: 

32-D463

Event Date/Time: 

Thursday, May 2, 2019 - 2:00pm

Abstract

This thesis presents an evaluation of the use of a high-level language (HLL)

with garbage collection to implement a monolithic POSIX-style kernel. The goal

is to explore if it is reasonable to use an HLL instead of C for such kernels,

by examining performance costs, implementation challenges, and programmability

and safety benefits.

 

The thesis contributes Biscuit, a kernel written in Go that implements enough

of POSIX (virtual memory, mmap, TCP/IP sockets, a logging file system, poll,

etc.) to execute significant applications. Biscuit makes liberal use of Go's

HLL features (closures, channels, maps, interfaces, garbage collected heap

allocation), which subjectively made programming easier. The most challenging

puzzle was handling the possibility of running out of kernel heap memory;

Biscuit benefited from the analyzability of Go source to address this

challenge.

 

On a set of kernel-intensive benchmarks (including NGINX and Redis) the

fraction of kernel CPU time Biscuit spends on HLL features (primarily garbage

collection and thread stack expansion checks) ranges up to 13%. The longest

single GC-related pause suffered by NGINX was 115 microseconds; the longest

observed sum of GC delays to a complete NGINX client request was 600

microseconds. In experiments comparing nearly identical system call, page

fault, and context switch code paths written in Go and C, the Go version was 5%

to 15% slower.

Thesis Supervisor(s): Frans Kaashoek and Robert Morris