AccuRev Server Performance
This section is targeted to administrators planning a new enterprise deployment of AccuRev configuration management software, as well as to those planning the growth of an existing deployment. It will also be useful for administrators whose existing deployment is experiencing lower-than-expected performance.
When evaluating AccuRev performance, it is important to use the actual hardware that you will be using in production, or hardware of the same class.
AccuRev Architecture Overview
AccuRev uses a standard client-server architecture:
The AccuRev Server software runs on one machine, as a multi-threaded operating system process, named accurev_server. The Server manages the AccuRev repository, where all data under AccuRev management is stored.
AccuRev Client software runs on each AccuRev user’s machine. The command-line interface is implemented as a single program, accurev, which executes a single command and then exits. The graphical user interface is implemented as two programs: the user-visible Java application acgui is long-lived; when the user invokes a command through the GUI, acgui runs the background application accurevw, which communicates with the Server and then exits.
User workspaces, where all development work is performed, are typically stored on users’ machines. (But they can be stored on network file servers, or even on the AccuRev Server machine.)
Each Client submits requests to the Server through a TCP/IP network. AccuRev Clients never communicate directly with each other.
As the above description indicates, the AccuRev Server is the heart of the AccuRev system. The sizing and configuration of the AccuRev Server machine significantly impacts the performance perceived by users. We highly recommend that you first read The AccuRev Data Repository in AccuRev Concepts, along with the rest of the help. We also recommend that you attend training courses.
Key Factors Affecting AccuRev Performance
This diagram illustrates the AccuRev “performance stack”. The highlighted components are the ones that are under customer control — each component can influence the user’s experience of AccuRev either positively or negatively. In particular, a problem at any level can severely degrade the user’s experience of AccuRev performance. We strongly recommend that a top-to-bottom assessment of all of these components be performed prior to deploying AccuRev on the enterprise level.
The following sections discuss the aspects of an AccuRev deployment that can be “performance tuned” through knowledgeable choices.
Resource Utilization and the Client-Server Architecture
The AccuRev Server is a multi-threaded application. Each individual AccuRev operation, such as executing a History command, uses only one thread, which runs on one CPU. When multiple client command requests arrive at the AccuRev Server at (approximately) the same time, these commands are executed through normal operating system multitasking. On a multiple-CPU machine, the threads are shared across all available CPUs.
AccuRev is architected to minimize client-server interaction and network bandwidth. Operations such as viewing files, editing files, and performing builds do not require any interaction with AccuRev. Thus, even during periods of intensive development, each user performs actions that require interaction with AccuRev relatively rarely. It is only when a user wishes to add a new file to a depot, rename a file, get the history of a file, get the latest version of a file, or similar operations that interaction with AccuRev will occur. Even then, these are short-running operations that put little load on the AccuRev Server software.
Experience indicates that, on average, a user will actually “hit” the AccuRev Server for less than 5 minutes per day. Typically, Server utilization is not uniform throughout the day, but tends to form peaks and valleys. For example, you might find that multiple users Keep their changes just before the nightly build is started, or that users tend to Update their workspaces at approximately the same time (e.g. when they arrive at work, or just after lunch).
Customer data has consistently shown that “peak load” rarely exceeds 15%. That is, you are unlikely to experience a situation in which more than 15% of the active AccuRev users have overlapping requests being processed by the AccuRev Server. (You can determine the number of active users by examining the Server log. Or you can simply assume that all the users listed by the command accurev show users are active.) The most common command request during peak load periods is Update. This also is the AccuRev command that requires that most processor, disk, and network resources.
AccuRev Server Machine Usage: Software
AccuRev uses a data repository located on the AccuRev server machine. Any software running on the AccuRev Server machine that is not specifically supporting the AccuRev installation runs the risk of contending for the resources that AccuRev needs. For instance, if the machine is also acting as a file server for builds or other purposes, then users may find that AccuRev seems slow, even when there are no other AccuRev users currently making requests.
For optimal performance, the server machine should be completely dedicated to AccuRev usage. NFS, Samba, httpd, print queues, and other similar services should all be disabled. Only AccuRev administrators should use the system, and then only to service the AccuRev machine or software.
Reference trees and/or build workspaces should be located on client (user) machines or on dedicated build machines, not on the AccuRev Server machine. Software builds should not use the AccuRev Server machine’s processor.
AccuRev Server Machine Networking
We strongly recommended that all build machines be located on the same subnet as the AccuRev Server machine, and that this subnet not include any other machines. The build subnet should use gigabit Ethernet. It is important that all of the equipment in the subnet be locked down to gigabit speeds and not be allowed to autonegotiate. Autonegotiation typically causes the subnet to operate, eventually, at the lowest supported speed.
AccuRev’s network bandwidth usage is similar to that of ftp. For instance, a keep command on 100 files needs to send a list of 100 files to the server, in addition to the contents of those files. AccuRev is transaction-based; it often works on groups of files in a single transaction. Thus, the full list of file names and contents is sent to the server in one burst. This minimizes changes in the direction of data transfer, effectively removing the impact of any network latency.
There are three ways to implement secure communication between two AccuRev sites:
Most efficient is a dedicated connection between the two sites. Having a dedicated connection guarantees privacy and security. There is no performance penalty on a dedicated line.
Next most efficient is to tunnel via a secure socket (SSH). The encryption has very little impact on bandwidth. Most SSH software offers compression, which can actually increase the effective bandwidth of the connection.
Least efficient is VPN. Depending on the implementation, VPN overhead can consume up to 20% of the available bandwidth.