aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2023-10-31 09:27:15 -0600
committerJens Axboe <axboe@kernel.dk>2023-10-31 09:27:15 -0600
commit95f4d3f054464e997ae1067dc7f4f8ec3f896ccc (patch)
tree554c07b27d1a562f882769b175f8ad1d8a019cf1
parent7a725c78547f7337dddb6fd391f80914f671e583 (diff)
parenta4614bffd786fe06a824f11f2d8602641b3d0e98 (diff)
downloadfio-95f4d3f054464e997ae1067dc7f4f8ec3f896ccc.tar.gz
Merge branch 'pi-perf' of https://github.com/ankit-sam/fio
* 'pi-perf' of https://github.com/ankit-sam/fio: crct10: use isa-l for crc if available
-rw-r--r--HOWTO.rst4
-rwxr-xr-xconfigure29
-rw-r--r--crc/crct10dif_common.c13
-rw-r--r--fio.14
4 files changed, 50 insertions, 0 deletions
diff --git a/HOWTO.rst b/HOWTO.rst
index 6a8fb3e37..34d6afdf6 100644
--- a/HOWTO.rst
+++ b/HOWTO.rst
@@ -2507,6 +2507,10 @@ with the caveat that when used on the command line, they must come after the
If this is set to 0, fio generates protection information for
write case and verifies for read case. Default: 1.
+ For 16 bit CRC generation fio will use isa-l if available otherwise
+ it will use the default slower generator.
+ (see: https://github.com/intel/isa-l)
+
.. option:: pi_chk=str[,str][,str] : [io_uring_cmd]
Controls the protection information check. This can take one or more
diff --git a/configure b/configure
index 3e3f8132a..420d97dbe 100755
--- a/configure
+++ b/configure
@@ -189,6 +189,7 @@ libiscsi="no"
libnbd="no"
libnfs=""
xnvme=""
+isal=""
libblkio=""
libzbc=""
dfs=""
@@ -262,6 +263,8 @@ for opt do
;;
--disable-xnvme) xnvme="no"
;;
+ --disable-isal) isal="no"
+ ;;
--disable-libblkio) libblkio="no"
;;
--disable-tcmalloc) disable_tcmalloc="yes"
@@ -322,6 +325,7 @@ if test "$show_help" = "yes" ; then
echo "--enable-libiscsi Enable iscsi support"
echo "--enable-libnbd Enable libnbd (NBD engine) support"
echo "--disable-xnvme Disable xnvme support even if found"
+ echo "--disable-isal Disable isal support even if found"
echo "--disable-libblkio Disable libblkio support even if found"
echo "--disable-libzbc Disable libzbc even if found"
echo "--disable-tcmalloc Disable tcmalloc support"
@@ -2684,6 +2688,28 @@ if test "$xnvme" != "no" ; then
fi
print_config "xnvme engine" "$xnvme"
+if test "$targetos" = "Linux" ; then
+##########################################
+# Check ISA-L support
+cat > $TMPC << EOF
+#include <isa-l/crc.h>
+#include <stddef.h>
+int main(void)
+{
+ return crc16_t10dif(0, NULL, 4096);
+}
+EOF
+if test "$isal" != "no" ; then
+ if compile_prog "" "-lisal" "ISAL"; then
+ isal="yes"
+ LIBS="-lisal $LIBS"
+ else
+ isal="no"
+ fi
+fi
+print_config "isal" "$isal"
+fi
+
##########################################
# Check if we have libblkio
if test "$libblkio" != "no" ; then
@@ -3334,6 +3360,9 @@ if test "$xnvme" = "yes" ; then
echo "LIBXNVME_CFLAGS=$xnvme_cflags" >> $config_host_mak
echo "LIBXNVME_LIBS=$xnvme_libs" >> $config_host_mak
fi
+if test "$isal" = "yes" ; then
+ output_sym "CONFIG_LIBISAL"
+fi
if test "$libblkio" = "yes" ; then
output_sym "CONFIG_LIBBLKIO"
echo "LIBBLKIO_CFLAGS=$libblkio_cflags" >> $config_host_mak
diff --git a/crc/crct10dif_common.c b/crc/crct10dif_common.c
index cfb2a1b18..1763b1c66 100644
--- a/crc/crct10dif_common.c
+++ b/crc/crct10dif_common.c
@@ -24,6 +24,17 @@
*
*/
+#ifdef CONFIG_LIBISAL
+#include <isa-l/crc.h>
+
+extern unsigned short fio_crc_t10dif(unsigned short crc,
+ const unsigned char *buffer,
+ unsigned int len)
+{
+ return crc16_t10dif(crc, buffer, len);
+}
+
+#else
#include "crc-t10dif.h"
/* Table generated using the following polynomium:
@@ -76,3 +87,5 @@ extern unsigned short fio_crc_t10dif(unsigned short crc,
return crc;
}
+
+#endif
diff --git a/fio.1 b/fio.1
index a8dc8f6c5..c4742aa92 100644
--- a/fio.1
+++ b/fio.1
@@ -2263,6 +2263,10 @@ size greater than protection information size, fio will not generate or verify
the protection information portion of metadata for write or read case
respectively. If this is set to 0, fio generates protection information for
write case and verifies for read case. Default: 1.
+
+For 16 bit CRC generation fio will use isa-l if available otherwise it will
+use the default slower generator.
+(see: https://github.com/intel/isa-l)
.TP
.BI (io_uring_cmd)pi_chk \fR=\fPstr[,str][,str]
Controls the protection information check. This can take one or more of these