]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
test/crimson: add v1-crc-enabled for msgr perf
authorYingxin Cheng <yingxin.cheng@intel.com>
Mon, 8 Jul 2019 11:34:32 +0000 (19:34 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Mon, 8 Jul 2019 14:19:18 +0000 (22:19 +0800)
* fix a bug that perf_crimson_msgr and perf_async_msgr cannot connect
  to each other in v1 due to CRC checks;
* add an option to enable v1 CRC checks, because they are enabled in
  real world, and we might want to see the performance impact;

Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/test/crimson/perf_async_msgr.cc
src/test/crimson/perf_crimson_msgr.cc

index aa959073affa5ef96cb71c7dfae91e00abe41ded..0b2de1d11dcf4535a726f0e63db9a568920a549f 100644 (file)
@@ -93,7 +93,9 @@ int main(int argc, char** argv)
     ("addr", po::value<std::string>()->default_value("v1:0.0.0.0:9010"),
      "server address")
     ("bs", po::value<unsigned>()->default_value(0),
-     "server block size");
+     "server block size")
+    ("v1-crc-enabled", po::value<bool>()->default_value(false),
+     "enable v1 CRC checks");
   po::variables_map vm;
   std::vector<std::string> unrecognized_options;
   try {
@@ -117,6 +119,7 @@ int main(int argc, char** argv)
   entity_addr_t target_addr;
   target_addr.parse(addr.c_str(), nullptr);
   auto bs = vm["bs"].as<unsigned>();
+  auto v1_crc_enabled = vm["v1-crc-enabled"].as<bool>();
 
   std::vector<const char*> args(argv, argv + argc);
   auto cct = global_init(nullptr, args,
@@ -124,5 +127,14 @@ int main(int argc, char** argv)
                          CODE_ENVIRONMENT_UTILITY,
                          CINIT_FLAG_NO_MON_CONFIG);
   common_init_finish(cct.get());
+
+  if (v1_crc_enabled) {
+    cct->_conf.set_val("ms_crc_header", "true");
+    cct->_conf.set_val("ms_crc_data", "true");
+  } else {
+    cct->_conf.set_val("ms_crc_header", "false");
+    cct->_conf.set_val("ms_crc_data", "false");
+  }
+
   run(cct.get(), target_addr, bs);
 }
index dacfc0aa81efdbef43a8543653f0814d8787c283..d381412436e553b117855f8b96778958af39a091 100644 (file)
@@ -45,6 +45,7 @@ struct client_config {
   unsigned msgtime;
   unsigned jobs;
   unsigned depth;
+  bool v1_crc_enabled;
 
   std::string str() const {
     std::ostringstream out;
@@ -54,6 +55,7 @@ struct client_config {
         << ", msgtime=" << msgtime
         << ", jobs=" << jobs
         << ", depth=" << depth
+        << ", v1-crc-enabled=" << v1_crc_enabled
         << ")";
     return out.str();
   }
@@ -70,6 +72,7 @@ struct client_config {
     conf.jobs = options["jobs"].as<unsigned>();
     conf.depth = options["depth"].as<unsigned>();
     ceph_assert(conf.depth % conf.jobs == 0);
+    conf.v1_crc_enabled = options["v1-crc-enabled"].as<bool>();
     return conf;
   }
 };
@@ -78,12 +81,14 @@ struct server_config {
   entity_addr_t addr;
   unsigned block_size;
   unsigned core;
+  bool v1_crc_enabled;
 
   std::string str() const {
     std::ostringstream out;
     out << "server[" << addr
         << "](bs=" << block_size
         << ", core=" << core
+        << ", v1-crc-enabled=" << v1_crc_enabled
         << ")";
     return out.str();
   }
@@ -96,6 +101,7 @@ struct server_config {
     conf.addr = addr;
     conf.block_size = options["sbs"].as<unsigned>();
     conf.core = options["core"].as<unsigned>();
+    conf.v1_crc_enabled = options["v1-crc-enabled"].as<bool>();
     return conf;
   }
 };
@@ -152,16 +158,22 @@ static seastar::future<> run(
         return c->send(msg);
       }
 
-      seastar::future<> init(const entity_addr_t& addr) {
-        return container().invoke_on(msgr_sid, [addr] (auto& server) {
+      seastar::future<> init(bool v1_crc_enabled, const entity_addr_t& addr) {
+        return container().invoke_on(msgr_sid, [v1_crc_enabled, addr] (auto& server) {
           // server msgr is always with nonce 0
           auto&& fut = ceph::net::Messenger::create(entity_name_t::OSD(server.sid), server.lname, 0, server.sid);
-          return fut.then([&server, addr](ceph::net::Messenger *messenger) {
-              return server.container().invoke_on_all([messenger](auto& server) {
+          return fut.then(
+            [&server, addr, v1_crc_enabled](ceph::net::Messenger *messenger) {
+              return server.container().invoke_on_all(
+                [messenger, v1_crc_enabled](auto& server) {
                   server.msgr = messenger->get_local_shard();
                   server.msgr->set_default_policy(ceph::net::SocketPolicy::stateless_server(0));
                   server.msgr->set_auth_client(&server.dummy_auth);
                   server.msgr->set_auth_server(&server.dummy_auth);
+                  if (v1_crc_enabled) {
+                    server.msgr->set_crc_header();
+                    server.msgr->set_crc_data();
+                  }
                 }).then([messenger, addr] {
                   return messenger->bind(entity_addrvec_t{addr});
                 }).then([&server, messenger] {
@@ -310,16 +322,20 @@ static seastar::future<> run(
         return sid != 0 && sid <= jobs;
       }
 
-      seastar::future<> init() {
-        return container().invoke_on_all([] (auto& client) {
+      seastar::future<> init(bool v1_crc_enabled) {
+        return container().invoke_on_all([v1_crc_enabled] (auto& client) {
           if (client.is_active()) {
             return ceph::net::Messenger::create(entity_name_t::OSD(client.sid), client.lname, client.sid, client.sid)
-            .then([&client] (ceph::net::Messenger *messenger) {
+            .then([&client, v1_crc_enabled] (ceph::net::Messenger *messenger) {
               client.msgr = messenger;
               client.msgr->set_default_policy(ceph::net::SocketPolicy::lossy_client(0));
               client.msgr->set_require_authorizer(false);
               client.msgr->set_auth_client(&client.dummy_auth);
               client.msgr->set_auth_server(&client.dummy_auth);
+              if (v1_crc_enabled) {
+                client.msgr->set_crc_header();
+                client.msgr->set_crc_data();
+              }
               return client.msgr->start(&client);
             });
           }
@@ -638,8 +654,8 @@ static seastar::future<> run(
           ceph_assert(seastar::smp::count >= 1+server_conf.core);
           ceph_assert(server_conf.core == 0 || server_conf.core > client_conf.jobs);
           return seastar::when_all_succeed(
-              server->init(server_conf.addr),
-              client->init())
+              server->init(server_conf.v1_crc_enabled, server_conf.addr),
+              client->init(client_conf.v1_crc_enabled))
             .then([client, addr = client_conf.server_addr] {
               return client->connect_wait_verify(addr);
             }).then([client, ramptime = client_conf.ramptime,
@@ -654,7 +670,7 @@ static seastar::future<> run(
           logger().info("\nperf settings:\n  {}\n", client_conf.str());
           ceph_assert(seastar::smp::count >= 1+client_conf.jobs);
           ceph_assert(client_conf.jobs > 0);
-          return client->init()
+          return client->init(client_conf.v1_crc_enabled)
             .then([client, addr = client_conf.server_addr] {
               return client->connect_wait_verify(addr);
             }).then([client, ramptime = client_conf.ramptime,
@@ -666,7 +682,7 @@ static seastar::future<> run(
       } else { // mode == perf_mode_t::server
           ceph_assert(seastar::smp::count >= 1+server_conf.core);
           logger().info("\nperf settings:\n  {}\n", server_conf.str());
-          return server->init(server_conf.addr)
+          return server->init(server_conf.v1_crc_enabled, server_conf.addr)
           // dispatch ops
             .then([server] {
               return server->msgr->wait();
@@ -701,7 +717,9 @@ int main(int argc, char** argv)
     ("core", bpo::value<unsigned>()->default_value(0),
      "server running core")
     ("sbs", bpo::value<unsigned>()->default_value(0),
-     "server block size");
+     "server block size")
+    ("v1-crc-enabled", bpo::value<bool>()->default_value(false),
+     "enable v1 CRC checks");
   return app.run(argc, argv, [&app] {
       auto&& config = app.configuration();
       auto mode = config["mode"].as<unsigned>();