]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
compressor: fix compilation issues about QATzip 44608/head
authorMiaomiao Liu <miaomiao.liu@intel.com>
Wed, 19 Jan 2022 07:27:07 +0000 (15:27 +0800)
committerMiaomiao Liu <miaomiao.liu@intel.com>
Fri, 18 Feb 2022 09:45:30 +0000 (17:45 +0800)
Signed-off-by: Miaomiao Liu <miaomiao.liu@intel.com>
Signed-off-by: Hualong Feng <hualong.feng@intel.com>
CMakeLists.txt
cmake/modules/Findqatzip.cmake
src/CMakeLists.txt
src/compressor/CMakeLists.txt
src/compressor/QatAccel.cc
src/compressor/QatAccel.h
src/compressor/zlib/ZlibCompressor.cc

index 531660102218594d92f9d52a5f40e72b1c71e3a0..7a8b084b6e8711819428e98957ee31716bd5341b 100644 (file)
@@ -279,7 +279,7 @@ endif()
 option(WITH_QATZIP "Enable QATZIP" OFF)
 if(WITH_QATZIP)
   find_package(qatzip REQUIRED)
-  set(HAVE_QATZIP ${QATZIP_FOUND})
+  set(HAVE_QATZIP ${qatzip_FOUND})
 endif(WITH_QATZIP)
 
 # needs mds and? XXX
index 3a593228dd010ee1cf0e8eb2310ad731f08ad680..2d0f2ace3887564d7e9985fa1b04ae73ab68aa36 100644 (file)
@@ -1,17 +1,24 @@
-# - Find Qatzip
+# - Find qatzip
 # Find the qatzip compression library and includes
 #
-# QATZIP_INCLUDE_DIR - where to find qatzip.h, etc.
-# QATZIP_LIBRARIES - List of libraries when using qatzip.
-# QATZIP_FOUND - True if qatzip found.
+# qatzip_INCLUDE_DIR - where to find qatzip.h, etc.
+# qatzip_LIBRARIES - List of libraries when using qatzip.
+# qatzip_FOUND - True if qatzip found.
 
-find_path(QATZIP_INCLUDE_DIR NAMES qatzip.h)
-
-find_library(QATZIP_LIBRARIES NAMES qatzip)
+find_path(qatzip_INCLUDE_DIR NAMES qatzip.h)
+find_library(qatzip_LIBRARIES NAMES qatzip HINTS /usr/local/lib64/)
 
 include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(qatzip DEFAULT_MSG QATZIP_LIBRARIES QATZIP_INCLUDE_DIR)
+find_package_handle_standard_args(qatzip DEFAULT_MSG qatzip_LIBRARIES qatzip_INCLUDE_DIR)
 
 mark_as_advanced(
-  QATZIP_LIBRARIES
-  QATZIP_INCLUDE_DIR)
+  qatzip_LIBRARIES
+  qatzip_INCLUDE_DIR)
+
+if(qatzip_FOUND AND NOT TARGET qatzip::qatzip)
+  add_library(qatzip::qatzip SHARED IMPORTED)
+  set_target_properties(qatzip::qatzip PROPERTIES
+    INTERFACE_INCLUDE_DIRECTORIES "${qatzip_INCLUDE_DIR}"
+    IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+    IMPORTED_LOCATION "${qatzip_LIBRARIES}")
+endif()
index 1157df00a1995d7ffb1fdd31db5696b5890050fd..abace5f0b19af7e443b83cb55623677cc32d8e14 100644 (file)
@@ -490,7 +490,7 @@ if(NOT WITH_SYSTEM_BOOST)
 endif()
 
 if(HAVE_QATZIP)
-  list(APPEND ceph_common_deps ${QATZIP_LIBRARIES})
+  list(APPEND ceph_common_deps ${qatzip_LIBRARIES})
 endif()
 
 if(WITH_DPDK)
index d8b9fd83cdace12bb9db502f4569dcfa18e257f8..9b10fff53301ce28055f48cdb97de614c1317603 100644 (file)
@@ -5,6 +5,13 @@ if (HAVE_QATZIP)
   list(APPEND compressor_srcs QatAccel.cc)
 endif()
 add_library(compressor_objs OBJECT ${compressor_srcs})
+if(HAVE_QATZIP AND HAVE_QATDRV)
+  target_link_libraries(compressor_objs PRIVATE
+                        QatDrv::qat_s
+                        QatDrv::usdm_drv_s
+                        qatzip::qatzip
+                       )
+endif()
 
 ## compressor plugins
 
@@ -22,10 +29,7 @@ if(HAVE_BROTLI)
   add_subdirectory(brotli)
 endif()
 
