From 5fd2dc0fc6812affb5ae36bc68a7a0c13553054c Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Mon, 8 Jul 2019 19:34:32 +0800 Subject: [PATCH] test/crimson: add v1-crc-enabled for msgr perf * 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 --- src/test/crimson/perf_async_msgr.cc | 14 ++++++++- src/test/crimson/perf_crimson_msgr.cc | 42 +++++++++++++++++++-------- 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/src/test/crimson/perf_async_msgr.cc b/src/test/crimson/perf_async_msgr.cc index aa959073aff..0b2de1d11dc 100644 --- a/src/test/crimson/perf_async_msgr.cc +++ b/src/test/crimson/perf_async_msgr.cc @@ -93,7 +93,9 @@ int main(int argc, char** argv) ("addr", po::value()->default_value("v1:0.0.0.0:9010"), "server address") ("bs", po::value()->default_value(0), - "server block size"); + "server block size") + ("v1-crc-enabled", po::value()->default_value(false), + "enable v1 CRC checks"); po::variables_map vm; std::vector 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(); + auto v1_crc_enabled = vm["v1-crc-enabled"].as(); std::vector 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); } diff --git a/src/test/crimson/perf_crimson_msgr.cc b/src/test/crimson/perf_crimson_msgr.cc index dacfc0aa81e..d381412436e 100644 --- a/src/test/crimson/perf_crimson_msgr.cc +++ b/src/test/crimson/perf_crimson_msgr.cc @@ -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(); conf.depth = options["depth"].as(); ceph_assert(conf.depth % conf.jobs == 0); + conf.v1_crc_enabled = options["v1-crc-enabled"].as(); 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(); conf.core = options["core"].as(); + conf.v1_crc_enabled = options["v1-crc-enabled"].as(); 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()->default_value(0), "server running core") ("sbs", bpo::value()->default_value(0), - "server block size"); + "server block size") + ("v1-crc-enabled", bpo::value()->default_value(false), + "enable v1 CRC checks"); return app.run(argc, argv, [&app] { auto&& config = app.configuration(); auto mode = config["mode"].as(); -- 2.39.5