I noticed that mod_dav_svn is a lot slower than file: and svn: when doing
svn export or update.
I also noticed that the hard disk on the server performs enormous amounts
of seeking when using mod_dav. I ran all three access methods using
strace and counted the number of fsync() calls. The repository I'm
checking out is very small and has only 30 files. I get the following
(using 0.20.1 for both the client and the server):
access number of fsync() calls
-----------------------------------
file 1
svn 1
mod_dav 635
The mod_dav number is huge considering that only 30 files have been
checked out. The strace for open and fsync contains a lot of chunks
like this:
open("/repo_path/db/log.0000000006", O_RDWR|O_CREAT|O_LARGEFILE, 0666) = 19
fsync(19) = 0
open("/web_home/.htaccess", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/who_knows/htpasswd", O_RDONLY) = 19
open("/repo_path/format", O_RDONLY) = 19
open("/repo_path/db/DB_CONFIG", O_RDONLY|O_LARGEFILE) = 19
open("/repo_path/db/__db.001", O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 0666) = -1 EEXIST (File exists)
open("/repo_path/db/__db.001", O_RDWR|O_LARGEFILE) = 19
open("/repo_path/db/__db.001", O_RDWR|O_CREAT|O_LARGEFILE, 0666) = 19
open("/repo_path/db/__db.002", O_RDWR|O_CREAT|O_LARGEFILE, 0666) = 19
open("/repo_path/db/__db.003", O_RDWR|O_CREAT|O_LARGEFILE, 0666) = 19
open("/repo_path/db/__db.004", O_RDWR|O_CREAT|O_LARGEFILE, 0666) = 19
open("/repo_path/db/__db.005", O_RDWR|O_CREAT|O_LARGEFILE, 0666) = 19
open("/repo_path/db/nodes", O_RDWR|O_LARGEFILE) = 19
open("/repo_path/db/nodes", O_RDWR|O_LARGEFILE) = 19
open("/repo_path/db/revisions", O_RDWR|O_LARGEFILE) = 20
open("/repo_path/db/revisions", O_RDWR|O_LARGEFILE) = 20
open("/repo_path/db/transactions", O_RDWR|O_LARGEFILE) = 21
open("/repo_path/db/transactions", O_RDWR|O_LARGEFILE) = 21
open("/repo_path/db/copies", O_RDWR|O_LARGEFILE) = 22
open("/repo_path/db/copies", O_RDWR|O_LARGEFILE) = 22
open("/repo_path/db/changes", O_RDWR|O_LARGEFILE) = 23
open("/repo_path/db/changes", O_RDWR|O_LARGEFILE) = 23
open("/repo_path/db/representations", O_RDWR|O_LARGEFILE) = 24
open("/repo_path/db/representations", O_RDWR|O_LARGEFILE) = 24
open("/repo_path/db/strings", O_RDWR|O_LARGEFILE) = 25
open("/repo_path/db/strings", O_RDWR|O_LARGEFILE) = 25
open("/repo_path/db/uuids", O_RDWR|O_LARGEFILE) = 26
open("/repo_path/db/uuids", O_RDWR|O_LARGEFILE) = 26
open("/repo_path/locks/db.lock", O_RDONLY) = 27
open("/etc/mtab", O_RDONLY) = 28
open("/proc/cpuinfo", O_RDONLY) = 28
fsync(19) = 0
fsync(19) = 0
fsync(20) = 0
fsync(20) = 0
fsync(21) = 0
fsync(21) = 0
fsync(22) = 0
fsync(22) = 0
fsync(23) = 0
fsync(23) = 0
fsync(24) = 0
fsync(24) = 0
fsync(25) = 0
fsync(25) = 0
fsync(26) = 0
I suppose these blocks represent transactions. Why are there transactions
for read-only operations such as export and update?
This is not a big problem for me, but I was curious. I could not find
an issue about this so I thought that you might want to know.
/Tobias
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Tue Apr 1 20:13:36 2003