Marcel Köppen, J. Traue, C. Borchert, J. Nolte, O. Spinczyk
{"title":"Cache-Line Transactions: Building Blocks for Persistent Kernel Data Structures Enabled by AspectC++","authors":"Marcel Köppen, J. Traue, C. Borchert, J. Nolte, O. Spinczyk","doi":"10.1145/3365137.3365396","DOIUrl":"https://doi.org/10.1145/3365137.3365396","url":null,"abstract":"With the availability of systems that contain large amounts of byte-addressable non-volatile memory (NVRAM), there is a growing need for data structures that can be mapped into a process's address space and be used without data (de-)serialization. While NVRAM is able to retain memory contents during system failure and power loss, data consistency has to be preserved by using transactional operations for data manipulation. This paper describes a lightweight and efficient transaction mechanism for small data structures in memory-mapped NVRAM. The size per data structure is limited to half a cache-line, so that the approach cannot serve as a general purpose mechanism for arbitrary applications, but could be used within an operating system as a low-level building block for more complex data structures. By using aspect-oriented programming with AspectC++, the mechanism can be used in an almost transparent manner, which helps to avoid many possible sources for bugs.","PeriodicalId":193757,"journal":{"name":"Proceedings of the 10th Workshop on Programming Languages and Operating Systems","volume":"226 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2019-10-27","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"133510287","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"Exploring Rust for Unikernel Development","authors":"Stefan Lankes, Jens Breitbart, Simon Pickartz","doi":"10.1145/3365137.3365395","DOIUrl":"https://doi.org/10.1145/3365137.3365395","url":null,"abstract":"System-level development has been dominated by programming languages like C/C++ for decades. These languages are inherently unsafe, error-prone, and a major reason for vulnerabilities. High-level programming languages with a secure memory model and strong type system are able to improve the quality of the system software. In this paper, we explore the programming language Rust for kernel development and present RustyHermit, which is a unikernel completely written in Rust without any C/C++. We show that the support for RustyHermit can be transparently integratable in the Rust toolchain and common Rust applications are build-able on top of RustyHermit. Previously, we developed the C-based unikernel HermitCore with a similar design to RustyHermit and we are able to compare both kernels. We show that the performance of both kernels is similar and only ~3.27 % of RustyHermit relies on unsafe code, that cannot be checked by the compiler in detail.","PeriodicalId":193757,"journal":{"name":"Proceedings of the 10th Workshop on Programming Languages and Operating Systems","volume":"53 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2019-10-27","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"127853164","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"Rethinking Communication in Multiple-kernel OSes for New Shared Memory Interconnects","authors":"A. Barbalace, Pierre Olivier, B. Ravindran","doi":"10.1145/3365137.3365399","DOIUrl":"https://doi.org/10.1145/3365137.3365399","url":null,"abstract":"Future computer platforms will likely be built with a multitude of on-chip and off-chip processing units being potentially of different ISAs, OS-capable, and sharing memory with a form of consistency. Multiple-kernel OSes, from multikernels to single-system image OSes, have been demonstrated to mange such platforms efficiently, but they assume no shared memory between kernels as a founding principle. This position paper proposes a new multiple-kernel OS design, which leverages consistent shared memory across homogeneous and heterogeneous processing units in a machine. Among other benefits, this design enables porting commodity SMP OSes to such future platforms, capitalizing on their shared memory programming model, and extend them to multiple-kernel OSes. Herein we present such design, based on two new software primitives tackling the problem of sharing and data format differences between eventually heterogeneous computing units: typed shared memory and type-morphable executable code. We also describe an initial implementation built around Popcorn Linux for x86 and ARM.","PeriodicalId":193757,"journal":{"name":"Proceedings of the 10th Workshop on Programming Languages and Operating Systems","volume":"72 1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2019-10-27","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"123099315","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"A Persistent Problem: Managing Pointers in NVM","authors":"Daniel Bittman, P. Alvaro, E. Miller","doi":"10.1145/3365137.3365397","DOIUrl":"https://doi.org/10.1145/3365137.3365397","url":null,"abstract":"Byte-addressable non-volatile memory (NVM) placed alongside DRAM promises a fundamental shift in software abstractions, yet many approaches to using NVM promise merely incremental improvement by relying on old interfaces and archaic abstractions. We assert that redesigning the core programming model presented by the operating system is vital to best exploiting this technology. We are developing Twizzler, an OS that presents an effective programming model for NVM sufficient to construct persistent data structures that can be easily and globally shared without serialization costs. We consider and evolve a key-value store that runs on Twizzler, and demonstrate how our programming model improves programmability with early experiments indicating performance need not be lost and may be improved.","PeriodicalId":193757,"journal":{"name":"Proceedings of the 10th Workshop on Programming Languages and Operating Systems","volume":"17 1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2019-10-27","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"126964950","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"Taxonomy of Package Management in Programming Languages and Operating Systems","authors":"Hisham H. Muhammad, L. V. Real, Michael Homer","doi":"10.1145/3365137.3365402","DOIUrl":"https://doi.org/10.1145/3365137.3365402","url":null,"abstract":"Package management is instrumental for programming languages and operating systems, and yet it is neglected by both areas as an implementation detail. For this reason, it lacks the same kind of conceptual organization: we lack terminology to classify them or to reason about their design trade-offs. In this paper, we share our experience in both OS and language-specific package manager development, categorizing families of package managers and discussing their design implications beyond particular implementations. We also identify possibilities in the still largely unexplored area of package manager interoperability.","PeriodicalId":193757,"journal":{"name":"Proceedings of the 10th Workshop on Programming Languages and Operating Systems","volume":"29 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2019-10-27","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"121610460","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Florian Rommel, Lennart Glauer, Christian J. Dietrich, Daniel Lohmann
{"title":"Wait-Free Code Patching of Multi-Threaded Processes","authors":"Florian Rommel, Lennart Glauer, Christian J. Dietrich, Daniel Lohmann","doi":"10.1145/3365137.3365404","DOIUrl":"https://doi.org/10.1145/3365137.3365404","url":null,"abstract":"In the operation and maintenance phase of a deployed software component, security and bug-fix updates are regular events. However, for many high-availability services, costly restarts are no acceptable option as the induced downtimes lead to a degradation of the service quality. One solution to this problem are live updates, where we inject the desired software patches directly into the volatile memory of a currently running process. However, before the actual patch gets applied, most live-update methods use a stop-the-world approach to bring the process into a safe state; an operation that is highly disruptive for the execution of multi-threaded programs. In this paper, we present a wait-free approach to inject code changes into a running multi-threaded process. We avoid the disruption of a global barrier synchronization over all threads by first preparing a patched clone of the process's address space. Into the updated address space, we gradually migrate individual threads at predefined quiescence points while all other threads make uninterrupted progress. In a first case study with a simple network service, we could completely eliminate the impact of applying a live update on the request latency.","PeriodicalId":193757,"journal":{"name":"Proceedings of the 10th Workshop on Programming Languages and Operating Systems","volume":"26 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2019-10-27","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"129949684","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Jingmei Hu, Eric Lu, David A. Holland, Ming Kawaguchi, Stephen Chong, M. Seltzer
{"title":"Trials and Tribulations in Synthesizing Operating Systems","authors":"Jingmei Hu, Eric Lu, David A. Holland, Ming Kawaguchi, Stephen Chong, M. Seltzer","doi":"10.1145/3365137.3365401","DOIUrl":"https://doi.org/10.1145/3365137.3365401","url":null,"abstract":"Recent advances in program synthesis convinced us that it was the right time to transform the process of porting an operating system into a program synthesis problem. We set out to synthesize the needed machine dependent code for an existing operating system. This undertaking proved far more challenging than we anticipated. We summarize our experience and lessons learned and propose next steps in realizing such an undertaking.","PeriodicalId":193757,"journal":{"name":"Proceedings of the 10th Workshop on Programming Languages and Operating Systems","volume":"4 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2019-10-27","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"121143195","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
D. Carver, Redha Gouicem, Jean-Pierre Lozi, Julien Sopena, Baptiste Lepers, W. Zwaenepoel, Nicolas Palix, J. Lawall, Gilles Muller
{"title":"Fork/Wait and Multicore Frequency Scaling: a Generational Clash","authors":"D. Carver, Redha Gouicem, Jean-Pierre Lozi, Julien Sopena, Baptiste Lepers, W. Zwaenepoel, Nicolas Palix, J. Lawall, Gilles Muller","doi":"10.1145/3365137.3365400","DOIUrl":"https://doi.org/10.1145/3365137.3365400","url":null,"abstract":"The complexity of computer architectures has risen since the early years of the Linux kernel: Simultaneous Multi-Threading (SMT), multicore processing, and frequency scaling with complex algorithms such as Intel® Turbo Boost have all become omnipresent. In order to keep up with hardware innovations, the Linux scheduler has been rewritten several times, and many hardware-related heuristics have been added. Despite this, we show in this paper that a fundamental problem was never identified: the POSIX process creation model, i.e., fork/wait, can behave inefficiently on current multicore architectures due to frequency scaling. We investigate this issue through a simple case study: the compilation of the Linux kernel source tree. To do this, we develop SchedLog, a low-overhead scheduler tracing tool, and SchedDisplay, a scriptable tool to graphically analyze SchedLog's traces efficiently. We implement two solutions to the problem at the scheduler level which improve the speed of compiling part of the Linux kernel by up to 26%, and the whole kernel by up to 10%.","PeriodicalId":193757,"journal":{"name":"Proceedings of the 10th Workshop on Programming Languages and Operating Systems","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2019-10-27","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"129647722","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Keunhong Lee, Jeehoon Kang, Wonsup Yoon, Joongi Kim, S. Moon
{"title":"Enveloping Implicit Assumptions of Intrusive Data Structures within Ownership Type System","authors":"Keunhong Lee, Jeehoon Kang, Wonsup Yoon, Joongi Kim, S. Moon","doi":"10.1145/3365137.3365403","DOIUrl":"https://doi.org/10.1145/3365137.3365403","url":null,"abstract":"Intrusive data structures (IDSes) are heavily used in system programming, where achieving high performance is one of the most important design goals. Yet, they are not supported in today's ownership type system that offer memory-safety without garbage collection. Instead, IDSes force programmers to choose either unsafety or runtime overhead. This limitation stems from the implicit assumptions pertaining to the memory layouts and access patterns created by IDSes. In this paper, we propose a new technique, referred to as ownership pooling, which defines ownership for IDSes. Ownership pooling consists of three new types, FieldOf, OwnershipPool, and Shared, and their conversion rules. We implemented the proposed types within Rust's type system and compared its performance capabilities against the existing memory-safe implementations and the C++ implementation without memory safety as baseline. The performance of our implementation shows far better performance than that of the existing memory-safe ones and comparable to that of C++ implementation without memory safety.","PeriodicalId":193757,"journal":{"name":"Proceedings of the 10th Workshop on Programming Languages and Operating Systems","volume":"37 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2019-10-27","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"114859141","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Bernhard Heinloth, Marco Ammon, D. T. Nguyen, Timo Hönig, V. Sieh, Wolfgang Schröder-Preikschat
{"title":"Cocoon","authors":"Bernhard Heinloth, Marco Ammon, D. T. Nguyen, Timo Hönig, V. Sieh, Wolfgang Schröder-Preikschat","doi":"10.1145/3365137.3365398","DOIUrl":"https://doi.org/10.1145/3365137.3365398","url":null,"abstract":"As computer processors and their hardware designs continuously evolve, operating systems provide many different assembly-level implementations for the same functionality. This enables support for new platforms and ensures backward compatibility for older ones at the same time. However, the source code of operating systems grows more complex and becomes much harder to maintain. In this paper we explore ways to build made-to-measure system software by relegating work to the compiler which has necessary knowledge about the system at hand. We propose Cocoon, an approach for compiling a system-tailored and -optimized kernel at boot time. For two operating systems (i.e., Linux and FreeBSD) we demonstrate the soundness of the approach by hands of a prototypical implementation. The implementation shows various aspects of Cocoon, such as the ability to remove hard-to-maintain code while preserving and even increasing the system performance.","PeriodicalId":193757,"journal":{"name":"Proceedings of the 10th Workshop on Programming Languages and Operating Systems","volume":"191 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2019-10-27","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"129707519","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}