summaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorwli5 <[email protected]>2017-03-23 08:58:47 +0800
committerBrian Behlendorf <[email protected]>2017-03-22 17:58:47 -0700
commit6a9d6359982cbff298dd17f68c3103d1269602fa (patch)
treebb4379c514eee44698a59d03b7a56ffc69973fe9 /config
parentd48be524ce96a1a6011bb658985c5b7087d576d2 (diff)
GZIP compression offloading with QAT accelerator
This patch implement the hardware accelerator method in GZIP compression in ZFS. When the ZFS pool is enabled GZIP compression, the compression API will be automatically transferred to the hardware accelerator to free up CPU resource and speed up the compression time. * To enable Intel QAT hardware acceleration in ZOL you need to have QAT hardware and the driver installed: * QAT hardware DH8950: http://ark.intel.com/products/79483/Intel-QuickAssist-Adapter-8950 * QAT driver: https://01.org/intel-quickassist-technology * Start QAT driver in your system: service qat_service start * Enable QAT in ZFS, e.g.: ./configure --with-qat=<qat-driver-path>/QAT1.6 make * Set GZIP compression in ZFS dataset: zfs set compression = gzip <dataset> * Get QAT hardware statistics by: cat /proc/spl/kstat/zfs/qat * To disable QAT in ZFS: insmod zfs.ko zfs_qat_disable=1 Reviewed-by: Brian Behlendorf <[email protected]> Reviewed-by: Jinshan Xiong <[email protected]> Signed-off-by: Weigang Li <[email protected]> Closes #5846
Diffstat (limited to 'config')
-rw-r--r--config/kernel.m490
-rw-r--r--config/zfs-build.m43
2 files changed, 93 insertions, 0 deletions
diff --git a/config/kernel.m4 b/config/kernel.m4
index 25271cedc..71c88aa36 100644
--- a/config/kernel.m4
+++ b/config/kernel.m4
@@ -4,6 +4,7 @@ dnl #
AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
ZFS_AC_KERNEL
ZFS_AC_SPL
+ ZFS_AC_QAT
ZFS_AC_TEST_MODULE
ZFS_AC_KERNEL_OBJTOOL
ZFS_AC_KERNEL_CONFIG
@@ -470,6 +471,95 @@ AC_DEFUN([ZFS_AC_SPL], [
])
dnl #
+dnl # Detect the QAT module to be built against
+dnl # QAT provides hardware acceleration for data compression:
+dnl # https://01.org/intel-quickassist-technology
+dnl # * Download and install QAT driver from the above link
+dnl # * Start QAT driver in your system:
+dnl # service qat_service start
+dnl # * Enable QAT in ZFS, e.g.:
+dnl # ./configure --with-qat=<qat-driver-path>/QAT1.6
+dnl # make
+dnl # * Set GZIP compression in ZFS dataset:
+dnl # zfs set compression = gzip <dataset>
+dnl # Then the data written to this ZFS pool is compressed
+dnl # by QAT accelerator automatically, and de-compressed by
+dnl # QAT when read from the pool.
+dnl # * Get QAT hardware statistics by:
+dnl # cat /proc/icp_dh895xcc_dev/qat
+dnl # * To disable QAT:
+dnl # insmod zfs.ko zfs_qat_disable=1
+dnl #
+AC_DEFUN([ZFS_AC_QAT], [
+ AC_ARG_WITH([qat],
+ AS_HELP_STRING([--with-qat=PATH],
+ [Path to qat source]),
+ AS_IF([test "$withval" = "yes"],
+ AC_MSG_ERROR([--with-qat=PATH requires a PATH]),
+ [qatsrc="$withval"]))
+
+ AC_ARG_WITH([qat-obj],
+ AS_HELP_STRING([--with-qat-obj=PATH],
+ [Path to qat build objects]),
+ [qatbuild="$withval"])
+
+ AS_IF([test ! -z "${qatsrc}"], [
+ AC_MSG_CHECKING([qat source directory])
+ AC_MSG_RESULT([$qatsrc])
+ QAT_SRC="${qatsrc}/quickassist"
+ AS_IF([ test ! -e "$QAT_SRC/include/cpa.h"], [
+ AC_MSG_ERROR([
+ *** Please make sure the qat driver package is installed
+ *** and specify the location of the qat source with the
+ *** '--with-qat=PATH' option then try again. Failed to
+ *** find cpa.h in:
+ ${QAT_SRC}/include])
+ ])
+ ])
+
+ AS_IF([test ! -z "${qatsrc}"], [
+ AC_MSG_CHECKING([qat build directory])
+ AS_IF([test -z "$qatbuild"], [
+ qatbuild="${qatsrc}/build"
+ ])
+
+ AC_MSG_RESULT([$qatbuild])
+ QAT_OBJ=${qatbuild}
+ AS_IF([ ! test -e "$QAT_OBJ/icp_qa_al.ko"], [
+ AC_MSG_ERROR([
+ *** Please make sure the qat driver is installed then try again.
+ *** Failed to find icp_qa_al.ko in:
+ $QAT_OBJ])
+ ])
+
+ AC_SUBST(QAT_SRC)
+ AC_SUBST(QAT_OBJ)
+
+ AC_DEFINE(HAVE_QAT, 1,
+ [qat is enabled and existed])
+ ])
+
+ dnl #
+ dnl # Detect the name used for the QAT Module.symvers file.
+ dnl #
+ AS_IF([test ! -z "${qatsrc}"], [
+ AC_MSG_CHECKING([qat file for module symbols])
+ QAT_SYMBOLS=$QAT_SRC/lookaside/access_layer/src/Module.symvers
+
+ AS_IF([test -r $QAT_SYMBOLS], [
+ AC_MSG_RESULT([$QAT_SYMBOLS])
+ AC_SUBST(QAT_SYMBOLS)
+ ],[
+ AC_MSG_ERROR([
+ *** Please make sure the qat driver is installed then try again.
+ *** Failed to find Module.symvers in:
+ $QAT_SYMBOLS])
+ ])
+ ])
+ ])
+])
+
+dnl #
dnl # Basic toolchain sanity check.
dnl #
AC_DEFUN([ZFS_AC_TEST_MODULE], [
diff --git a/config/zfs-build.m4 b/config/zfs-build.m4
index 6c5f13240..7651dc2c1 100644
--- a/config/zfs-build.m4
+++ b/config/zfs-build.m4
@@ -81,6 +81,9 @@ AC_DEFUN([ZFS_AC_CONFIG], [
[test "x$enable_linux_builtin" != xyes ])
AM_CONDITIONAL([WANT_DEVNAME2DEVID],
[test "x$user_libudev" = xyes ])
+ AM_CONDITIONAL([CONFIG_QAT],
+ [test "$ZFS_CONFIG" = kernel -o "$ZFS_CONFIG" = all] &&
+ [test "x$qatsrc" != x ])
])
dnl #