CS533 Concepts of Operating Systems Linux Kernel Locking Techniques.

Slides:



Advertisements
Similar presentations
1 Interprocess Communication 1. Ways of passing information 2. Guarded critical activities (e.g. updating shared data) 3. Proper sequencing in case of.
Advertisements

1 Chapter 5 Concurrency: Mutual Exclusion and Synchronization Principals of Concurrency Mutual Exclusion: Hardware Support Semaphores Readers/Writers Problem.
Global Environment Model. MUTUAL EXCLUSION PROBLEM The operations used by processes to access to common resources (critical sections) must be mutually.
Tutorial 3 - Linux Interrupt Handling -
Ch. 7 Process Synchronization (1/2) I Background F Producer - Consumer process :  Compiler, Assembler, Loader, · · · · · · F Bounded buffer.
Chapter 6: Process Synchronization
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Chapter 6: Process Synchronization.
Bilgisayar Mühendisliği Bölümü GYTE - Bilgisayar Mühendisliği Bölümü Multithreading the SunOS Kernel J. R. Eykholt, S. R. Kleiman, S. Barton, R. Faulkner,
Kernel Synchronization
CS 6560 Operating System Design Lecture 7: Kernel Synchronization Kernel Time Management.
Synchronization. Shared Memory Thread Synchronization Threads cooperate in multithreaded environments – User threads and kernel threads – Share resources.
Operating Systems ECE344 Ding Yuan Synchronization (I) -- Critical region and lock Lecture 5: Synchronization (I) -- Critical region and lock.
CS533 Concepts of Operating Systems Class 4 Linux Kernel Locking Issues.
Chapter 6: Process Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts – 7 th Edition, Feb 8, 2005 Objectives Understand.
CS510 Concurrent Systems Class 1
Concurrency: Mutual Exclusion, Synchronization, Deadlock, and Starvation in Representative Operating Systems.
CS533 - Concepts of Operating Systems 1 CS533 Concepts of Operating Systems Class 8 Synchronization on Multiprocessors.
CS510 Concurrent Systems Class 1 Linux Kernel Locking Techniques.
Jonathan Walpole Computer Science Portland State University
CS533 Concepts of Operating Systems Class 17 Linux Kernel Locking Techniques.
Synchronization CSCI 444/544 Operating Systems Fall 2008.
Chapter 6 Concurrency: Deadlock and Starvation Operating Systems: Internals and Design Principles, 6/E William Stallings Dave Bremer Otago Polytechnic,
CS510 Concurrent Systems Introduction to Concurrency.
Cosc 4740 Chapter 6, Part 3 Process Synchronization.
Process Synchronization Continued 7.2 Critical-Section Problem 7.3 Synchronization Hardware 7.4 Semaphores.
© Janice Regan, CMPT 300, May CMPT 300 Introduction to Operating Systems Mutual Exclusion.
6.3 Peterson’s Solution The two processes share two variables: Int turn; Boolean flag[2] The variable turn indicates whose turn it is to enter the critical.
Operating Systems ECE344 Ashvin Goel ECE University of Toronto Mutual Exclusion.
CSC 660: Advanced Operating SystemsSlide #1 CSC 660: Advanced OS Synchronization.
Silberschatz, Galvin and Gagne ©2013 Operating System Concepts Essentials – 9 th Edition Chapter 5: Process Synchronization.
Kernel Locking Techniques by Robert Love presented by Scott Price.
Chapter 6 – Process Synchronisation (Pgs 225 – 267)
CS 3204 Operating Systems Godmar Back Lecture 7. 12/12/2015CS 3204 Fall Announcements Project 1 due on Sep 29, 11:59pm Reading: –Read carefully.
CS533 Concepts of Operating Systems Jonathan Walpole.
CS399 New Beginnings Jonathan Walpole. 2 Concurrent Programming & Synchronization Primitives.
CS510 Concurrent Systems Jonathan Walpole. RCU Usage in Linux.
Concurrency in Shared Memory Systems Synchronization and Mutual Exclusion.
Kernel Synchronization in Linux Uni-processor and Multi-processor Environment By Kathryn Bean and Wafa’ Jaffal (Group A3)
1 Previous Lecture Overview  semaphores provide the first high-level synchronization abstraction that is possible to implement efficiently in OS. This.
Silberschatz, Galvin and Gagne ©2011 Operating System Concepts Essentials – 8 th Edition Chapter 2: The Linux System Part 3.
CSC 660: Advanced Operating SystemsSlide #1 CSC 660: Advanced OS Synchronization.
CS510 Concurrent Systems Jonathan Walpole. Introduction to Concurrency.
Implementing Mutual Exclusion Andy Wang Operating Systems COP 4610 / CGS 5765.
Mutual Exclusion -- Addendum. Mutual Exclusion in Critical Sections.
Linux Kernel Development Chapter 8. Kernel Synchronization Introduction Geum-Seo Koo Fri. Operating System Lab.
CS162 Section 2. True/False A thread needs to own a semaphore, meaning the thread has called semaphore.P(), before it can call semaphore.V() False: Any.
Kernel Synchronization David Ferry, Chris Gill CSE 522S - Advanced Operating Systems Washington University in St. Louis St. Louis, MO
CSE 120 Principles of Operating
CS703 – Advanced Operating Systems
Background on the need for Synchronization
Synchronization.
Kernel Synchronization II
Chapter 2: The Linux System Part 3
Threading And Parallel Programming Constructs
Thread Implementation Issues
Lecture 2 Part 2 Process Synchronization
Kernel Synchronization I
CS510 Concurrent Systems Class 1a
Implementing Mutual Exclusion
Kernel Synchronization II
CSE 451: Operating Systems Autumn 2003 Lecture 7 Synchronization
CSE 451: Operating Systems Autumn 2005 Lecture 7 Synchronization
CSE 451: Operating Systems Winter 2003 Lecture 7 Synchronization
CSE 153 Design of Operating Systems Winter 19
CS333 Intro to Operating Systems
Chapter 6: Synchronization Tools
CS510 Concurrent Systems Jonathan Walpole.
Linux Kernel Locking Techniques
CSE 542: Operating Systems
CSE 542: Operating Systems
Presentation transcript:

