Home GnuPG
Diffusion GnuPG 15df88d135ba

iobuf: add zerocopy optimization for iobuf_read

Description

iobuf: add zerocopy optimization for iobuf_read

* common/iobuf.h (iobuf_struct): Add 'e_d' substructure and members.
* common/iobuf.c (IOBUF_ZEROCOPY_THRESHOLD): New.
(iobuf_alloc): Clear 'iobuf->e_d'.
(underflow_target): Use 'iobuf->e_d' when configured to bypass copying
through 'iobuf->d.buf'.
(iobuf_read): Configure 'iobuf->e_d' for 'underflow' if 'iobuf->d.buf'
is empty and external buffer is larger than threshold.

Zero-copy operation in iobuf_read() and underflow() allow bypassing
'iobuf->d.buf' for greater performance. This mainly helps OCB
performance where additional memory copies through iobuf stack
can take significant portion of program time.

  • GnuPG-bug-id: T5828
  • Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>