Corey: An Operating System for Many Cores - Boyd-Wickizer, Silas; Chen, Haibo; Chen, Rong; Mao, Yandong; Kaashoek, Frans; Morris, Robert; Pesterev, Aleksey; Stein, Lex; Wu, Ming; Dai, Yuehua; Zhang, Yang; Zhang, Zheng (OSDI '08, 2008)
Multiprocessor application performance can be limited by the operating system when the application uses the operating system frequently and the operating system services use data structures shared and modified by multiple processing cores. If the application does not need the sharing, then the operating system will become an unnecessary bottleneck to the application’s performance. This paper argues that applications should control sharing: the kernel should arrange each data structure so that only a single processor need update it, unless directed otherwise by the application. Guided by this design principle, this paper proposes three operating system abstractions (address ranges, kernel cores, and shares) that allow applications to control inter-core sharing and to take advantage of the likely abundance of cores by dedicating cores to specific operating system functions. Measurements of microbenchmarks on the Corey prototype operating system, which embodies the new abstractions, show how control over sharing can improve performance. Application benchmarks, using MapReduce and a Web server, show that the improvements can be significant for overall performance: MapReduce on Corey performs 25% faster than on Linux when using 16 cores. Hardware event counters confirm that these improvements are due to avoiding operations that are expensive on multicore machines.
The 8th USENIX Symposium on Operating Systems Design and Implementation