CS533 Concepts of Operating Systems Linux Kernel Locking Techniques

Intro to kernel locking techniques (Linux)  Why do we need locking in the kernel? o Which problems are we trying to solve?  What implementation choices do we have? o Is there a one-size-fits-all solution? CS533 – Concepts of Operating Systems 2

3 How does concurrency arise in Linux?  Linux is a symmetric multiprocessing (SMP) preemptible kernel  Its has true concurrency o Multiple processors execute instructions simultaneously  And various forms of pseudo concurrency o Instructions of multiple execution sequences are interleaved

CS533 – Concepts of Operating Systems 4 Sources of pseudo concurrency  Software-based preemption o Voluntary preemption (sleep/yield) o Involuntary preemption (preemptable kernel) Scheduler switches threads regardless of whether they are running in user or kernel mode o Solutions: don’t do the former, disable preemption to prevent the latter  Hardware preemption o Interrupt/trap/fault/exception handlers can start executing at any time o Solution: disable interrupts what about faults and traps?

CS533 – Concepts of Operating Systems 5 True concurrency  Solutions to pseudo-concurrency do not work in the presence of true concurrency  Alternatives include atomic operators, various forms of locking, RCU, and non-blocking synchronization  Locking can be used to provide mutually exclusive access to critical sections o Locking can not be used everywhere, i.e., interrupt handlers can’t block o Locking primitives must support coexistence with various solutions for pseudo concurrency, i.e., we need hybrid primitives

CS533 – Concepts of Operating Systems 6 Atomic operators  Simplest synchronization primitives o Primitive operations that are indivisible  Two types o methods that operate on integers o methods that operate on bits  Implementation o Assembly language sequences that use the atomic read- modify-write instructions of the underlying CPU architecture

CS533 – Concepts of Operating Systems 7 Atomic integer operators atomic_t v; atomic_set(&v, 5); /* v = 5 (atomically) */ atomic_add(3, &v); /* v = v + 3 (atomically) */ atomic_dec(&v); /* v = v - 1 (atomically) */ printf("This will print 7: %d\n", atomic_read(&v)); Beware: o Can only pass atomic_t to an atomic operator o atomic_add(3,&v); and { atomic_add(1,&v); atomic_add1(2,&v); } are not the same! … Why?

