Coscheduling in the Multicore Era
Total Page:16
File Type:pdf, Size:1020Kb
Coscheduling in the Multicore Era The Art of Doing Things Simultaneously vorgelegt von Dipl.-Inform. Jan H. Schönherr von der Fakultät IV – Elektrotechnik und Informatik der Technischen Universität Berlin zur Erlangung des akademischen Grades Doktor der Ingenieurwissenschaften – Dr.-Ing. – genehmigte Dissertation Promotionsausschuss: Vorsitzender: Prof. Dr. Odej Kao Gutachter: Prof. Dr. Hans-Ulrich Heiß Gutachter: Prof. Dr.-Ing. Jan Richling Gutachter: Prof. Dr. Andreas Polze Tag der wissenschaftlichen Aussprache: 19. Juni 2019 Berlin 2019 ii Kurzzusammenfassung Der Begriff Coscheduling bezeichnet in seiner weitesten Definition die bewusst gleichzeitige Ausführung ausgewählter Tasks auf mehreren CPUs. Coscheduling und der verwandte Begriff Gang Scheduling wurden in den 80er bzw. 90er Jahren geprägt, als die ersten Mehrprozessorsysteme entwickelt wurden, bzw. sie weitere Verbreitung fanden. Die garantierte gleichzeitige Ausführung von bestimmten Tasks erlaubt die effiziente Realisierung von feingranularer Synchronisation und Kommunikation, ohne dass es zu möglicherweise langen Wartezeiten kommt, weil auf einen gera- de nicht laufenden Task gewartet werden muss. Im Vergleich zu beispielsweise Stapelverarbeitung oder der Partitionierung des Systems im Raum erlaubt es Coscheduling, die gerade laufende parallele Anwendung zu Gunsten einer ande- ren zu unterbrechen, wodurch Schedulingverfahren nun nicht mehr auf einzelnen sequentiellen Tasks operieren, sondern auf ganzen parallelen Anwendungen. Seitdem hat sich die IT-Landschaft deutlich weiterentwickelt: aufgrund des Siegeszugs des (nicht parallelen) PCs ist die Thematik Parallelität zunächst in den Hintergrund getreten. Erst als weitere Taktsteigerungen nicht mehr mög- lich waren, wurde Parallelität wieder interessant. Im Vergleich zu früher gibt es allerdings zwei bedeutende Unterschiede: 1. Durch die vergleichsweise langsame Wiedereinführung von parallelen Sys- temen fand keine Neuentwicklung von Software statt, sondern eine Ad- aption. Damit werden aktuelle Mehrkernsysteme eher als verteiltes Sys- tem denn als paralleles System behandelt: aktuelle Betriebssysteme kennen das Konzept einer parallelen Anwendung nicht; Coscheduling und andere Managementansätze sind ihnen fremd, worunter die Ausführung tatsäch- lich paralleler Anwendungen leidet. Zudem wird herangehenden Software- entwicklern (außerhalb der HPC-Nische) die Entwicklung entsprechender Software selten nahe gebracht. 2. Aktuelle Mehrkernsysteme unterscheiden sich in ihrer Architektur stark von frühen parallelen Systemen und Clustern. Dies führt dazu, dass sich die Lösungen von damals nicht ohne weiteres auf heutige Systeme übertra- gen lassen. Inbesondere gibt es in heutigen Systemen diverse Ressourcen, die sich mehrere CPUs teilen müssen, wie z. B. Speicherbandbreite oder Caches. Dies führt zu Ressourcenengpässen, die zu mehr oder weniger star- ken Leistungseinbußen individueller Tasks führen können. Die Forschung iii iv schlägt hier zumeist ein geschicktes Gruppieren von Tasks vor, so dass Ressourcenengpässe nach Möglichkeit minimiert werden – im Prinzip eine andere Form von Coscheduling. Während jeder Vorschlag für sich seine Daseinsberechtigung hat, ist eine Integration in bestehende Systeme meist unpraktikabel, da der Fokus oft eingeschränkt ist und die verschiedenen Ideen in Konflikt miteinander stehen. In dieser Dissertation wird das Konzept Coscheduling auf heutige Mehrkern- systeme übertragen und adaptiert. Die früher gültigen Vor- und Nachteile wer- den neu bewertet und alte wie neue Anwendungsszenarien betrachtet. Aus einem Anforderungskatalog heraus wird ein Coschedulingverfahren konzipiert, das den heutigen Erwartungen von Anwendungs- und Betriebssystementwicklern gerecht wird. Es wird eine Methode dargelegt, wie besagtes Verfahren in bestehende Betriebssysteme integriert werden kann, ohne dass es zu einer wesentlichen Ver- haltensänderung des ursprünglichen Schedulers kommt. Es wird gezeigt, welche neuen Managementmöglichkeiten sich dadurch für das Betriebssystem ergeben und welchen Einfluss dies in Zukunft auf die Entwicklung paralleler Anwendun- gen und Betriebssysteme haben wird. Abstract In its most general definition, coscheduling refers to a deliberate simultaneous execution of certain tasks on multiple CPUs. The concepts of coscheduling and gang scheduling have been introduced in the early eighties and nineties, respectively. At that time, the first massively parallel systems were developed and became more widely used. The guarantee of simultaneous execution of certain tasks allows to make use of fine-grained synchronization efficiently: it is impossible for a currently executing task to wait for another task that does not make progress. Compared to batch processing and partitioning in space, coscheduling allows to preempt a running parallel application in favor of another more important application. This context switch at application level offers more flexibility for schedulers. Since then, there have been thorough changes in the computing landscape: (non-parallel) personal computers have penetrated the market, and with it, par- allelism had become a second-class citizen. Parallelism has only recently become important again, after single-thread performance could not be increased by the usual margins anymore. However, parallelism today differs from parallelism back then, mostly because of the following two reasons: 1. The reintroduction of parallel systems happened not overnight but as a gradual process. Due to this, existing software was adapted to run on parallel systems instead of being rewritten. This adapted software han- dles contemporary multicore systems as if they were distributed systems instead of the parallel systems they are: current operating systems have no concept of a parallel application; they do not know about coscheduling or other management approaches, hampering real parallel applications. To make matter worse, budding software developers (outside of the HPC niche) are seldom taught the subtleties of parallel software development. 2. The properties of today’s multicore architectures differ substantially from early parallel systems and clusters. For this reason it is not always possible to reuse once valid solutions. In particular, CPUs in today’s system have to share a multitude of resource, such as memory bandwidth of caches. This results in resource contention with a more or less noticeable impact on performance of individual tasks. In most cases research suggests to avoid or reduce resource contentions by grouping tasks skillfully – which is basically a form of coscheduling. However, an integration of these research v vi ideas into existing systems is impractical more often than not, because individual ideas – while solving their specific use case – are difficult to combine with their rather narrow focus. This thesis is ports the concept coscheduling to contemporary multicore archi- tectures. Advantages and disadvantages known from other parallel architectures are reevaluated, and a catalog of use cases – old and new – is compiled. The combined requirements of these use cases form the basis for a versatile coschedul- ing model. A flexible coscheduling approach is devised, which measures upto today’s expectations of application and operating system developers alike. In particular, a method is included that allows to integrate coscheduling functional- ity into existing general purpose schedulers without changing their characteristic traits substantially. Newly enabled management opportunities within the oper- ating system are discussed and their influence on the design of upcoming parallel applications and operating systems are explored. To Cindy. Without her I would not have embarked on this journey. vii viii Contents Kurzzusammenfassung iii Abstract v Contents ix 1 Introduction 1 1.1 The Significance of Coscheduling . 2 1.2 Problem Statement . 3 1.3 Contribution . 4 1.4 Structure of this Thesis . 4 1.5 Chapter Notes . 5 I Coscheduling Foundation 7 2 Why Coscheduling? 11 2.1 Application Design . 13 2.1.1 Active Waiting . 13 2.1.2 Synchronous Execution . 18 2.1.3 Architecture-specific Optimizations . 21 2.2 Resource Management . 22 2.2.1 Improved Data Sharing . 23 2.2.2 Reduced Resource Contention . 24 2.2.3 Physical Operation . 26 2.3 System Design . 27 2.3.1 Application Management . 27 2.3.2 Security . 30 2.3.3 Device Management . 31 2.4 Chapter Notes . 33 3 Coscheduling Model 35 3.1 Basic Terms . 35 3.1.1 Software . 36 3.1.2 Hardware . 37 3.1.3 Parallelism . 38 ix x CONTENTS 3.2 Cherry-picking Coscheduling Terms . 38 3.2.1 Ousterhout’s Coscheduling . 38 3.2.2 Feitelson’s Gang Scheduling . 39 3.2.3 Arpaci-Dusseau’s Implicit Coscheduling . 40 3.2.4 VMware’s Relaxed Coscheduling . 40 3.3 Aspects of Time . 41 3.4 Aspects of Space . 44 3.5 Coscheduled Sets . 46 3.6 Theory vs. Practice . 50 3.7 Chapter Notes . 52 4 Coscheduling Approaches 53 4.1 Ousterhout’s Coscheduling . 53 4.2 Distributed Hierarchical Control . 54 4.3 Distributed Queue Tree . 56 4.4 Coscheduling in VMware ESXi . 56 4.5 Further Considerations . 57 4.6 Chapter Notes . 58 II Coscheduler Design 59 5 Design Rationales 63 5.1 Versatility . 63 5.2 Scalability . 64 5.3 Interactivity . 64 5.4 Non-intrusiveness . 65 5.5 Chapter Notes . 65 6 Topology-aware Coscheduling 67 6.1 Basic Structure . 67 6.1.1 Synchronization Domains . 67 6.1.2 Scheduling . 69 6.1.3 Fairness . 70 6.2 Mapping of Coscheduled Sets . 74 6.2.1 Time constraints . 75 6.2.2 Placement constraints . 76 6.3 Load Balancing . 77 6.4 Fragmentation avoidance