ASP.NET - Application Performance Report


Tools:
- Web Application Stress Tool (http://webtool.rte.microsoft.com)

Servers:
- IIS Web Server (IISWEBSVR): W2K Server SP2, 1Ghz Processor, 640MB RAM, .NET Framework Beta 2
- DB Server (DBSVR02): NT4 Server SP6a, 800Mhz Processor, 1GB RAM, SQL Server 7
- Business Object Server (MTSSVR01): W2K Server SP2, 1Ghz Processor, 640MB RAM, .NET Framework Beta 2

Application:
The application is a simple ASPX page that binds a DataGrid control to a dataset, displaying 100 rows per page. Depending on the test case, the application uses either embedded SQL or stored procedures to retrieve the data.

Methodology:
The test was performed over a LAN for a period of 5 minutes for each set of concurrent users (1, 5, 10, 25, 50, 100). Threads were configured to continously request resources, with no delay between requests. This methodology was tested on several performance features of ASP.NET, including Output Caching, Data Caching, State Management, and Web Services. The goal of these tests is to determine which features of ASP.NET offer the best performance given a certain set of circumstances.

Future test cases will involve Remoting and Out-of-Process State Management.

Contact Rory Groves <rory@grovesinternet> with any comments or questions.

 


Server:  IISWEBSVR
File: /erweb/erviewer.aspx
Desc: returns 100 rows from DBSVR02
Config: No performance optimizations (Baseline on future results)
Users Duration Hits RPS TTFB TTLB Load
1 5:00 3381 11.27 65.84 86.32 20.48
5 5:00 7345 24.48 166.57 199.46 32.89
10 5:00 7590 25.3 358.86 390.72 31.86
25 5:00 7232 24.11 997.99 1030.87 32.88
50 5:00 7444 24.81 1971.22 2004.21 32.99
100 5:00 7572 25.24 3901.82 3932.51 30.69
Users Number of concurrent users. Multiple users are simulated by
multiple threads running on the same machine.
Duration Time in minutes the test lasts. There is no delay between request; resources are immediately requested as soon as the previous request completes
Hits Total number of page requests that were made.
RPS Requests per second. RPS = Hits / 300sec (5 minutes)
TTFB Time to first byte
TTLB Time to last byte
Load Page load response time. Load = TTLB - TTFB
Comments:
This first test was performed on a basic ASP.NET page with no caching, state management, or other optimization  features enabled. It will serve as the "Baseline" against which future tests will be measured.

Server:  IISWEBSVR
File: /erweb/erviewer.aspx
Desc: returns 100 rows from DBSVR02
Config: Release Build
Users Duration Hits RPS TTFB TTLB Load
1 5:00 3028 10.09 71.49 96.35 24.86
5 5:00 7206 24.02 166.49 203.14 36.65
10 5:00 7463 24.88 355.74 396.2 40.46
25 5:00 7193 23.98 1004.82 1036.69 31.87
50 5:00 7029 23.42 2087.62 2122.96 35.34
100 5:00 7441 24.8 3970.57 4003.55 32.98
Users Number of concurrent users. Multiple users are simulated by
multiple threads running on the same machine.
Duration Time in minutes the test lasts. There is no delay between request; resources are immediately requested as soon as the previous request completes
Hits Total number of page requests that were made.
RPS Requests per second. RPS = Hits / 300sec (5 minutes)
TTFB Time to first byte
TTLB Time to last byte
Load Page load response time. Load = TTLB - TTFB

Server:  IISWEBSVR
File: /erweb/erviewer_outputcache.aspx
Desc: returns 100 rows from DBSVR02
Config: Output caching enabled; 360 seconds; * params
Users Duration Hits RPS TTFB TTLB Load
1 5:00 2883 9.61 81.87 101.86 19.99
5 5:00 6983 23.27 182.02 210.93 28.91
10 5:00 7364 24.55 370.53 402.87 32.34
25 5:00 7412 24.71 962.76 1004.2 41.44
50 5:00 7115 23.72 2048.95 2094.42 45.47
100 5:00 7092 23.64 4157.18 4195.12 37.94
Users Number of concurrent users. Multiple users are simulated by
multiple threads running on the same machine.
Duration Time in minutes the test lasts. There is no delay between request; resources are immediately requested as soon as the previous request completes
Hits Total number of page requests that were made.
RPS Requests per second. RPS = Hits / 300sec (5 minutes)
TTFB Time to first byte
TTLB Time to last byte
Load Page load response time. Load = TTLB - TTFB

Server:  IISWEBSVR
File: /erweb/erviewer_nosession.aspx
Desc: returns 100 rows from DBSVR02
Config: EnableSessionState = false
Users Duration Hits RPS TTFB TTLB Load
1 5:00 2556 8.52 88.57 114.41 25.84
5 5:00 7019 23.4 174.52 208.88 34.36
10 5:00 7545 25.14 354.42 392.4 37.98
25 5:00 7489 24.96 955 994.63 39.63
50 5:00 7477 24.92 1955.69 1994.37 38.68
100 5:00 7399 24.66 3979.33 4019.63 40.3
Users Number of concurrent users. Multiple users are simulated by
multiple threads running on the same machine.
Duration Time in minutes the test lasts. There is no delay between request; resources are immediately requested as soon as the previous request completes
Hits Total number of page requests that were made.
RPS Requests per second. RPS = Hits / 300sec (5 minutes)
TTFB Time to first byte
TTLB Time to last byte
Load Page load response time. Load = TTLB - TTFB

Server:  IISWEBSVR
File: /erweb/erviewer_appcache.aspx
Desc: returns 100 rows from DBSVR02
Config: Stores data in Application state
Users Duration Hits RPS TTFB TTLB Load
1 5:00 2781 9.27 85.62 105.6 19.98
5 5:00 6993 23.31 180.83 210.48 29.65
10 5:00 7436 24.79 368.74 399.18 30.44
25 5:00 7377 24.59 980 1010.82 30.82
50 5:00 7370 24.57 1982.23 2022.77 40.54
100 5:00 7422 24.74 3981.58 4011.01 29.43
Users Number of concurrent users. Multiple users are simulated by
multiple threads running on the same machine.
Duration Time in minutes the test lasts. There is no delay between request; resources are immediately requested as soon as the previous request completes
Hits Total number of page requests that were made.
RPS Requests per second. RPS = Hits / 300sec (5 minutes)
TTFB Time to first byte
TTLB Time to last byte
Load Page load response time. Load = TTLB - TTFB