CS533 – Concepts of Operating Systems 8 Spin locks  Mutual exclusion for larger (than one operator) critical sections requires additional support  Spin locks are one possibility o Single holder locks o When lock is unavailable, the acquiring process keeps trying

CS533 – Concepts of Operating Systems 9 Basic use of spin locks spinlock_t mr_lock = SPIN_LOCK_UNLOCKED; spin_lock(&mr_lock);/* critical section... */ spin_unlock(&mr_lock); spin_lock() o Acquires the spinlock using atomic instructions required for SMP spin_unlock() o Releases the spinlock

CS533 – Concepts of Operating Systems 10 What if the spin lock holder is interrupted?  Interrupting a spin lock holder may cause several problems: o Spin lock holder is delayed, so is every thread spin waiting for the spin lock Not a big problem if interrupt handlers are short o Interrupt handler may access the data protected by the spin-lock Should the interrupt handler use the lock? Can it be delayed trying to acquire a spin lock? What if the lock is already held by the thread it interrupted?

CS533 – Concepts of Operating Systems 11 Solutions  If data is only accessed in interrupt context and is local to one specific CPU we can use interrupt disabling to synchronize o A pseudo-concurrency solution like in the uniprocessor case  If data is accessed from other CPUs we need additional synchronization o Spin locks o Spin locks can not be acquired in interrupt context because this might deadlock  Normal code (kernel context) must disable interrupts and acquire spin lock o interrupt context code need not acquire spin lock o assumes data is not accessed by interrupt handlers on different CPUs, i.e., interrupts are CPU-local and this is CPU-local data

CS533 – Concepts of Operating Systems 12 Combining spin locks and interrupt disabling  Non-interrupt code acquires spin lock to synchronize with other non-interrupt code and disables interrupts to synchronize with local invocations of the interrupt handler

CS533 – Concepts of Operating Systems 13 Combining spin locks and interrupt disabling spinlock_t mr_lock = SPIN_LOCK_UNLOCKED; unsigned long flags; spin_lock_irqsave(&mr_lock, flags); /* critical section... */ spin_unlock_irqrestore(&mr_lock, flags); spin_lock_irqsave() o disables interrupts locally o acquires the spinlock using instructions required for SMP spin_unlock_irqrestore() o Restores interrupts to the state they were in when the lock was acquired

CS533 – Concepts of Operating Systems 14 What if we’re on a uniprocessor? Previous code compiles to: unsigned long flags; save_flags(flags); /* save previous CPU state */ cli(); /* disable interrupts */ … /* critical section... */ restore_flags(flags); /* restore previous CPU state */ Hmm, why not just use: cli(); /* disable interrupts */ … sti(); /* enable interrupts */

CS533 – Concepts of Operating Systems 15 Bottom halves and softirqs  Softirqs, tasklets and BHs are deferrable functions o delayed interrupt handling work that is scheduled o they can wait for a spin lock without holding up devices o they can access non-CPU local data  Softirqs – the basic building block o statically allocated and non-preemptively scheduled o can not be interrupted by another softirq on the same CPU o can run concurrently on different CPUs, and synchronize with each other using spin-locks  Bottom Halves o built on softirqs o can not run concurrently on different CPUs

CS533 – Concepts of Operating Systems 16 Spin locks and deferred functions  spin_lock_bh() o implements the standard spinlock o disables softirqs o needed for code outside a softirq that manipulates data also used inside a softirq o Allows the softirq to use non-preemption only  spin_unlock_bh() o Releases the spinlock o Enables softirqs

CS533 – Concepts of Operating Systems 17 Spin lock rules  Do not try to re-acquire a spinlock you already hold! o it leads to self deadlock!  Spinlocks should not be held for a long time o Excessive spinning wastes CPU cycles! o What is “a long time”?  Do not sleep while holding a spinlock! o Someone spinning waiting for you will waste a lot of CPU o never call any function that touches user memory, allocates memory, calls a semaphore function or any of the schedule functions while holding a spinlock! All these can block.

