Tackling Os Complexity with Declarative Techniques
Total Page:16
File Type:pdf, Size:1020Kb
DISS. ETH NO. 20930 TACKLING OS COMPLEXITY WITH DECLARATIVE TECHNIQUES A dissertation submitted to ETH ZURICH for the degree of Doctor of Sciences presented by ADRIAN LAURENT SCHÜPBACH Master of Science ETH in Computer Science, ETH Zurich 19. April 1981 citizen of Landiswil, BE accepted on the recommendation of Prof. Dr. Timothy Roscoe Prof. Dr. Gustavo Alonso Prof. Dr. Hermann Härtig 2012 ii Kurzfassung Diese Dissertation zeigt, dass die erhohte¨ Betriebssystemkomplexitat,¨ die durch die Notwendigkeit ent- steht, sich an eine grosse Anzahl unterschiedlicher Rechnersysteme anzupassen, mittels deklarativer Techniken signifikant reduziert werden kann. Moderne Hardware ist zunehmend unterschiedlich und komplex. Es ist wahrscheinlich, dass sich diese Entwicklung in Zukunft fortsetzt. Diese Entwicklung erschwert den Betriebssystembau. Betriebs- systeme mussen¨ sich der Rechnerarchitektur optimal anpassen. Sie mussen¨ den gesamten Funktionsum- fang des Rechners ausschopfen,¨ um die volle Leistung des kompletten Systems zu gewahrleisten.¨ Vom Betriebssystem ungenutzte,¨ suboptimal genutzte¨ oder gar falsch genutzte¨ Rechnerfunktionalitat¨ fuhrt¨ zu geringerer Leistung des Gesamtsystems. Traditionelle Betriebssysteme passen sich durch vorgefertigte Regeln, die im ganzen Betriebssystem verteilt und mit der eigentlichen Betriebssystemfunktionalitat¨ ver- mischt sind, der Rechnerarchitektur an. In dieser Arbeit argumentiere ich, dass es aus zwei Grunden¨ nicht mehr moglich¨ ist, vorgefertigte Re- geln fur¨ eine Anzahl bekannter Rechnerarchitekturen mit der Betriebssystemfunktionalitat¨ zu vermischen. Erstens garantieren vorgefertigte Regeln nicht, dass alle Rechnerfunktionen vollstandig¨ ausgeschopft¨ wer- den. Zweitens bedeutet das, dass die Regeln fur¨ jede neue Rechnerarchitektur angepasst werden mussen,¨ wobei die Regeln fur¨ bisherige Rechnerarchitekturen beibehalten werden mussen.¨ Dies fuhrt¨ zu erheb- licher Betriebssystemkomplexitat¨ und schliesslich zu einem enormen Anpassungsaufwand. Um dies zu vermeiden, muss das Betriebssystem wahrend¨ der Laufzeit Wissen uber¨ die Rechnerarchitektur aufbau- en und daraus, durch logische Schlussfolgerungen, die bestmoglichen¨ Anpassungsregeln ableiten. Dies fuhrt¨ zu einfacheren, verstandlicheren,¨ pflegeleichteren und leichter anpassbaren Betriebssystemfunktio- nen und stellt sicher, dass die Rechnerfunktionalitat¨ vollstandig¨ ausgeschopft¨ wird. Der Wissensaufbau und das Ableiten von Anpassungsregeln durch logische Schlussfolgerungen sind mit hoher Programmierkomplexitat¨ verbunden. Dies gilt insbesondere, wenn dafur¨ maschinennahe Pro- grammiersprachen, wie zum Beispiel C, verwendet werden. Deklarative Techniken erlauben hingegen, angestrebte Regeln durch eine einfache und verstandliche¨ Beschreibung der gewunschten¨ Art der Anpas- sung, basierend auf Wissen uber¨ die Rechnerarchitektur, abzuleiten. Durch die naturliche¨ Beschreibung in hoheren¨ Programmiersprachen wird die Programmierkomplexitat¨ stark verringert. Um den Vorteil deklarativer Techniken im Zusammenhang mit Komplexitat¨ und Anpassungsfahigkeit¨ in Betriebssystemen zu beweisen, stelle ich in dieser Dissertation verschiedene Fallstudien vor, die, basie- rend auf deklarativen Techniken, Regeln fur¨ die Anpassung an die Rechnerarchitektur, mittels logischer Schlussfolgerungen, ableiten. Die Fallstudien setzen kein Wissen uber¨ die Rechnerarchitektur voraus, sondern eignen sich dies wahrend¨ der Laufzeit an. Das Wissen wird in einem zentralen Wissensdienst des Betriebssystems aufgebaut. Regeln werden in diesem Wissensdienst durch logische Schlussfolgerung abgeleitet. Dadurch, dass die Fallstudien, und somit die verschiedenen Betriebssystemkomponenten, diesen Wissensdienst benutzen¨ konnen,¨ wird ihre Komplexitat¨ nochmals deutlich verringert. Es ist somit nicht notig,¨ dass sich jede einzelne Betriebs- systemkomponente mit der Wissensgewinnung und der Ableitung von Regeln beschaftigt.¨ Mit dieser Implementation beweise ich die praktische Anwendbarkeit deklarativer Techniken in Betriebssystemen. iii iv Abstract This thesis argues that tackling the increased operating systems complexity with declarative techniques significantly reduces code complexity involved in adapting to a wide range of modern hardware. Modern hardware is increasingly diverse and complex. It is likely that this trend continues further. This trend complicates the operating systems construction. Operating systems have to adapt to the hard- ware architecture and exploit all features to guarantee the best possible overall system performance. Not exploiting all hardware features or using them in a suboptimal or even wrong way results in lower overall system performance. Traditionally, operating systems adapt to the underlying architecture by predefined policies, which are intermangled with the core operating systems functionality. In this thesis I argue that it is not anymore possible to encode predefined policies for a set of known hardware architectures into the operating system for two reasons. First, predefined policies do not auto- matically guarantee that hardware features are fully exploited on all hardware platforms. Second, for this reason, predefined policies would need to be ported to many different hardware platforms, while, at the same time, it would be necessary to keep the policies suited for older platforms. This leads to significant operating systems complexity and finally to high engineering effort, when porting the operating system to new hardware platforms. To avoid this problem, the operating systems must gain hardware knowledge at runtime and derive policies suitable for the current architecture through online reasoning about the hardware. This leads to simpler, better understandable, more maintainable and easier portable operating systems code, while ensuring that the operating system exploits the hardware features as best as possible. Reasoning about hardware and deriving policies is a complex task. This is especially the case, if low-level languages like C are used. Instead, declarative techniques allow to derive policies through a simple description of how to adapt to the hardware based on hardware knowledge gathered at runtime. The natural description in a high-level declarative language reduces code complexity significantly. To prove the usefulness of declarative techniques in the context of adaptability of operating systems and handling of complexity, I present several case studies in this thesis. The case studies are based on declarative techniques. They reason about hardware and derive policies based on hardware knowledge. The case studies do not assume any a priori knowledge about the current hardware platform. Instead, they gain knowledge at runtime by online reasoning about the hardware. A central knowledge service stores hardware knowledge and allows to derive policies according to declarative rules. Because the case studies, and therefore the operating system components, can use the central service, their complexity is again reduced significantly. It is not necessary, that every single component deals with knowledge gathering and deriving policies by itself. It pushes this part to the knowledge service. With this implementation I prove the practical feasibility of applying declarative techniques in real operating systems. v vi Contents 1 Introduction 1 1.1 Motivation . .2 1.1.1 Diversity . .4 1.1.2 The interconnect network . .5 1.1.3 Managing Hardware . .6 1.1.4 Managing Applications . .8 1.2 Problem Statement and Hypothesis . .8 1.3 Goals . .8 1.4 Contributions . .9 1.5 Structure . .9 2 Background 11 2.1 Declarative Techniques . 11 2.1.1 What is declarative programming? . 11 2.1.2 Declarative languages . 12 2.1.3 Constraint logic programming . 13 2.1.4 CLP programming in ECLiPSe ........................... 13 2.2 Barrelfish . 14 2.2.1 The Multikernel . 14 2.2.2 A Barrelfish “node” . 16 2.2.3 Explicit access to physical resources . 17 2.2.4 Messaging . 18 2.2.5 Drivers and services . 18 2.3 Reasoning in operating systems . 19 2.3.1 Hardware representation . 19 2.3.2 Declarative hardware access and configuration . 19 2.3.3 Resource allocation . 20 2.4 Declarative reasoning in networks . 20 2.5 Summary . 21 3 The system knowledge base 23 3.1 Introduction . 23 3.2 Background . 24 3.2.1 Knowledge . 24 3.2.2 Knowledge bases . 25 3.3 How does the SKB help the operating system? . 26 3.3.1 Purpose . 26 vii viii CONTENTS 3.3.2 Examples . 26 3.3.3 Common patterns of resource allocation descriptions . 27 3.3.4 When to use the SKB . 28 3.4 Design . 29 3.4.1 Design principles . 29 3.4.2 Overall architecture . 31 3.4.3 Core . 31 3.4.4 Interface . 32 3.4.5 Facts, schema and queries . 33 3.4.6 Data gathering . 34 3.4.7 Algorithms . 35 3.4.8 A note on security . 36 3.5 Implementation . 37 3.5.1 Implementation of the SKB server . 37 3.5.2 Facts and schema . 37 3.5.3 Datagatherer . 39 3.5.4 Common queries . 39 3.5.5 Startup . 40 3.6 Client library . 40 3.6.1 Using and initializing the library . 40 3.6.2 Interacting with the SKB . 40 3.7 Evaluation . 43 3.7.1 Code complexity . 44 3.7.2 Memory overhead . 44 3.7.3 Performance . 45 3.8 Discussion . 45 3.8.1 Advantages . 45 3.8.2 Disadvantages . 47 3.8.3 Approaching a configuration problem in CLP . 49 3.9 Summary . 50 4 Coordination 51 4.1 Introduction . 51 4.2 Background . 52 4.3 Approach . 53 4.3.1 Design principles . 53 4.3.2 Octopus . 53 4.3.3 Records and Record Queries . 54 4.3.4 Record Store . ..