The current implementation of both ra_svn and ra_dav are implemented
without overlapping requests. In other words they always wait for the
response from the server for the previous request before sending the
next request. This is a huge performance problem over high latency
links, but it is very noticable even over a fast LAN. This is an issue
for both import/commit and export/co/update.
Fortunately for me, the ra_svn implementation was very easy to hack to
demonstrate the possible performance gains. Using the attached patch,
the svn protocol becomes much more streamy. I performed a checkout of a
repository containing 138 small files (around 1 kiB average) over a 25
ms (~1 Mb) ssh tunneled link. Before applying the patch above the
checkout took 10 seconds. After applying the patch it takes 2 seconds,
i.e. a five-fold improvement.
So what do you think? Can we make the protocols streamy? Should I create
an issue?
/Tobias
Index: subversion/libsvn_ra_svn/editor.c
===================================================================
--- subversion/libsvn_ra_svn/editor.c (revision 7486)
+++ subversion/libsvn_ra_svn/editor.c (working copy)
@@ -180,7 +180,6 @@
ra_svn_baton_t *b = dir_baton;
SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "close-dir", "c", b->token));
- SVN_ERR(svn_ra_svn_read_cmd_response(b->conn, pool, ""));
return SVN_NO_ERROR;
}
@@ -279,7 +278,6 @@
SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "close-file", "c(?c)",
b->token, text_checksum));
- SVN_ERR(svn_ra_svn_read_cmd_response(b->conn, pool, ""));
return SVN_NO_ERROR;
}
@@ -513,7 +511,6 @@
SVN_CMD_ERR(ds->editor->close_directory(entry->baton, pool));
apr_hash_set(ds->tokens, token, APR_HASH_KEY_STRING, NULL);
apr_pool_destroy(entry->pool);
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, ""));
return SVN_NO_ERROR;
}
@@ -651,7 +648,6 @@
SVN_CMD_ERR(ds->editor->close_file(entry->baton, text_checksum, pool));
apr_hash_set(ds->tokens, token, APR_HASH_KEY_STRING, NULL);
apr_pool_destroy(entry->pool);
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, ""));
return SVN_NO_ERROR;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Wed Oct 22 22:53:35 2003