diff --git a/ChangeLog b/ChangeLog index 2ae76b730..b2ba41351 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,12 @@ Changes in version 0.2.1.16-?? - 2009-??-?? + o Major performance improvements (on 0.2.0.x): + - Disable and refactor some debugging checks that forced a linear scan + over the whole server-side DNS cache. These accounted for over 50% + of CPU time on a relatively busy exit node's gprof profile. Found by + Jacob. + - Disable some debugging checks that appeared in exit node profile + data. + o Minor bugfixes (on 0.2.0.x): - Log correct error messages for DNS-related network errors on Windows. diff --git a/src/or/dns.c b/src/or/dns.c index ad5b5de40..74852b0f7 100644 --- a/src/or/dns.c +++ b/src/or/dns.c @@ -736,15 +736,25 @@ void assert_connection_edge_not_dns_pending(edge_connection_t *conn) { pending_connection_t *pend; - cached_resolve_t **resolve; + cached_resolve_t search; +#if 1 + cached_resolve_t *resolve; + strlcpy(search.address, conn->_base.address, sizeof(search.address)); + resolve = HT_FIND(cache_map, &cache_root, &search); + if (!resolve) + return; + for (pend = resolve->pending_connections; pend; pend = pend->next) { + tor_assert(pend->conn != conn); + } +#else + cached_resolve_t **resolve; HT_FOREACH(resolve, cache_map, &cache_root) { - for (pend = (*resolve)->pending_connections; - pend; - pend = pend->next) { + for (pend = (*resolve)->pending_connections; pend; pend = pend->next) { tor_assert(pend->conn != conn); } } +#endif } /** Log an error and abort if any connection waiting for a DNS resolve is diff --git a/src/or/main.c b/src/or/main.c index a26fd0eff..8fc712bba 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -451,7 +451,7 @@ conn_read_callback(int fd, short event, void *_conn) log_debug(LD_NET,"socket %d wants to read.",conn->s); - assert_connection_ok(conn, time(NULL)); + /* assert_connection_ok(conn, time(NULL)); */ if (connection_handle_read(conn) < 0) { if (!conn->marked_for_close) { @@ -483,7 +483,7 @@ conn_write_callback(int fd, short events, void *_conn) LOG_FN_CONN(conn, (LOG_DEBUG, LD_NET, "socket %d wants to write.",conn->s)); - assert_connection_ok(conn, time(NULL)); + /* assert_connection_ok(conn, time(NULL)); */ if (connection_handle_write(conn, 0) < 0) { if (!conn->marked_for_close) { @@ -529,7 +529,7 @@ conn_close_if_marked(int i) return 0; /* nothing to see here, move along */ now = time(NULL); assert_connection_ok(conn, now); - assert_all_pending_dns_resolves_ok(); + /* assert_all_pending_dns_resolves_ok(); */ log_debug(LD_NET,"Cleaning up connection (fd %d).",conn->s); if ((conn->s >= 0 || conn->linked_conn) && connection_wants_to_flush(conn)) {