CVS is not famous because of its scalabilty. Especially for operations like tag and log the amount of data stored into the manipulated module is very signifiant for the operation time length. Even on a medium project, these operations can take several minutes whereas small operations like add, remove, commit, ... keep a reasonable response time.
Even if a modern response to this problem is migrating the repository to subversion. There are some tips to keep your CVS server optimized.
Try to keep the repository size reasonnable. Think that tag and log operations depend of the repository size (not the workspace size). You can have a project with a checkout of 100 Mb and a repository of 1 Gb ...
Some tips to limit the repository size :
Take care of the cvs usage made by automatic tools :
log and tag operations, check the schedule periods, etc ...cvslock) can be optimized by processing each cvs module separatelyAfter optimize your CVS usage, it’s time to optimize the CVS server performance.
/var/lock/cvs and use a tmpfs filesystem)iostats is your friend)Dispatch several projects on several servers isn’t necessary the best solution. Most of the time, the activity peaks are due to a particular project activity (delivery for instance). It seems better to have a big CVS server than several small servers. The activity peak will be supported by a big server rather than one small server.
You can test use clustering technologies .. and tell us how you do it ;o)
On the same server, having multiple repositories doesn’t seem to be useful. The only possible limitations are some locked files into the CVSROOT directory.