10.07.2015 Views

Is Parallel Programming Hard, And, If So, What Can You Do About It?

Is Parallel Programming Hard, And, If So, What Can You Do About It?

Is Parallel Programming Hard, And, If So, What Can You Do About It?

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

8.3. READ-COPY UPDATE (RCU) 91Attribute RCU Classic RCU BH RCU Sched Realtime RCUPurpose Original Prevent D<strong>Do</strong>S attacks Wait for preemptdisableRealtime responseregions,hardirqs, & NM<strong>Is</strong>Availability 2.5.43 2.6.9 2.6.12 2.6.26Read-side primitives rcu_read_lock() !rcu_read_unlock() !rcu_read_lock_bh()rcu_read_unlock_bh()preempt_disable()preempt_enable()rcu_read_lock()rcu_read_unlock()(and friends)Update-side primitives(synchronous)synchronize_rcu()synchronize_net()synchronize_sched() synchronize_rcu()synchronize_net()Update-side primitivescall_rcu() ! call_rcu_bh() call_rcu_sched() call_rcu()(asyn-chronous/callback)Table 8.4: RCU Wait-to-Finish AP<strong>Is</strong>Attribute SRCU QRCUUpdate-side primitives rcu_barrier() rcu_barrier_bh() rcu_barrier_sched() rcu_barrier()(wait for callbacks)Type-safe memory SLAB_DESTROY_BY_RCU SLAB_DESTROY_BY_RCURead side constraints No blocking No irq enabling No blocking Only preemptionand lock acquisitionRead side overhead Preempt disable/enableBH disable/enable Preempt dis-Simple instructions,(freeable/enable (free irq disable/enableon non-PREEMPT)on non-PREEMPT)Asynchronous updatesidesub-microsecond sub-microsecond sub-microsecondoverheadGrace-period latency 10s of milliseconds 10s of milliseconds 10s of milliseconds 10s of millisecondsNon-PREEMPT_RT implementationRCU Classic RCU BH RCU Classic Preemptable RCUPREEMPT_RT implementationPreemptable RCU Realtime RCU Forced Schedule onall CPUsRealtime RCUPurpose Sleeping readers Sleeping readers and fast graceperiodsAvailability 2.6.19Read-side primitives srcu_read_lock()srcu_read_unlock()qrcu_read_lock()qrcu_read_unlock()Update-side primitives synchronize_srcu() synchronize_qrcu()(synchronous)Update-side primitivesN/AN/A(asyn-chronous/callback)Update-side primitives N/AN/A(wait for callbacks)Type-safe memoryRead side constraints No synchronize_srcu() No synchronize_qrcu()Read side overhead Simple instructions, preemptdisable/enableAtomic increment and decrementof shared variableAsynchronous updatesideN/AN/AoverheadGrace-period latency 10s of milliseconds 10s of nanoseconds in absenceof readersNon-PREEMPT_RT implementationSRCUN/APREEMPT_RT implementationSRCUN/ATable 8.5: Sleepable RCU Wait-to-Finish AP<strong>Is</strong>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!