summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys-block/fio/files/fio-3.16-verify_only_numberio.patch60
-rw-r--r--sys-block/fio/fio-3.16-r1.ebuild130
2 files changed, 190 insertions, 0 deletions
diff --git a/sys-block/fio/files/fio-3.16-verify_only_numberio.patch b/sys-block/fio/files/fio-3.16-verify_only_numberio.patch
new file mode 100644
index 000000000000..52fb389f62b2
--- /dev/null
+++ b/sys-block/fio/files/fio-3.16-verify_only_numberio.patch
@@ -0,0 +1,60 @@
+From 8859c0675aec03467ed65dfc79ecc874d026f165 Mon Sep 17 00:00:00 2001
+From: Gwendal Grignou <gwendal@chromium.org>
+Date: Mon, 13 Jan 2020 16:35:10 -0800
+Subject: [PATCH] verify: Fix test to not check for numberio when verify_only
+ is true
+
+io->numberio can not be populated when verify_only is true, because
+do_dry_run() build and complete IOs immediately, so it can not replicate
+the numberio that was produced when the data was layered on the media.
+
+Without this fix, using write_random
+[write_stress]
+filename=${FILENAME}
+size=${FILESIZE}
+verify_only=${VERIFY_ONLY}
+readwrite=randwrite
+bs=4k
+ioengine=libaio
+iodepth=32
+direct=1
+do_verify=1
+verify=crc32c
+
+'VERIFY_ONLY=1 FILENAME=/dev/sda1 FILESIZE=1M fio write_random' passes,
+but
+'VERIFY_ONLY=0 FILENAME=/dev/sda1 FILESIZE=1M fio write_random' fails:
+"""verify_only option fails with verify: bad header numberio 1, wanted
+0""".
+The fix addresses the problem by not checking numberio.
+
+Fixes #732
+
+Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
+---
+ verify.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/verify.c b/verify.c
+index a2c0d41dbb8c..cf299ebf9643 100644
+--- a/verify.c
++++ b/verify.c
+@@ -845,13 +845,11 @@ static int verify_header(struct io_u *io_u, struct thread_data *td,
+ * For read-only workloads, the program cannot be certain of the
+ * last numberio written to a block. Checking of numberio will be
+ * done only for workloads that write data. For verify_only,
+- * numberio will be checked in the last iteration when the correct
+- * state of numberio, that would have been written to each block
+- * in a previous run of fio, has been reached.
++ * numberio check is skipped.
+ */
+ if (td_write(td) && (td_min_bs(td) == td_max_bs(td)) &&
+ !td->o.time_based)
+- if (!td->o.verify_only || td->o.loops == 0)
++ if (!td->o.verify_only)
+ if (hdr->numberio != io_u->numberio) {
+ log_err("verify: bad header numberio %"PRIu16
+ ", wanted %"PRIu16,
+--
+2.23.0
+
diff --git a/sys-block/fio/fio-3.16-r1.ebuild b/sys-block/fio/fio-3.16-r1.ebuild
new file mode 100644
index 000000000000..2538a0046ceb
--- /dev/null
+++ b/sys-block/fio/fio-3.16-r1.ebuild
@@ -0,0 +1,130 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="7"
+
+PYTHON_COMPAT=( python2_7 python3_6 )
+
+inherit python-r1 toolchain-funcs
+
+MY_PV="${PV/_rc/-rc}"
+MY_P="${PN}-${MY_PV}"
+
+DESCRIPTION="Jens Axboe's Flexible IO tester"
+HOMEPAGE="https://brick.kernel.dk/snaps/"
+SRC_URI="https://brick.kernel.dk/snaps/${MY_P}.tar.bz2"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~ia64 ~ppc ~ppc64 ~x86"
+IUSE="aio curl glusterfs gnuplot gtk libressl numa rbd rdma static tcmalloc zlib"
+REQUIRED_USE="gnuplot? ( ${PYTHON_REQUIRED_USE} )
+ libressl? ( curl )"
+
+BDEPEND="virtual/pkgconfig"
+
+# GTK+:2 does not offer static libaries.
+LIB_DEPEND="aio? ( dev-libs/libaio[static-libs(+)] )
+ curl? (
+ net-misc/curl:=[static-libs(+)]
+ !libressl? ( dev-libs/openssl:0=[static-libs(+)] )
+ libressl? ( dev-libs/libressl:0=[static-libs(+)] )
+ )
+ glusterfs? ( sys-cluster/glusterfs[static-libs(+)] )
+ gtk? ( dev-libs/glib:2[static-libs(+)] )
+ numa? ( sys-process/numactl[static-libs(+)] )
+ rbd? ( sys-cluster/ceph[static-libs(+)] )
+ rdma? (
+ sys-fabric/libibverbs[static-libs(+)]
+ sys-fabric/librdmacm[static-libs(+)]
+ )
+ tcmalloc? ( dev-util/google-perftools:=[static-libs(+)] )
+ zlib? ( sys-libs/zlib[static-libs(+)] )"
+RDEPEND="!static? ( ${LIB_DEPEND//\[static-libs(+)]} )
+ gtk? ( x11-libs/gtk+:2 )"
+DEPEND="${RDEPEND}
+ static? ( ${LIB_DEPEND} )"
+RDEPEND+="
+ gnuplot? (
+ sci-visualization/gnuplot
+ $(python_gen_any_dep 'dev-python/pandas[${PYTHON_USEDEP}]')
+ ${PYTHON_DEPS}
+ )"
+
+S="${WORKDIR}/${MY_P}"
+
+PATCHES=(
+ "${FILESDIR}"/fio-2.2.13-libmtd.patch
+ "${FILESDIR}"/fio-3.16-snprintf.patch
+ "${FILESDIR}"/fio-3.16-verify_only_numberio.patch
+)
+
+python_check_deps() {
+ has_version "dev-python/pandas[${PYTHON_USEDEP}]"
+}
+
+src_prepare() {
+ default
+
+ sed -i '/^DEBUGFLAGS/s: -D_FORTIFY_SOURCE=2::g' Makefile || die
+
+ # Many checks don't have configure flags.
+ sed -i \
+ -e "s:\<pkg-config\>:$(tc-getPKG_CONFIG):" \
+ -e '/if compile_prog "" "-lz" "zlib" *; *then/ '"s::if $(usex zlib true false) ; then:" \
+ -e '/if compile_prog "" "-laio" "libaio" ; then/'"s::if $(usex aio true false) ; then:" \
+ configure || die
+}
+
+src_configure() {
+ chmod g-w "${T}"
+ # not a real configure script
+ # TODO: pmem
+ set -- \
+ ./configure \
+ --disable-optimizations \
+ --extra-cflags="${CFLAGS} ${CPPFLAGS}" \
+ --cc="$(tc-getCC)" \
+ --disable-pmem \
+ $(usex curl '' '--disable-http') \
+ $(usex glusterfs '' '--disable-gfapi') \
+ $(usex gtk '--enable-gfio' '') \
+ $(usex numa '' '--disable-numa') \
+ $(usex rbd '' '--disable-rbd') \
+ $(usex rdma '' '--disable-rdma') \
+ $(usex static '--build-static' '') \
+ $(usex tcmalloc '' '--disable-tcmalloc')
+ echo "$@"
+ "$@" || die 'configure failed'
+}
+
+src_compile() {
+ emake V=1 OPTFLAGS=
+}
+
+src_install() {
+ emake install DESTDIR="${D}" prefix="${EPREFIX}/usr" mandir="${EPREFIX}/usr/share/man"
+
+ if use gnuplot ; then
+ sed -i 's:python2.7:python:g' \
+ "${ED}/usr/bin/fio2gnuplot" \
+ "${ED}/usr/bin/fiologparser_hist.py" \
+ "${ED}/usr/bin/fiologparser.py"
+ python_replicate_script \
+ "${ED}/usr/bin/fio2gnuplot" \
+ "${ED}/usr/bin/fiologparser_hist.py" \
+ "${ED}/usr/bin/fiologparser.py"
+ else
+ rm "${ED}"/usr/bin/{fio2gnuplot,fio_generate_plots} || die
+ rm "${ED}"/usr/share/man/man1/{fio2gnuplot,fio_generate_plots}.1 || die
+ rm "${ED}"/usr/share/fio/*.gpm || die
+ rmdir "${ED}"/usr/share/fio/ 2>/dev/null
+ fi
+
+ # This tool has security/parallel issues -- it hardcodes /tmp/template.fio.
+ rm "${ED}"/usr/bin/genfio || die
+
+ dodoc README REPORTING-BUGS HOWTO
+ docinto examples
+ dodoc examples/*
+}