Message ID | 20230308031033.155717-1-axboe@kernel.dk (mailing list archive) |
---|---|
Headers | show |
Series | Add FMODE_NOWAIT support to pipes | expand |
On 3/7/23 8:10?PM, Jens Axboe wrote: > Curious on how big of a difference this makes, I wrote a small benchmark > that simply opens 128 pipes and then does 256 rounds of reading and > writing to them. This was run 10 times, discarding the first run as it's > always a bit slower. Before the patch: > > Avg: 262.52 msec > Stdev: 2.12 msec > Min: 261.07 msec > Max 267.91 msec > > and after the patch: > > Avg: 24.14 msec > Stdev: 9.61 msec > Min: 17.84 msec > Max: 43.75 msec > > or about a 10x improvement in performance (and efficiency). The above test was for a pipe being empty when the read is issued, if the test is changed to have data when, then it looks even better: Before: Avg: 249.24 msec Stdev: 0.20 msec Min: 248.96 msec Max: 249.53 msec After: Avg: 10.86 msec Stdev: 0.91 msec Min: 10.02 msec Max: 12.67 msec or about a 23x improvement.
On Tue, Mar 07, 2023 at 08:33:24PM -0700, Jens Axboe wrote: > On 3/7/23 8:10?PM, Jens Axboe wrote: > > Curious on how big of a difference this makes, I wrote a small benchmark > > that simply opens 128 pipes and then does 256 rounds of reading and > > writing to them. This was run 10 times, discarding the first run as it's > > always a bit slower. Before the patch: > > > > Avg: 262.52 msec > > Stdev: 2.12 msec > > Min: 261.07 msec > > Max 267.91 msec > > > > and after the patch: > > > > Avg: 24.14 msec > > Stdev: 9.61 msec > > Min: 17.84 msec > > Max: 43.75 msec > > > > or about a 10x improvement in performance (and efficiency). > > The above test was for a pipe being empty when the read is issued, if > the test is changed to have data when, then it looks even better: > > Before: > > Avg: 249.24 msec > Stdev: 0.20 msec > Min: 248.96 msec > Max: 249.53 msec > > After: > > Avg: 10.86 msec > Stdev: 0.91 msec > Min: 10.02 msec > Max: 12.67 msec > > or about a 23x improvement. Nice! Code looks OK, maybe consider s/nonblock/nowait/, but I'm not a pipe expert so I'll leave nitty gritty details to Al, et al. Acked-by: Dave Chinner <dchinner@redhat.com>
On 3/7/23 11:46?PM, Dave Chinner wrote: > On Tue, Mar 07, 2023 at 08:33:24PM -0700, Jens Axboe wrote: >> On 3/7/23 8:10?PM, Jens Axboe wrote: >>> Curious on how big of a difference this makes, I wrote a small benchmark >>> that simply opens 128 pipes and then does 256 rounds of reading and >>> writing to them. This was run 10 times, discarding the first run as it's >>> always a bit slower. Before the patch: >>> >>> Avg: 262.52 msec >>> Stdev: 2.12 msec >>> Min: 261.07 msec >>> Max 267.91 msec >>> >>> and after the patch: >>> >>> Avg: 24.14 msec >>> Stdev: 9.61 msec >>> Min: 17.84 msec >>> Max: 43.75 msec >>> >>> or about a 10x improvement in performance (and efficiency). >> >> The above test was for a pipe being empty when the read is issued, if >> the test is changed to have data when, then it looks even better: >> >> Before: >> >> Avg: 249.24 msec >> Stdev: 0.20 msec >> Min: 248.96 msec >> Max: 249.53 msec >> >> After: >> >> Avg: 10.86 msec >> Stdev: 0.91 msec >> Min: 10.02 msec >> Max: 12.67 msec >> >> or about a 23x improvement. > > Nice! > > Code looks OK, maybe consider s/nonblock/nowait/, but I'm not a pipe > expert so I'll leave nitty gritty details to Al, et al. We seem to use both somewhat interchangably throughout the kernel. Don't feel strongly about that one, so I'll let the majority speak on what they prefer. > Acked-by: Dave Chinner <dchinner@redhat.com> Thanks, added.