[PATCH v2 0/5] Support large pattern buffers

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

 



Hello,

This is v2 of this patchset which includes changes for the feedback
thus far.

When testing storage platforms that have integrated compression it is
useful to use specifically compressible real world data. The existing
buffer_compress_percentage option doesn't work well for testing the
performance of the compression algorithm portion of the stack seeing it
results in random data (which can slow down many compression algorithms)
followed by trivially compressible data (which can often be compressed
at a higher performance than real world data).

Instead of the crude compressibility approximation when using
buffer_compress_percentage, it would be useful to specify specific test
data for benchmarking purposes. Using real world data or well-known
test data like the Calgary Corpus would help to make the benchmarks
closer to real world applications.

The existing buffer_pattern option would almost work for this, except it
is limited to a maximum length of 512B and will be repeated in the
IO buffer and thus can't be used for any arbitrary compression
size seeing repeated data is easily compressed.

This patch set proposes allowing much larger buffer patterns,
that may be loaded from a file. The first patch provides the
infrastructure for passing arbitrary sized buffers in the client/server
protocol (which means the server version number must be bumped), the
second patch adds a method for pre-calculating the buffer size
in parse_and_fill_pattern(), the third patch supports properly
reading large files and the final patch enables dynamic allocation of the
buffers themselves.

The buffer_pattern will still be truncated to the block size of
the IO and repeated for every IO, but this should still be acceptable
for testing compression in storage which tends to operate on
fixed size chunks anyway.

An arbitrary limit on the pattern buffer of 128MB is still enforced to
avoid issues that would crop up with the maximum limit of the
client/server commands (FIO_SERVER_MAX_CMD_MB). This should be more than
enough seeing it isn't useful to specify a buffer greater than the block
size and blocksizes that large are not very practical.

Thanks,

Logan

--

Changes since v1:
  - Added comment on the patterns member of struct thread_options_pack,
    per Vincent
  - Added a test in the suite to test a 16KB buffer and verify pattern

--

Logan Gunthorpe (5):
  cconv: Support pattern buffers of arbitrary size
  lib/pattern: Support NULL output buffer in parse_and_fill_pattern()
  lib/pattern: Support short repeated read calls when loading from file
  options: Support arbitrarily long pattern buffers
  test: add large pattern test

 cconv.c            | 86 ++++++++++++++++++++++++++++++-----------
 client.c           | 17 +++++---
 gclient.c          | 12 ++++--
 lib/pattern.c      | 96 ++++++++++++++++++++++++++++++++++++++--------
 lib/pattern.h      | 21 +++++++---
 options.c          | 10 ++---
 server.c           | 23 ++++++-----
 server.h           |  2 +-
 stat.h             |  1 -
 t/jobs/t0027.fio   | 14 +++++++
 t/run-fio-tests.py | 29 ++++++++++++++
 thread_options.h   | 15 +++++---
 12 files changed, 253 insertions(+), 73 deletions(-)
 create mode 100644 t/jobs/t0027.fio


base-commit: 07c8fe21021681f86fbfd3c3d63b88a5ebd4e557
--
2.30.2



[Index of Archives]     [Linux Kernel]     [Linux SCSI]     [Linux IDE]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux