Understanding the Performance of Mutual Exclusion Algorithms on Modern Multicore Machines

Total Page:16

File Type:pdf, Size:1020Kb

Understanding the Performance of Mutual Exclusion Algorithms on Modern Multicore Machines Understanding the performance of mutual exclusion algorithms on modern multicore machines. Hugo Guiroux To cite this version: Hugo Guiroux. Understanding the performance of mutual exclusion algorithms on modern multicore machines.. Operating Systems [cs.OS]. Université Grenoble Alpes, 2018. English. tel-02133371 HAL Id: tel-02133371 https://tel.archives-ouvertes.fr/tel-02133371 Submitted on 18 May 2019 HAL is a multi-disciplinary open access L’archive ouverte pluridisciplinaire HAL, est archive for the deposit and dissemination of sci- destinée au dépôt et à la diffusion de documents entific research documents, whether they are pub- scientifiques de niveau recherche, publiés ou non, lished or not. The documents may come from émanant des établissements d’enseignement et de teaching and research institutions in France or recherche français ou étrangers, des laboratoires abroad, or from public or private research centers. publics ou privés. THÈSE Pour obtenir le grade de DOCTEUR DE LA COMMUNAUTÉ UNIVERSITÉ GRENOBLE ALPES Spécialité : Informatique Arrêté ministériel : 25 mai 2016 Présentée par Hugo GUIROUX Thèse dirigée par Vivien QUEMA, GRENOBLE INP et codirigée par Renaud LACHAIZE, UNIV. GRENOBLE ALPES préparée au sein du Laboratoire Laboratoire d'Informatique de Grenoble dans l'École Doctorale Mathématiques, Sciences et technologies de l'information, Informatique Comprendre la performance des algorithmes d'exclusion mutuelle sur les machines multicoeurs modernes Understanding the performance of mutual exclusion algorithms on modern multicore machines. Thèse soutenue publiquement le 17 décembre 2018, devant le jury composé de : Monsieur TIMOTHY HARRIS INGENIEUR, AMAZON A CAMBRIDGE - ROYAUME-UNI, Rapporteur Monsieur GAËL THOMAS PROFESSEUR, TELECOM SUD-PARIS, Rapporteur Monsieur ANDRZEJ DUDA PROFESSEUR, GRENOBLE INP, Président Monsieur PASCAL FELBER PROFESSEUR, UNIVERSITE DE NEUCHATEL - SUISSE, Examinateur Monsieur VIVIEN QUEMA PROFESSEUR, GRENOBLE INP, Directeur de thèse Monsieur RENAUD LACHAIZE MAITRE DE CONFERENCES, UNIVERSITE GRENOBLE ALPES, Examinateur We have arranged the whole system as a society of sequential processes whose harmonious cooperation is regulated by explicit mutual synchronization statements. — Edsger W. Dijkstra. To my wife, Justine. Acknowledgements First of all, I would like to thank the members of my Ph.D. thesis jury, Dr. Harris, Pr. Thomas, Pr. Duda and Pr. Felber, which have taken the time to examine my work and made meaningful comments and remarks before and during the defense. It was an honour for me to present my work in front of such a prestigious jury. I would also like to thank my two Ph.D. advisors, Renaud Lachaize and Vivien Quéma, for the long hours that we spent together discussing research ideas, profound scientific questions as well as non-scientific related topics. They both taught me to recognize what is a great research paper, to what standards my work should hold and how to make strong and interesting scientific work. They were here to support me during the difficult yet exciting experience that a Ph.D. can be. Doing this Ph.D. would have been less pleasurable without the member of the ERODS team, with which I had countless discussions. More precisely, I want to thank (in alphabetical order): Maha Alsayasneh, Fabienne Boyer, Thomas Calmant, Matthieu Caneill, Jeremie Decouchant, Amadou Diarra, Didier Donsez, Christopher Ferreira, Soulaimane Guedria, Olivier Gruber, Mohamad Jaafar, Vikas Jaiman, Vincent Lamotte, Vania Marangozova-Martin, Muriel Nguimtsa, Nicolas Palix, Noel de Palma, Albin Pe- tit, Ahmed El Rheddhane and Thomas Ropars. This thesis would not have happened without the financial support of the LIG and the University Grenoble Alpes. During this three years, I had the chance to do an internship inside the MLE team at Oracle Labs Zurich. This experience brought me a lot and opened my mind to other interesting research topics. First and foremost, I would like to thank Vasileios Trigonakis for being a friend, helping me and advising me when I needed it. Thanks to the MLE team and the Oracle Labs: Matthias Branter, Lucas Braun, Laurent Daynès, Bastian Hossbach, Alexander Ulrich and Alexander Schubert. A big shout out to all my friends that were here to support me during the three long years. Without you, I would not have done the Ph.D. that I did, even if you were not directly involved in my work. All the week-ends and holidays that we spent together helped me tremendously. A Ph.D. is a long journey, friends and family are the strong foundation that I needed. Thanks to Fairouz Azzoune, Carla Balbo, Perrine Blachon, Yoann Blein, Sandro Chionna, Jeanne Detroye, Aurélie Estermann, Clément Louis, Jennyfer Martinez, Simon Moura, Célia Muffato. Family is important: they provide a safe environment where anyone can talk openly about their feeling without being judged. I would like to thank both my family and my in-laws for their support iii Acknowledgements throughout the years. A special thank to my sister, who told me to not always take things too seriously and enjoy the life that I had, and to my father, who always gives me invaluable advices and who taught me to always be curious about everything. Finally, a final word for the person that is the most important in my life: Justine. Without you, I would not have done this Ph.D., and I would not have accomplished a lot of things that happened in my life. You were always here to support me and encourage me in everything that I tried to accomplish. You always believed in me, even when I was not. Thank you for everything that you did. Zurich, 05 January 2019 H. G. iv Preface This thesis presents the research conducted in the ERODS team at Laboratoire d’Inform- atique de Grenoble, to pursue a Ph.D. in Computer Science from the doctoral school “Mathématiques, Sciences et Technologies de l’Information, Informatique” of the Uni- versité Grenoble-Alpes. My research activities have been supervised by Vivien Quéma (ERODS / Grenoble INP) and Renaud Lachaize (ERODS / Université Grenoble Alpes). Some of the works presented in this thesis have been done in collaboration with members of the Distributed Programming Laboratory (LPD) of Ecole Polytechnique Fédérale de Lausanne (EPFL) [69]. This thesis studies and analyzes mutual exclusion lock algorithms on multicore appli- cations running on NUMA multicore machines. This work led to the following publications (authors are in alphabetical order): • Hugo Guiroux, Renaud Lachaize, and Vivien Quéma. “Multicore Locks: The Case Is Not Closed Yet”. 2016 USENIX Annual Technical Conference, USENIX ATC 2016, Denver, CO, USA, June 22-24, 2016. Ed. by Ajay Gulati and Hakim Weatherspoon. USENIX Association, 2016, pp. 649–662 • Rachid Guerraoui, Hugo Guiroux, Renaud Lachaize, Vivien Quéma, and Vasileios Trigonakis. “Lock – Unlock: Is That All? A Pragmatic Analysis of Locking in Software Systems”. ACM Transaction on Computer System (2018) (to appear) Grenoble, Summer 2018 H. G. v Abstract A plethora of optimized mutual exclusion lock algorithms have been designed over the past 25 years to mitigate performance bottlenecks related to critical sections and synchronization. Unfortunately, there is currently no broad study of the behavior of these optimized lock algorithms on realistic applications that consider different perfor- mance metrics, such as energy efficiency and tail latency. In this thesis, we perform a thorough and practical analysis, with the goal of providing software developers with enough information to achieve fast, scalable and energy-efficient synchronization in their systems. First, we provide a performance study of 28 state-of-the-art mutex lock algorithms, on 40 applications, and four different multicore machines. We not only consider throughput (traditionally the main performance metric), but also energy ef- ficiency and tail latency, which are becoming increasingly important. Second, we present an in-depth analysis in which we summarize our findings for all the studied applications. In particular, we describe nine different lock-related performance bottle- necks, and propose six guidelines helping software developers with their choice of a lock algorithm according to the different lock properties and the application character- istics. From our detailed analysis, we make a number of observations regarding locking algorithms and application behaviors, several of which have not been previously dis- covered: (i) applications not only stress the lock/unlock interface, but also the full locking API (e.g., trylocks, condition variables), (ii) the memory footprint of a lock can directly affect the application performance, (iii) for many applications, the interaction between locks and scheduling is an important application performance factor, (iv) lock tail latencies may or may not affect application tail latency, (v) no single lock is system- atically the best, (vi) choosing the best lock is difficult (as it depends on many factors such as the workload and the machine), and (vii) energy efficiency and throughput go hand in hand in the context of lock algorithms. These findings highlight that lock- ing involves more considerations than the simple “lock – unlock” interface and call for further research on designing low-memory footprint adaptive locks that fully and efficiently support the full lock interface, and consider all performance metrics. vii Résumé Une multitude d’algorithmes d’exclusion mutuelle ont été conçus au cours des vingt cinq dernières années, dans le but d’améliorer les performances liées à l’exécution
Recommended publications
  • Synchronization Spinlocks - Semaphores
    CS 4410 Operating Systems Synchronization Spinlocks - Semaphores Summer 2013 Cornell University 1 Today ● How can I synchronize the execution of multiple threads of the same process? ● Example ● Race condition ● Critical-Section Problem ● Spinlocks ● Semaphors ● Usage 2 Problem Context ● Multiple threads of the same process have: ● Private registers and stack memory ● Shared access to the remainder of the process “state” ● Preemptive CPU Scheduling: ● The execution of a thread is interrupted unexpectedly. ● Multiple cores executing multiple threads of the same process. 3 Share Counting ● Mr Skroutz wants to count his $1-bills. ● Initially, he uses one thread that increases a variable bills_counter for every $1-bill. ● Then he thought to accelerate the counting by using two threads and keeping the variable bills_counter shared. 4 Share Counting bills_counter = 0 ● Thread A ● Thread B while (machine_A_has_bills) while (machine_B_has_bills) bills_counter++ bills_counter++ print bills_counter ● What it might go wrong? 5 Share Counting ● Thread A ● Thread B r1 = bills_counter r2 = bills_counter r1 = r1 +1 r2 = r2 +1 bills_counter = r1 bills_counter = r2 ● If bills_counter = 42, what are its possible values after the execution of one A/B loop ? 6 Shared counters ● One possible result: everything works! ● Another possible result: lost update! ● Called a “race condition”. 7 Race conditions ● Def: a timing dependent error involving shared state ● It depends on how threads are scheduled. ● Hard to detect 8 Critical-Section Problem bills_counter = 0 ● Thread A ● Thread B while (my_machine_has_bills) while (my_machine_has_bills) – enter critical section – enter critical section bills_counter++ bills_counter++ – exit critical section – exit critical section print bills_counter 9 Critical-Section Problem ● The solution should ● enter section satisfy: ● critical section ● Mutual exclusion ● exit section ● Progress ● remainder section ● Bounded waiting 10 General Solution ● LOCK ● A process must acquire a lock to enter a critical section.
    [Show full text]
  • Chapter 1. Origins of Mac OS X
    1 Chapter 1. Origins of Mac OS X "Most ideas come from previous ideas." Alan Curtis Kay The Mac OS X operating system represents a rather successful coming together of paradigms, ideologies, and technologies that have often resisted each other in the past. A good example is the cordial relationship that exists between the command-line and graphical interfaces in Mac OS X. The system is a result of the trials and tribulations of Apple and NeXT, as well as their user and developer communities. Mac OS X exemplifies how a capable system can result from the direct or indirect efforts of corporations, academic and research communities, the Open Source and Free Software movements, and, of course, individuals. Apple has been around since 1976, and many accounts of its history have been told. If the story of Apple as a company is fascinating, so is the technical history of Apple's operating systems. In this chapter,[1] we will trace the history of Mac OS X, discussing several technologies whose confluence eventually led to the modern-day Apple operating system. [1] This book's accompanying web site (www.osxbook.com) provides a more detailed technical history of all of Apple's operating systems. 1 2 2 1 1.1. Apple's Quest for the[2] Operating System [2] Whereas the word "the" is used here to designate prominence and desirability, it is an interesting coincidence that "THE" was the name of a multiprogramming system described by Edsger W. Dijkstra in a 1968 paper. It was March 1988. The Macintosh had been around for four years.
    [Show full text]
  • The Deadlock Problem
    The deadlock problem More deadlocks mutex_t m1, m2; Same problem with condition variables void p1 (void *ignored) { • lock (m1); - Suppose resource 1 managed by c1, resource 2 by c2 lock (m2); - A has 1, waits on 2, B has 2, waits on 1 /* critical section */ c c unlock (m2); Or have combined mutex/condition variable unlock (m1); • } deadlock: - lock (a); lock (b); while (!ready) wait (b, c); void p2 (void *ignored) { unlock (b); unlock (a); lock (m2); - lock (a); lock (b); ready = true; signal (c); lock (m1); unlock (b); unlock (a); /* critical section */ unlock (m1); One lesson: Dangerous to hold locks when crossing unlock (m2); • } abstraction barriers! This program can cease to make progress – how? - I.e., lock (a) then call function that uses condition variable • Can you have deadlock w/o mutexes? • 1/15 2/15 Deadlocks w/o computers Deadlock conditions 1. Limited access (mutual exclusion): - Resource can only be shared with finite users. 2. No preemption: - once resource granted, cannot be taken away. Real issue is resources & how required • 3. Multiple independent requests (hold and wait): E.g., bridge only allows traffic in one direction - don’t ask all at once (wait for next resource while holding • - Each section of a bridge can be viewed as a resource. current one) - If a deadlock occurs, it can be resolved if one car backs up 4. Circularity in graph of requests (preempt resources and rollback). All of 1–4 necessary for deadlock to occur - Several cars may have to be backed up if a deadlock occurs. • Two approaches to dealing with deadlock: - Starvation is possible.
    [Show full text]
  • Fair K Mutual Exclusion Algorithm for Peer to Peer Systems ∗
    Fair K Mutual Exclusion Algorithm for Peer To Peer Systems ∗ Vijay Anand Reddy, Prateek Mittal, and Indranil Gupta University of Illinois, Urbana Champaign, USA {vkortho2, mittal2, indy}@uiuc.edu Abstract is when multiple clients are simultaneously downloading a large multimedia file, e.g., [3, 12]. Finally applications k-mutual exclusion is an important problem for resource- where a service has limited computational resources will intensive peer-to-peer applications ranging from aggrega- also benefit from a k mutual exclusion primitive, preventing tion to file downloads. In order to be practically useful, scenarios where all the nodes of the p2p system simultane- k-mutual exclusion algorithms not only need to be safe and ously overwhelm the server. live, but they also need to be fair across hosts. We pro- The k mutual exclusion problem involves a group of pro- pose a new solution to the k-mutual exclusion problem that cesses, each of which intermittently requires access to an provides a notion of time-based fairness. Specifically, our identical resource called the critical section (CS). A k mu- algorithm attempts to minimize the spread of access time tual exclusion algorithm must satisfy both safety and live- for the critical resource. While a client’s access time is ness. Safety means that at most k processes, 1 ≤ k ≤ n, the time between it requesting and accessing the resource, may be in the CS at any given time. Liveness means that the spread is defined as a system-wide metric that measures every request for critical section access is satisfied in finite some notion of the variance of access times across a homo- time.
    [Show full text]
  • CS350 – Operating Systems
    Outline 1 Processes and Threads 2 Synchronization 3 Memory Management 1 / 45 Processes • A process is an instance of a program running • Modern OSes run multiple processes simultaneously • Very early OSes only ran one process at a time • Examples (can all run simultaneously): - emacs – text editor - firefox – web browser • Non-examples (implemented as one process): - Multiple firefox windows or emacs frames (still one process) • Why processes? - Simplicity of programming - Speed: Higher throughput, lower latency 2 / 45 A process’s view of the world • Each process has own view of machine - Its own address space - Its own open files - Its own virtual CPU (through preemptive multitasking) • *(char *)0xc000 dierent in P1 & P2 3 / 45 System Calls • Systems calls are the interface between processes and the kernel • A process invokes a system call to request operating system services • fork(), waitpid(), open(), close() • Note: Signals are another common mechanism to allow the kernel to notify the application of an important event (e.g., Ctrl-C) - Signals are like interrupts/exceptions for application code 4 / 45 System Call Soware Stack Application 1 5 Syscall Library unprivileged code 4 2 privileged 3 code Kernel 5 / 45 Kernel Privilege • Hardware provides two or more privilege levels (or protection rings) • Kernel code runs at a higher privilege level than applications • Typically called Kernel Mode vs. User Mode • Code running in kernel mode gains access to certain CPU features - Accessing restricted features (e.g. Co-processor 0) - Disabling interrupts, setup interrupt handlers - Modifying the TLB (for virtual memory management) • Allows the kernel to isolate processes from one another and from the kernel - Processes cannot read/write kernel memory - Processes cannot directly call kernel functions 6 / 45 How System Calls Work • The kernel only runs through well defined entry points • Interrupts - Interrupts are generated by devices to signal needing attention - E.g.
    [Show full text]
  • 4. Process Synchronization
    Lecture Notes for CS347: Operating Systems Mythili Vutukuru, Department of Computer Science and Engineering, IIT Bombay 4. Process Synchronization 4.1 Race conditions and Locks • Multiprogramming and concurrency bring in the problem of race conditions, where multiple processes executing concurrently on shared data may leave the shared data in an undesirable, inconsistent state due to concurrent execution. Note that race conditions can happen even on a single processor system, if processes are context switched out by the scheduler, or are inter- rupted otherwise, while updating shared data structures. • Consider a simple example of two threads of a process incrementing a shared variable. Now, if the increments happen in parallel, it is possible that the threads will overwrite each other’s result, and the counter will not be incremented twice as expected. That is, a line of code that increments a variable is not atomic, and can be executed concurrently by different threads. • Pieces of code that must be accessed in a mutually exclusive atomic manner by the contending threads are referred to as critical sections. Critical sections must be protected with locks to guarantee the property of mutual exclusion. The code to update a shared counter is a simple example of a critical section. Code that adds a new node to a linked list is another example. A critical section performs a certain operation on a shared data structure, that may temporar- ily leave the data structure in an inconsistent state in the middle of the operation. Therefore, in order to maintain consistency and preserve the invariants of shared data structures, critical sections must always execute in a mutually exclusive fashion.
    [Show full text]
  • Lock (TCB) Block (TCB)
    Concurrency and Synchronizaon Mo0vaon • Operang systems (and applicaon programs) o<en need to be able to handle mul0ple things happening at the same 0me – Process execu0on, interrupts, background tasks, system maintenance • Humans are not very good at keeping track of mul0ple things happening simultaneously • Threads and synchronizaon are an abstrac0on to help bridge this gap Why Concurrency? • Servers – Mul0ple connec0ons handled simultaneously • Parallel programs – To achieve beGer performance • Programs with user interfaces – To achieve user responsiveness while doing computaon • Network and disk bound programs – To hide network/disk latency Definions • A thread is a single execu0on sequence that represents a separately schedulable task – Single execu0on sequence: familiar programming model – Separately schedulable: OS can run or suspend a thread at any 0me • Protec0on is an orthogonal concept – Can have one or many threads per protec0on domain Threads in the Kernel and at User-Level • Mul0-process kernel – Mul0ple single-threaded processes – System calls access shared kernel data structures • Mul0-threaded kernel – mul0ple threads, sharing kernel data structures, capable of using privileged instruc0ons – UNIX daemon processes -> mul0-threaded kernel • Mul0ple mul0-threaded user processes – Each with mul0ple threads, sharing same data structures, isolated from other user processes – Plus a mul0-threaded kernel Thread Abstrac0on • Infinite number of processors • Threads execute with variable speed – Programs must be designed to work with any schedule Programmer Abstraction Physical Reality Threads Processors 1 2 3 4 5 1 2 Running Ready Threads Threads Queson Why do threads execute at variable speed? Programmer vs. Processor View Programmers Possible Possible Possible View Execution Execution Execution #1 #2 #3 .
    [Show full text]
  • Kernel and Locking
    Kernel and Locking Luca Abeni [email protected] Monolithic Kernels • Traditional Unix-like structure • Protection: distinction between Kernel (running in KS) and User Applications (running in US) • The kernel behaves as a single-threaded program • One single execution flow in KS at each time • Simplify consistency of internal kernel structures • Execution enters the kernel in two ways: • Coming from upside (system calls) • Coming from below (hardware interrupts) Kernel Programming Kernel Locking Single-Threaded Kernels • Only one single execution flow (thread) can execute in the kernel • It is not possible to execute more than 1 system call at time • Non-preemptable system calls • In SMP systems, syscalls are critical sections (execute in mutual exclusion) • Interrupt handlers execute in the context of the interrupted task Kernel Programming Kernel Locking Bottom Halves • Interrupt handlers split in two parts • Short and fast ISR • “Soft IRQ handler” • Soft IRQ hanlder: deferred handler • Traditionally known ass Bottom Half (BH) • AKA Deferred Procedure Call - DPC - in Windows • Linux: distinction between “traditional” BHs and Soft IRQ handlers Kernel Programming Kernel Locking Synchronizing System Calls and BHs • Synchronization with ISRs by disabling interrupts • Synchronization with BHs: is almost automatic • BHs execute atomically (a BH cannot interrupt another BH) • BHs execute at the end of the system call, before invoking the scheduler for returning to US • Easy synchronization, but large non-preemptable sections! • Achieved
    [Show full text]
  • Download Distributed Systems Free Ebook
    DISTRIBUTED SYSTEMS DOWNLOAD FREE BOOK Maarten van Steen, Andrew S Tanenbaum | 596 pages | 01 Feb 2017 | Createspace Independent Publishing Platform | 9781543057386 | English | United States Distributed Systems - The Complete Guide The hope is that together, the system can maximize resources and information while preventing failures, as if one system fails, it won't affect the availability of the service. Banker's algorithm Dijkstra's algorithm DJP algorithm Prim's algorithm Dijkstra-Scholten algorithm Dekker's algorithm generalization Smoothsort Shunting-yard algorithm Distributed Systems marking algorithm Concurrent algorithms Distributed Systems algorithms Deadlock prevention algorithms Mutual exclusion algorithms Self-stabilizing Distributed Systems. Learn to code for free. For the first time computers would be able to send messages to other systems with a local IP address. The messages passed between machines contain forms of data that the systems want to share like databases, objects, and Distributed Systems. Also known as distributed computing and distributed databases, a distributed system is a collection of independent components located on different machines that share messages with each other in order to achieve common goals. To prevent infinite loops, running the code requires some amount of Ether. As mentioned in many places, one of which this great articleyou cannot have consistency and availability without partition tolerance. Because it works in batches jobs a problem arises where if your job fails — Distributed Systems need to restart the whole thing. While in a voting system an attacker need only add nodes to the network which is Distributed Systems, as free access to the network is a design targetin a CPU power based scheme an attacker faces a physical limitation: getting access to more and more powerful hardware.
    [Show full text]
  • In the Beginning... Example Critical Sections / Mutual Exclusion Critical
    Temporal relations • Instructions executed by a single thread are totally CSE 451: Operating Systems ordered Spring 2013 – A < B < C < … • Absent synchronization, instructions executed by distinct threads must be considered unordered / Module 7 simultaneous Synchronization – Not X < X’, and not X’ < X Ed Lazowska [email protected] Allen Center 570 © 2013 Gribble, Lazowska, Levy, Zahorjan © 2013 Gribble, Lazowska, Levy, Zahorjan 2 Critical Sections / Mutual Exclusion Example: ExampleIn the beginning... • Sequences of instructions that may get incorrect main() Y-axis is “time.” results if executed simultaneously are called critical A sections Could be one CPU, could pthread_create() • (We also use the term race condition to refer to a be multiple CPUs (cores). situation in which the results depend on timing) B foo() A' • Mutual exclusion means “not simultaneous” – A < B or B < A • A < B < C – We don’t care which B' • A' < B' • Forcing mutual exclusion between two critical section C • A < A' executions is sufficient to ensure correct execution – • C == A' guarantees ordering • C == B' • One way to guarantee mutually exclusive execution is using locks © 2013 Gribble, Lazowska, Levy, Zahorjan 3 © 2013 Gribble, Lazowska, Levy, Zahorjan 4 CriticalCritical sections When do critical sections arise? is the “happens-before” relation • One common pattern: T1 T2 T1 T2 T1 T2 – read-modify-write of – a shared value (variable) – in code that can be executed concurrently (Note: There may be only one copy of the code (e.g., a procedure), but it
    [Show full text]
  • The Deadlock Problem
    The deadlock problem n A set of blocked processes each holding a resource and waiting to acquire a resource held by another process. n Example n locks A and B Deadlocks P0 P1 lock (A); lock (B) lock (B); lock (A) Arvind Krishnamurthy Spring 2004 n Example n System has 2 tape drives. n P1 and P2 each hold one tape drive and each needs another one. n Deadlock implies starvation (opposite not true) The dining philosophers problem Deadlock Conditions n Five philosophers around a table --- thinking or eating n Five plates of food + five forks (placed between each n Deadlock can arise if four conditions hold simultaneously: plate) n Each philosopher needs two forks to eat n Mutual exclusion: limited access to limited resources n Hold and wait void philosopher (int i) { while (TRUE) { n No preemption: a resource can be released only voluntarily think(); take_fork (i); n Circular wait take_fork ((i+1) % 5); eat(); put_fork (i); put_fork ((i+1) % 5); } } Resource-allocation graph Resource-Allocation & Waits-For Graphs A set of vertices V and a set of edges E. n V is partitioned into two types: n P = {P1, P2, …, Pn }, the set consisting of all the processes in the system. n R = {R1, R2, …, Rm }, the set consisting of all resource types in the system (CPU cycles, memory space, I/O devices) n Each resource type Ri has Wi instances. n request edge – directed edge P1 ® Rj Resource-Allocation Graph Corresponding wait-for graph n assignment edge – directed edge Rj ® Pi 1 Deadlocks with multiple resources Another example n P1 is waiting for P2 or P3, P3 is waiting for P1 or P4 P1 is waiting for P2, P2 is waiting for P3, P3 is waiting for P1 or P2 n Is there a deadlock situation here? Is this a deadlock scenario? Announcements Methods for handling deadlocks th n Midterm exam on Feb.
    [Show full text]
  • Energy Efficient Spin-Locking in Multi-Core Machines
    Energy efficient spin-locking in multi-core machines Facoltà di INGEGNERIA DELL'INFORMAZIONE, INFORMATICA E STATISTICA Corso di laurea in INGEGNERIA INFORMATICA - ENGINEERING IN COMPUTER SCIENCE - LM Cattedra di Advanced Operating Systems and Virtualization Candidato Salvatore Rivieccio 1405255 Relatore Correlatore Francesco Quaglia Pierangelo Di Sanzo A/A 2015/2016 !1 0 - Abstract In this thesis I will show an implementation of spin-locks that works in an energy efficient fashion, exploiting the capability of last generation hardware and new software components in order to rise or reduce the CPU frequency when running spinlock operation. In particular this work consists in a linux kernel module and a user-space program that make possible to run with the lowest frequency admissible when a thread is spin-locking, waiting to enter a critical section. These changes are thread-grain, which means that only interested threads are affected whereas the system keeps running as usual. Standard libraries’ spinlocks do not provide energy efficiency support, those kind of optimizations are related to the application behaviors or to kernel-level solutions, like governors. !2 Table of Contents List of Figures pag List of Tables pag 0 - Abstract pag 3 1 - Energy-efficient Computing pag 4 1.1 - TDP and Turbo Mode pag 4 1.2 - RAPL pag 6 1.3 - Combined Components 2 - The Linux Architectures pag 7 2.1 - The Kernel 2.3 - System Libraries pag 8 2.3 - System Tools pag 9 3 - Into the Core 3.1 - The Ring Model 3.2 - Devices 4 - Low Frequency Spin-lock 4.1 - Spin-lock vs.
    [Show full text]