Merge pull request #10844 from ctiller/PSC

Fixes for test stability (especially microbenchmarks)
pull/10840/head^2
Craig Tiller 8 years ago committed by GitHub
commit b864e7c41c
  1. 4
      test/core/util/port_server_client.c
  2. 26
      test/cpp/microbenchmarks/fullstack_fixtures.h
  3. 1
      tools/jenkins/run_performance.sh
  4. 27
      tools/profiling/microbenchmarks/bm_diff.py
  5. 7
      tools/run_tests/python_utils/port_server.py

@ -103,7 +103,7 @@ void grpc_free_port_using_server(int port) {
grpc_resource_quota *resource_quota = grpc_resource_quota *resource_quota =
grpc_resource_quota_create("port_server_client/free"); grpc_resource_quota_create("port_server_client/free");
grpc_httpcli_get(&exec_ctx, &context, &pr.pops, resource_quota, &req, grpc_httpcli_get(&exec_ctx, &context, &pr.pops, resource_quota, &req,
grpc_timeout_seconds_to_deadline(10), grpc_timeout_seconds_to_deadline(30),
grpc_closure_create(freed_port_from_server, &pr, grpc_closure_create(freed_port_from_server, &pr,
grpc_schedule_on_exec_ctx), grpc_schedule_on_exec_ctx),
&rsp); &rsp);
@ -235,7 +235,7 @@ int grpc_pick_port_using_server(void) {
grpc_resource_quota_create("port_server_client/pick"); grpc_resource_quota_create("port_server_client/pick");
grpc_httpcli_get( grpc_httpcli_get(
&exec_ctx, &context, &pr.pops, resource_quota, &req, &exec_ctx, &context, &pr.pops, resource_quota, &req,
grpc_timeout_seconds_to_deadline(10), grpc_timeout_seconds_to_deadline(30),
grpc_closure_create(got_port_from_server, &pr, grpc_schedule_on_exec_ctx), grpc_closure_create(got_port_from_server, &pr, grpc_schedule_on_exec_ctx),
&pr.response); &pr.response);
grpc_resource_quota_unref_internal(&exec_ctx, resource_quota); grpc_resource_quota_unref_internal(&exec_ctx, resource_quota);

@ -113,13 +113,17 @@ class TCP : public FullstackFixture {
public: public:
TCP(Service* service, const FixtureConfiguration& fixture_configuration = TCP(Service* service, const FixtureConfiguration& fixture_configuration =
FixtureConfiguration()) FixtureConfiguration())
: FullstackFixture(service, fixture_configuration, MakeAddress()) {} : FullstackFixture(service, fixture_configuration, MakeAddress(&port_)) {}
~TCP() { grpc_recycle_unused_port(port_); }
private: private:
static grpc::string MakeAddress() { int port_;
int port = grpc_pick_unused_port_or_die();
static grpc::string MakeAddress(int* port) {
*port = grpc_pick_unused_port_or_die();
std::stringstream addr; std::stringstream addr;
addr << "localhost:" << port; addr << "localhost:" << *port;
return addr.str(); return addr.str();
} }
}; };
@ -128,14 +132,18 @@ class UDS : public FullstackFixture {
public: public:
UDS(Service* service, const FixtureConfiguration& fixture_configuration = UDS(Service* service, const FixtureConfiguration& fixture_configuration =
FixtureConfiguration()) FixtureConfiguration())
: FullstackFixture(service, fixture_configuration, MakeAddress()) {} : FullstackFixture(service, fixture_configuration, MakeAddress(&port_)) {}
~UDS() { grpc_recycle_unused_port(port_); }
private: private:
static grpc::string MakeAddress() { int port_;
int port = grpc_pick_unused_port_or_die(); // just for a unique id - not a
// real port static grpc::string MakeAddress(int* port) {
*port = grpc_pick_unused_port_or_die(); // just for a unique id - not a
// real port
std::stringstream addr; std::stringstream addr;
addr << "unix:/tmp/bm_fullstack." << port; addr << "unix:/tmp/bm_fullstack." << *port;
return addr.str(); return addr.str();
} }
}; };

@ -37,4 +37,5 @@ BENCHMARKS_TO_RUN="bm_fullstack_unary_ping_pong bm_fullstack_streaming_ping_pong
# Enter the gRPC repo root # Enter the gRPC repo root
cd $(dirname $0)/../.. cd $(dirname $0)/../..
tools/run_tests/start_port_server.py
tools/profiling/microbenchmarks/bm_diff.py -d origin/$ghprbTargetBranch -b $BENCHMARKS_TO_RUN tools/profiling/microbenchmarks/bm_diff.py -d origin/$ghprbTargetBranch -b $BENCHMARKS_TO_RUN

@ -204,7 +204,10 @@ def eintr_be_gone(fn):
def read_json(filename): def read_json(filename):
with open(filename) as f: return json.loads(f.read()) try:
with open(filename) as f: return json.loads(f.read())
except ValueError, e:
return None
def finalize(): def finalize():
@ -217,16 +220,18 @@ def finalize():
js_old_ctr = read_json('%s.counters.old.%d.json' % (bm, loop)) js_old_ctr = read_json('%s.counters.old.%d.json' % (bm, loop))
js_old_opt = read_json('%s.opt.old.%d.json' % (bm, loop)) js_old_opt = read_json('%s.opt.old.%d.json' % (bm, loop))
for row in bm_json.expand_json(js_new_ctr, js_new_opt): if js_new_ctr:
print row for row in bm_json.expand_json(js_new_ctr, js_new_opt):
name = row['cpp_name'] print row
if name.endswith('_mean') or name.endswith('_stddev'): continue name = row['cpp_name']
benchmarks[name].add_sample(row, True) if name.endswith('_mean') or name.endswith('_stddev'): continue
for row in bm_json.expand_json(js_old_ctr, js_old_opt): benchmarks[name].add_sample(row, True)
print row if js_old_ctr:
name = row['cpp_name'] for row in bm_json.expand_json(js_old_ctr, js_old_opt):
if name.endswith('_mean') or name.endswith('_stddev'): continue print row
benchmarks[name].add_sample(row, False) name = row['cpp_name']
if name.endswith('_mean') or name.endswith('_stddev'): continue
benchmarks[name].add_sample(row, False)
really_interesting = set() really_interesting = set()
for name, bm in benchmarks.items(): for name, bm in benchmarks.items():

@ -46,7 +46,7 @@ import threading
# increment this number whenever making a change to ensure that # increment this number whenever making a change to ensure that
# the changes are picked up by running CI servers # the changes are picked up by running CI servers
# note that all changes must be backwards compatible # note that all changes must be backwards compatible
_MY_VERSION = 11 _MY_VERSION = 14
if len(sys.argv) == 2 and sys.argv[1] == 'dump_version': if len(sys.argv) == 2 and sys.argv[1] == 'dump_version':
@ -166,12 +166,11 @@ class Handler(BaseHTTPRequestHandler):
elif self.path == '/quitquitquit': elif self.path == '/quitquitquit':
self.send_response(200) self.send_response(200)
self.end_headers() self.end_headers()
sys.exit(0) self.server.shutdown()
class ThreadedHTTPServer(ThreadingMixIn, HTTPServer): class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
"""Handle requests in a separate thread""" """Handle requests in a separate thread"""
httpd = ThreadedHTTPServer(('', args.port), Handler) ThreadedHTTPServer(('', args.port), Handler).serve_forever()
httpd.serve_forever()

Loading…
Cancel
Save