-add_library(compressor STATIC ${compressor_srcs})
-if(HAVE_QATZIP)
-  target_link_libraries(compressor PRIVATE ${QATZIP_LIBRARIES})
-endif()
+add_library(compressor STATIC $<TARGET_OBJECTS:compressor_objs>)
 
 set(ceph_compressor_libs
     ceph_snappy
index 79de9e3445c675fdb8e6e6f6509267d01980962a..e9b8d453113251f1d73315ea118c995d5dbea093 100644 (file)
  * Foundation.  See file COPYING.
  *
  */
-
+#include <qatzip.h>
 #include "QatAccel.h"
 
+void QzSessionDeleter::operator() (struct QzSession_S *session) {
+  if (NULL != session->internal) {
+    qzTeardownSession(session);
+    qzClose(session);
+  }
+  delete session;
+}
+
 /* Estimate data expansion after decompression */
 static const unsigned int expansion_ratio[] = {5, 20, 50, 100, 200};
 
-QatAccel::~QatAccel() {
-  if (NULL != session.internal) {
-    qzTeardownSession(&session);
-    qzClose(&session);
-  }
+QatAccel::QatAccel() {
+  session.reset(new struct QzSession_S);
+  memset(session.get(), 0, sizeof(struct QzSession_S));
 }
 
+QatAccel::~QatAccel() {}
+
 bool QatAccel::init(const std::string &alg) {
   QzSessionParams_T params = {(QzHuffmanHdr_T)0,};
   int rc;
@@ -41,14 +49,14 @@ bool QatAccel::init(const std::string &alg) {
   if (rc != QZ_OK)
       return false;
 
-  rc = qzInit(&session, QZ_SW_BACKUP_DEFAULT);
+  rc = qzInit(session.get(), QZ_SW_BACKUP_DEFAULT);
   if (rc != QZ_OK && rc != QZ_DUPLICATE && rc != QZ_NO_HW)
     return false;
 
-  rc = qzSetupSession(&session, &params);
+  rc = qzSetupSession(session.get(), &params);
   if (rc != QZ_OK && rc != QZ_DUPLICATE && rc != QZ_NO_HW ) {
-    qzTeardownSession(&session);
-    qzClose(&session);
+    qzTeardownSession(session.get());
+    qzClose(session.get());
     return false;
   }
 
@@ -59,10 +67,10 @@ int QatAccel::compress(const bufferlist &in, bufferlist &out, boost::optional<in
   for (auto &i : in.buffers()) {
     const unsigned char* c_in = (unsigned char*) i.c_str();
     unsigned int len = i.length();
-    unsigned int out_len = qzMaxCompressedLength(len);
+    unsigned int out_len = qzMaxCompressedLength(len, session.get());
 
     bufferptr ptr = buffer::create_small_page_aligned(out_len);
-    int rc = qzCompress(&session, c_in, &len, (unsigned char *)ptr.c_str(), &out_len, 1);
+    int rc = qzCompress(session.get(), c_in, &len, (unsigned char *)ptr.c_str(), &out_len, 1);
     if (rc != QZ_OK)
       return -1;
     out.append(ptr, 0, out_len);
@@ -103,9 +111,9 @@ int QatAccel::decompress(bufferlist::const_iterator &p,
     bufferptr ptr = buffer::create_small_page_aligned(out_len);
 
     if (joint)
-      rc = qzDecompress(&session, (const unsigned char*)tmp.c_str(), &len, (unsigned char*)ptr.c_str(), &out_len);
+      rc = qzDecompress(session.get(), (const unsigned char*)tmp.c_str(), &len, (unsigned char*)ptr.c_str(), &out_len);
     else
-      rc = qzDecompress(&session, (const unsigned char*)cur_ptr.c_str(), &len, (unsigned char*)ptr.c_str(), &out_len);
+      rc = qzDecompress(session.get(), (const unsigned char*)cur_ptr.c_str(), &len, (unsigned char*)ptr.c_str(), &out_len);
     if (rc == QZ_DATA_ERROR) {
       if (!joint) {
         tmp.append(cur_ptr.c_str(), cur_ptr.length());
index 3f7ccd25d10cb3f91e53937609310c551d672230..ff99e200046f440a2037ff71b0b591ca290caf5a 100644 (file)
 #ifndef CEPH_QATACCEL_H
 #define CEPH_QATACCEL_H
 
-#include <qatzip.h>
+#include <memory>
 #include <boost/optional.hpp>
 #include "include/buffer.h"
 
+extern "C" struct QzSession_S; //struct QzSession_S comes from QAT libraries
+
+struct QzSessionDeleter {
+  void operator() (struct QzSession_S *session);
+};
+
 class QatAccel {
-  QzSession_T session;
+  std::unique_ptr<struct QzSession_S, QzSessionDeleter> session;
 
  public:
-  QatAccel() : session({0}) {}
+  QatAccel();
   ~QatAccel();
 
   bool init(const std::string &alg);
index 27b43c49cbec0f3b30c2a1f6351a4c8b0649d267..d1ee1549977bba86e4001a0768d105bf90ca0b8a 100644 (file)
@@ -246,10 +246,6 @@ int ZlibCompressor::decompress(bufferlist::const_iterator &p, size_t compressed_
 
 int ZlibCompressor::decompress(const bufferlist &in, bufferlist &out, boost::optional<int32_t> compressor_message)
 {
-#ifdef HAVE_QATZIP
-  if (qat_enabled)
-    return qat_accel.decompress(in, out, compressor_message);
-#endif
   auto i = std::cbegin(in);
   return decompress(i, in.length(), out, compressor_message);
 }