CS533 – Concepts of Operating Systems 18 Semaphores  Semaphores are locks that are safe to hold for longer periods of time o contention for semaphores causes blocking not spinning o should not be used for short duration critical sections! Why? o Semaphores are safe to sleep with! Can be used to synchronize with user contexts that might block or be preempted  Semaphores can allow concurrency for more than one process at a time, if necessary o i.e., initialize to a value greater than 1

CS533 – Concepts of Operating Systems 19 Semaphore implementation  Implemented as a wait queue and a usage count o wait queue: list of processes blocking on the semaphore o usage count: number of concurrently allowed holders if negative, the semaphore is unavailable, and absolute value of usage count is the number of processes currently on the wait queue initialize to 1 to use the semaphore as a mutex lock

CS533 – Concepts of Operating Systems 20 Semaphore operations  Down() o attempts to acquire the semaphore by decrementing the usage count and testing if its negative blocks if usage count is negative  Up() o releases the semaphore by incrementing the usage count and waking up one or more tasks blocked on it

CS533 – Concepts of Operating Systems 21 Can you be interrupted when blocked?  down_interruptible() o Returns –EINTR if signal received while blocked o Returns 0 on success  down_trylock() o attempts to acquire the semaphore o on failure it returns nonzero instead of blocking

CS533 – Concepts of Operating Systems 22 Reader/writer Locks  No need to synchronize concurrent readers unless a writer is present o reader/writer locks allow multiple concurrent readers but only a single writer (with no concurrent readers)  Both spin locks and semaphores have reader/writer variants

CS533 – Concepts of Operating Systems 23 Reader/writer spin locks (rwlock) rwlock_t mr_rwlock = RW_LOCK_UNLOCKED; read_lock(&mr_rwlock);/* critical section (read only)... */ read_unlock(&mr_rwlock); write_lock(&mr_rwlock);/* critical section (read and write)... */ write_unlock(&mr_rwlock);

CS533 – Concepts of Operating Systems 24 Reader/writer semaphores (rw_semaphore) struct rw_semaphore mr_rwsem; init_rwsem(&mr_rwsem); down_read(&mr_rwsem);/* critical region (read only)... */ up_read(&mr_rwsem); down_write(&mr_rwsem); /* critical region (read and write)... */ up_write(&mr_rwsem);

CS533 – Concepts of Operating Systems 25 Reader/writer lock warnings  reader locks cannot be automatically upgraded to the writer variant o attempting to acquire exclusive access while holding reader access will deadlock! o if you know you will need to write eventually obtain the writer variant of the lock from the beginning or, release the reader lock and re-acquire the lock as a writer –But bear in mind that memory may have changed when you get in!

CS533 – Concepts of Operating Systems 26 Big reader locks (br_lock)  Specialized form of reader/writer lock o very fast to acquire for reading o very slow to acquire for writing o good for read-mostly scenarios  Implemented using per-CPU locks o readers acquire their own CPU’s lock o writers must acquire all CPUs’ locks

CS533 – Concepts of Operating Systems 27 Big kernel lock (BKL)  A global kernel lock - kernel_flag o used to be the only SMP lock o mostly replaced with fine-grain localized locks  Implemented as a recursive spin lock o Reacquiring it when held will not deadlock  Usage … but don’t! ;) lock_kernel(); /* critical region... */ unlock_kernel();

CS533 – Concepts of Operating Systems 28 Preemptible kernel issues  Have to be careful of legacy code that assumes per- CPU data is implicitly protected from preemption o Legacy code assumes “non-preemption in kernel mode” o May need to use new preempt_disable() and preempt_enable() calls o Calls are nestable for each n preempt_disable() calls, preemption will not be re- enabled until the nth preempt_enable() call

CS533 – Concepts of Operating Systems 29 Conclusions  Wow! Why does one system need so many different ways of doing synchronization? o Actually, there are more ways to do synchronization in Linux, this is just “locking”

CS533 – Concepts of Operating Systems 30 Conclusions  One size does not fit all: o need to be aware of different contexts in which code executes (user, kernel, interrupt etc) and the implications this has for whether hardware or software preemption or blocking can occur o the cost of synchronization is important, particularly its impact on scalability Generally, you only use more than one CPU because you hope to execute faster! Each synchronization technique makes a different performance vs. complexity trade-off