From: Sage Weil Date: Thu, 6 Oct 2016 15:49:14 +0000 (-0400) Subject: compressor/zlib: add compressor_zlib_isal config option to disable ISA-L X-Git-Tag: v11.1.0~704^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c3d78f03eefa2e2199e00531d66be900fc09f639;p=ceph.git compressor/zlib: add compressor_zlib_isal config option to disable ISA-L We dynamically enable this if the necessary processor features are present. Allow this probing to be disabled explicitly. Signed-off-by: Sage Weil --- diff --git a/src/common/config_opts.h b/src/common/config_opts.h index 312b8edf36ba..f197d30ee521 100644 --- a/src/common/config_opts.h +++ b/src/common/config_opts.h @@ -97,6 +97,8 @@ OPTION(xio_max_conns_per_portal, OPT_INT, 32) // max xio_connections per portal/ OPTION(xio_transport_type, OPT_STR, "rdma") // xio transport type: {rdma or tcp} OPTION(xio_max_send_inline, OPT_INT, 512) // xio maximum threshold to send inline +OPTION(compressor_zlib_isal, OPT_BOOL, true) + OPTION(async_compressor_enabled, OPT_BOOL, false) OPTION(async_compressor_type, OPT_STR, "snappy") OPTION(async_compressor_threads, OPT_INT, 2) diff --git a/src/compressor/zlib/CompressionPluginZlib.cc b/src/compressor/zlib/CompressionPluginZlib.cc index e330d095a1e9..d0e90eca1976 100644 --- a/src/compressor/zlib/CompressionPluginZlib.cc +++ b/src/compressor/zlib/CompressionPluginZlib.cc @@ -27,6 +27,7 @@ class CompressionPluginZlib : public CompressionPlugin { public: + bool has_isal = false; explicit CompressionPluginZlib(CephContext *cct) : CompressionPlugin(cct) {} @@ -34,11 +35,16 @@ public: virtual int factory(CompressorRef *cs, ostream *ss) { - if (compressor == 0) { + bool isal; + if (cct->_conf->compressor_zlib_isal) { ceph_arch_probe(); - bool isal = (ceph_arch_intel_pclmul && ceph_arch_intel_sse41); - ZlibCompressor *interface = new ZlibCompressor(isal); - compressor = CompressorRef(interface); + isal = (ceph_arch_intel_pclmul && ceph_arch_intel_sse41); + } else { + isal = false; + } + if (compressor == 0 || has_isal != isal) { + compressor = CompressorRef(new ZlibCompressor(isal)); + has_isal = isal; } *cs = compressor; return 0; diff --git a/src/test/compressor/test_compression.cc b/src/test/compressor/test_compression.cc index 12e49b655d42..9dfe83494c35 100644 --- a/src/test/compressor/test_compression.cc +++ b/src/test/compressor/test_compression.cc @@ -27,10 +27,30 @@ class CompressionTest : public ::testing::Test, public ::testing::WithParamInterface { public: + std::string plugin; CompressorRef compressor; + CompressionTest() { + plugin = GetParam(); + size_t pos = plugin.find('/'); + if (pos != std::string::npos) { + string isal = plugin.substr(pos + 1); + plugin = plugin.substr(0, pos); + if (isal == "isal") { + g_conf->set_val("compressor_zlib_isal", "true"); + g_ceph_context->_conf->apply_changes(NULL); + } else if (isal == "noisal") { + g_conf->set_val("compressor_zlib_isal", "false"); + g_ceph_context->_conf->apply_changes(NULL); + } else { + assert(0 == "bad option"); + } + } + cout << "[plugin " << plugin << " (" << GetParam() << ")]" << std::endl; + } + void SetUp() { - compressor = Compressor::create(g_ceph_context, GetParam()); + compressor = Compressor::create(g_ceph_context, plugin); ASSERT_TRUE(compressor); } void TearDown() { @@ -133,7 +153,8 @@ INSTANTIATE_TEST_CASE_P( Compression, CompressionTest, ::testing::Values( - "zlib", + "zlib/isal", + "zlib/noisal", "snappy")); int main(int argc, char **argv) {