Re: [PATCH 09/15] squashfs: make use of local lock in multi_cpu decompressor

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

 



Hi Julia,

On Tue, 2018-08-14 at 15:36 -0500, Julia Cartwright wrote:
> Hey Tom-
> 
> On Tue, Aug 14, 2018 at 01:54:02PM -0500, Tom Zanussi wrote:
> > v3.18.117-rt105 rt-stable review patch.  If anyone has any
> > objections,
> > please let me know.
> > 
> > ------------------
> > 
> > From: Julia Cartwright <julia@xxxxxx>
> > 
> > [ Upstream rt-devel commit c160736542d7b3d67da32848d2f028b8e35730e5
> > ]
> > 
> > Currently, the squashfs multi_cpu decompressor makes use of
> > get_cpu_ptr()/put_cpu_ptr(), which unconditionally disable
> > preemption
> > during decompression.
> > 
> > Because the workload is distributed across CPUs, all CPUs can
> > observe a
> > very high wakeup latency, which has been seen to be as much as
> > 8000us.
> > 
> > Convert this decompressor to make use of a local lock, which will
> > allow
> > execution of the decompressor with preemption-enabled, but also
> > ensure
> > concurrent accesses to the percpu compressor data on the local CPU
> > will
> > be serialized.
> > 
> > Cc: stable-rt@xxxxxxxxxxxxxxx
> > Reported-by: Alexander Stein <alexander.stein@xxxxxxxxxxxxxxxxxxxxx
> > >
> > Tested-by: Alexander Stein <alexander.stein@xxxxxxxxxxxxxxxxxxxxx>
> > Signed-off-by: Julia Cartwright <julia@xxxxxx>
> > Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
> > Signed-off-by: Tom Zanussi <tom.zanussi@xxxxxxxxxxxxxxx>
> > ---
> 
> [..]
> >  void *squashfs_decompressor_create(struct squashfs_sb_info *msblk,
> >  						void *comp_opts)
> >  {
> > @@ -79,10 +82,15 @@ int squashfs_decompress(struct squashfs_sb_info
> > *msblk, struct buffer_head **bh,
> >  {
> >  	struct squashfs_stream __percpu *percpu =
> >  			(struct squashfs_stream __percpu *) msblk-
> > >stream;
> > -	struct squashfs_stream *stream = get_cpu_ptr(percpu);
> > -	int res = msblk->decompressor->decompress(msblk, stream-
> > >stream, bh, b,
> > -		offset, length, output);
> > -	put_cpu_ptr(stream);
> > +	struct squashfs_stream *stream;
> > +	int res;
> > +
> > +	stream = get_locked_ptr(stream_lock, percpu);
> 
> This patch depends on the introduction of the {get,put}_locked_ptr()
> per-cpu access variants.  So, you'll want to also pull commit
> 
>  3d45cf23db4f76cd3 ("locallock: provide {get,put}_locked_ptr()
> variants")
> 
> From rt-devel as well.
> 

Yep, missed that one - thought I had squashfs enabled, sigh.  Thanks
for pointing that out, Julia.

Tom




[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux