After you decide which capacity case fits your needs, your next task is to tune it for best performance. For ISA Server on an enterprise scale, this means designing adequate hardware resources to make the system depend on its CPU power as the source for a possible bottleneck. For a single entry-level ISA Server computer, Internet bandwidth is the source for a possible bottleneck, and not the processor you choose.
ISA Server capacity depends on CPU, memory, network, and disk hardware resources. Each resource has a capacity limit, and as long as all resources are consumed below their limit, the system as a whole functions properly, fulfilling its performance objectives. Performance drops considerably when one of these limits is reached, causing a bottleneck. In this case, the system is said to be bound on that resource. Each bottleneck has its symptoms in overall system performance that can help detect the resource that has inadequate capacity. After a bottleneck is discovered, it can be removed by adding more capacity to the resource that has inadequate capacity.
From a cost perspective, it is most efficient to design a system to be bound on CPU resources. This is because it is the most expensive resource to upgrade. Other resource shortages are less expensive to fix: add another disk, add another network adapter, or increase memory. We recommend that you tune the system’s hardware to maximize CPU utilization. Make sure that a system will have no performance bottlenecks before reaching full CPU utilization. If the CPU power can sustain the expected load, the bottleneck will never occur. To do this, all other resources must have adequate capacity. The following sections describe how to design a CPU-maximized system with adequate capacity in each resource, how to monitor each resource, and how to troubleshoot a bottleneck in each resource.
Determining CPU and System Architecture Capacity
Like most server applications serving numerous client requests, ISA Server performance also benefits from higher CPU speed, larger processor cache, and improved system architecture:
-
CPU speed. As in most applications, ISA Server benefits from faster CPUs. However, increasing CPU speed does not ensure a linear increase in performance. Due to the large and frequent memory access effect, increasing CPU speed may cause more wasted idle memory when waiting for CPU cycles.
-
L2/L3 cache size. Dealing with large amounts of data requires frequent memory access. An L2/L3 cache improves the performance on large memory fetches.
-
System architecture. Because ISA Server transfers large data loads between network devices, memory, and the CPU, the system elements around the CPU also have an effect on ISA Server performance. A faster memory front side bus and faster I/O buses improve overall capacity.
CPU bottlenecks are characterized by situations in which
\Processor\% Processor Time
performance counter numbers are high while the network adapter and disk I/O remain well below capacity. In this case, (which is the ideal CPU-maximized system), reaching 100 percent means that the CPU power must be increased, either by upgrading to a faster CPU, or by adding more processors. For information about CPU scaling options, see Scaling Out ISA Server in this document. If ISA Server continues to have high response times, but low CPU percentages, the bottleneck is elsewhere.
Hyper-threading capabilities can also aid in lowering CPU utilization levels when consuming no more than 60 percent of the CPU. At higher CPU utilization levels, enabled hyper-threading will consume the same processing power as with disabled hyper-threading.
Determining Memory Capacity
ISA Server memory is used for:
-
Storing network sockets (mostly from a nonpaged pool)
-
Internal data structures
-
Pending request objects
In Web Proxy caching scenarios, memory is also used for:
-
Disk cache directory structure
-
Memory caching
Because ISA Server handles numerous simultaneous connections requiring system nonpaged memory, the limiting memory factor is the size of the nonpaged pool, which is implied by the total memory size. For Microsoft Windows Server™ 2003 and Windows® 2000 Server, minimum and maximum values of nonpaged pool size are shown in the following table.
|
Physical memory (MB)
|
128
|
256
|
512
|
1,024
|
2,048
|
4,096
|
|
Minimum nonpaged pool size
|
4
|
8
|
16
|
32
|
64
|
128
|
|
Maximum nonpaged pool size
|
50
|
100
|
200
|
256
|
256
|
256
|
When Web caching is not enabled, 512 MB should be enough for single processor computers, and 1,024 MB is sufficient for dual processor computers. These amounts can also store the full memory working set capacity.
The most critical evidence that memory is not tuned correctly, is when \Memory\Pages/sec (measuring hard page faults per second) is large (above 10) during peak loads. If this happens, the first action depends on whether Web caching is enabled:
If Web caching is disabled, you must determine if more physical memory is needed by monitoring the memory used by all processes in the system. The following performance counters will assist you:
\Memory\Pages/sec
\Memory\Pool Nonpaged Bytes
\Memory\Pool Paged Bytes
\Process(*)\Working Set
If Web caching is enabled, first try to lower memory cache size to 10 percent of physical memory. If hard page faults still occur, proceed with step 1.
Determining Network Capacity
Every network device that exists on a connection has its capacity limit. These include the client and server network adapters, routers, switches, and hubs that interconnect them. Adequate network capacity means that none of these network devices are saturated. Monitoring network activity is essential for assuring that actual loads on all network devices are below their maximum capacity.
There are two general cases where network capacity impacts ISA Server performance:
-
ISA Server is connected to the Internet using a WAN link. In most situations, the Internet connection bandwidth sets the limit for the amount of traffic. It is probable that the cause for weak performance during peak traffic hours is over-utilization of the Internet link.
-
ISA Server is connected only to LANs. In this case, it is important to have an infrastructure to support maximum traffic requirements. However, in most situations, this is not a concern due to the low price of 100-Mbps and 1-Gbps LANs.
To monitor network activity, use the performance counter:
\Network Interface(*)\Bytes Total/sec
If its value is more than 75 percent of the maximum bandwidth of any network interface, consider increasing the bandwidth of the network infrastructure that is not adequate.
Determining Disk Storage Capacity
ISA Server uses disk storage for:
-
Logging firewall activity
-
Web caching
If both are disabled or if there is no traffic, ISA Server will not perform any disk I/O activity. In a typical setup of ISA Server, logging is enabled and configured to use Microsoft SQL Server™ 2000 Desktop Engine (MSDE 2000) logging. For most deployments, a single disk is enough to serve the maximum logging rate. If Web caching is enabled, disk storage capacity must be planned carefully as explained in Web Caching in this document.
The limiting factor of any disk storage system is the number of physical disk accesses per second. This number varies according to how random these accesses are, and how fast the physical disk spins. Usually, the limit is between 100 to 200 accesses per second. The performance counter to use for monitoring the disk access rate is:
\PhysicalDisk(*)\Disk Transfers/sec
If this limit is reached on a disk for a sustained period of time, you can expect the system to slow, which you will notice by an increase in system response time. To remove this bottleneck, the immediate solution is to lower disk accesses by adding more physical disks.
Another cause for a high disk access rate is hard page faults. For troubleshooting this situation, see Web Caching in this document.
ISA Server uses application filters to perform application level security inspection. An application filter is a dynamic-link library (DLL) that registers to a specific protocol port. Whenever a packet is sent to this protocol port, it is passed to the application filter, which inspects it according to application logic and decides what to do according to policy. When no application filter is assigned to a protocol, data undergoes TCP stateful filtering. At this level, ISA Server only checks the TCP/IP header information.
In general, application level filtering requires more processing than TCP stateful filtering for several reasons:
-
Application filters inspect the data’s payload, and TCP stateful filtering looks only at the TCP/IP header information. Application filters can perform other actions with the data’s payload, such as looking at it and blocking it, or changing content according to application logic.
-
Application filters work in user mode space. Transport level filtering works in kernel mode. This means extra processing overhead for passing the data through the full operating system networking stack.
Because application filters are firewall processing extenders, they can have an impact on performance. We recommend:
-
Obtain performance information for the filters you use, and tune them to be as efficient as possible. One example is the HTTP Web filter that can be configured to look at HTTP payload and search for specific signatures. Enabling this feature provides extra processing that will reduce the demands on the ISA Server computer.
-
Where applicable, consider using ISA Server rules instead of a filter. For example, site blocking using access rule destination sets may be more efficient than a Web filter that does the same thing.
-
If you develop a filter, optimize it for best performance. This is recommended for any software, especially for a mission-critical firewall or proxy server.
-
ISA Server allows using application filtering and lower level TCP stateful filtering for the same application port depending on source and destination networks. For example, you can filter Internet traffic at the application level, while using transport filtering protection on traffic passing between all other networks.
ISA Server provides two major methods for logging firewall activity:
-
MSDE logging. This method is the default logging method for firewall and Web activity. ISA Server writes log records directly to an MSDE database to enable online sophisticated queries on logged data.
-
File logging. With this method, ISA Server writes log records to a text file in a sequential manner.
In comparing the two methods, MSDE has more features, but it uses more system resources. Specifically, you can expect an overall 10 to 20 percent improvement in processor utilization when switching to file logging from MSDE.
MSDE logging also consumes more disk storage resources. MSDE logging performs approximately two disk accesses on every megabit. File logging will require the same amount of disk accesses for 10 megabits. One way to improve ISA Server performance is to switch from MSDE to file logging. This is recommended only when there is a performance problem caused by saturated processor or disk access.
ISA Server 2004 Enterprise Edition also provides remote SQL logging, which can be used to log all records to a centrally managed SQL database. Remote SQL logging consumes CPU resources somewhere in between those used by MSDE and file logging, and uses almost no disk I/O. However, remote SQL logging introduces other capacity requirements that must be considered, because all log records are written to a central remote database:
-
Network connections between ISA Server computers and the remote SQL database must use dedicated gigabit bandwidth to accommodate the capacity of the log traffic.
-
Network connections between ISA Server computers and the remote SQL database must utilize Internet Protocol security (IPsec) to secure the log records when sent to the remote SQL database.
-
There must be sufficient redundant array of independent disks (RAID) hardware to support the logging rate of several ISA Server computers.
The following table provides an estimate of the transaction rate and log bandwidth for the three Internet link bandwidths.
|
Internet link bandwidth
|
1 Mbps
|
5 T1 (7.5 Mbps)
|
25 Mbps
|
T3 (45 Mbps)
|
|---|
|
SQL transactions per second
|
25
|
188
|
625
|
1,125
|
|
SQL transaction bandwidth
|
92 kilobits per second (Kbps)
|
700 Kbps
|
2.3 Mbps
|
4.2 Mbps
|
For larger bandwidths, the numbers in the preceding table can be extrapolated linearly.