RE: Is writer starvation a potential problem with RCU?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----Original Message-----
> From: michi1@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx [mailto:michi1@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]
> Sent: Saturday, February 07, 2015 1:29 AM
> To: Jeff Haran
> Cc: kernelnewbies@xxxxxxxxxxxxxxxxx
> Subject: Re: Is writer starvation a potential problem with RCU?
> 
> Hi!
> 
> On 18:19 Fri 06 Feb     , Jeff Haran wrote:
> > I've read that the Linux implementation of read-write locks (rwlock_t) can suffer from so called "writer starvation", whereby threads
> that take a read lock on a read-write lock can prevent threads attempting to take a write lock on the same read-write lock from ever
> acquiring the lock because there is no queuing of the readers and writers. If the lock is held for read access, any subsequent reader
> will get the lock even if a write lock attempt is already in progress.
> >
> > Does anybody happen to know whether or not RCU has a similar issue?
> 
> Why should it have this issue?
> 
> An RCU read is basically an atomic pointer read. One writer and multiple
> readers can run concurrently. When the writer is finished, it updates the
> atomic pointer.
> 
> The issue you may need to worry about is freeing the memory of the old
> pointer. This can only be done after all readers have finished (see
> synchronize_rcu() and call_rcu()). Depending on what you do, you may see high
> memory usage or writers which are blocked waiting for readers to finish.
> 
> 	-Michi

Thanks,

Jeff Haran


_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies




[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux