CS533 Concepts of Operating Systems Class 4 Linux Kernel Locking Issues.

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

Global Environment Model. MUTUAL EXCLUSION PROBLEM The operations used by processes to access to common resources (critical sections) must be mutually.
Concurrency: Mutual Exclusion and Synchronization Chapter 5.
Ch. 7 Process Synchronization (1/2) I Background F Producer - Consumer process :  Compiler, Assembler, Loader, · · · · · · F Bounded buffer.
Chapter 6: Process Synchronization
Background Concurrent access to shared data can lead to inconsistencies Maintaining data consistency among cooperating processes is critical What is wrong.
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
Concurrency in Shared Memory Systems Synchronization and Mutual Exclusion.
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.
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.
1 CS 333 Introduction to Operating Systems Class 4 – Synchronization Primitives Semaphores Jonathan Walpole Computer Science Portland State University.
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.
Jonathan Walpole Computer Science Portland State University
CS533 Concepts of Operating Systems 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.
Concurrency, Mutual Exclusion and Synchronization.
Process Synchronization Continued 7.2 Critical-Section Problem 7.3 Synchronization Hardware 7.4 Semaphores.
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.
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.
Implementing Lock. From the Previous Lecture  The “too much milk” example shows that writing concurrent programs directly with load and store instructions.
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.
Kernel Synchronization David Ferry, Chris Gill CSE 522S - Advanced Operating Systems Washington University in St. Louis St. Louis, MO
CSE 120 Principles of Operating
CSNB334 Advanced Operating Systems 4
Background on the need for Synchronization
Synchronization.
CS533 Concepts of Operating Systems Class 3
Kernel Synchronization II
Threading And Parallel Programming Constructs
Lecture 2 Part 2 Process Synchronization
Implementing Mutual Exclusion
Concurrency: Mutual Exclusion and Process Synchronization
CS533 Concepts of Operating Systems Class 3
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 Class 4 Linux Kernel Locking Issues

CS533 - Concepts of Operating Systems 2 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 3 How does concurrency arise?  True concurrency o Multiple processors execute instructions simultaneously  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 (preemptible kernel) Scheduler switches threads regardless of whether they are running in user or kernel mode The instructions of multiple threads running in kernel mode are interleaved  Hardware preemption o Interrupt/trap/fault/exception handlers can start executing at any time  Reentrancy o A function calls itself

CS533 - Concepts of Operating Systems 5 Critical sections  Sections of code that are subject to concurrent execution in which at least one execution path modifies shared data  Locking can be used to provide mutually exclusive access to critical sections  Various locking primitives exist in Linux o Linux is a symmetric multiprocessing (SMP) preemptible kernel

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

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 same!

CS533 - Concepts of Operating Systems 8 Spin locks  Mutual exclusion for larger (than one operator) critical sections requires additional support  Spin locks o Single holder locks o When lock is unavailable, 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 spin lock protected data is accessed by interrupt handlers? 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 11 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 12 Dealing with interrupt context  Need to know if data being protected is accessed in interrupt context or just normal kernel context o Use appropriate primitives to manage hardware preemption if necessary  Need to know if interrupts were already enabled or disabled o Use appropriate primitives to save and restore CPU state

CS533 - Concepts of Operating Systems 13 Bottom halves, softirqs and tasklets  Softirqs, tasklets and BHs are deferrable functions o think of them as delayed interrupt handling  Softirqs – the basic building block o can not be interrupted by another softirq on the same CPU o softirqs of the same type can run concurrently on different CPUs o statically allocated  Tasklets – built on softirqs o dynamically allocated o can not be interrupted by another tasklet on the same CPU o tasklets of the same type can not run concurrently on different CPUs  BHs – built on softirqs o static, not concurrent

CS533 - Concepts of Operating Systems 14 Spin locks and deferred functions  spin_lock_bh() o implements the standard spinlock o disables softirqs o needed for code outside a softirq that is also used inside a softirq  spin_unlock_bh() o Releases the spinlock o Enables softirqs

CS533 - Concepts of Operating Systems 15 Spin lock rules  Do not re-acquire a spinlock you already hold! o deadlock!  Spinlocks should not held for a long time o Excessive spinning wastes CPU cycles!  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!

CS533 - Concepts of Operating Systems 16 Semaphores  Semaphores are locks that are safe to hold for longer periods of time o contention causes blocking not spinning o should not be used for short duration critical sections! o safe to sleep with! Can be used to synchronize with user contexts (which might block)  Semaphores can allow concurrency for more than one process at a time, if necessary

CS533 - Concepts of Operating Systems 17 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 is the number of processes on the wait queue if initialized to 1, the semaphore is a mutex

CS533 - Concepts of Operating Systems 18 Semaphore operations  Down() o attempts to acquire the semaphore by decrementing the usage count and testing if its negative blocks if it fails  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 19 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 20 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 21 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 22 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 23 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

CS533 - Concepts of Operating Systems 24 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 25 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 26 Preemptible kernel issues  Have to be careful of legacy code that assumes per- CPU data is implicitly protected from preemption 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 27 Conclusions  Wow! Why does one system need so many different ways of doing synchronization o … actually, there are more … this is just “locking” 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 cost of synchronization is important, especially in multiprocessor environments You only use more than one CPU because you hope to execute faster!