Technical Notes |
|
This technical note uses several performance characteristics of Verastream Host Integrator (VHI) Session Server to provide a basic understanding of VHI sizing techniques in Windows and Linux/UNIX environments.
This document covers the following topics:
Note: Results in your environment may vary. Attachmate recommends you conduct performance testing with your particular combination of model(s), host(s), host application(s), network, server hardware, and server configuration.
In order to determine the appropriate number of concurrent sessions, it is necessary to consider how the host application will be used, and the expected peak number of concurrent client users. Models designed for transactional use (table procedures) typically execute quickly. However, concurrent session demands are higher when using rejuvenation, suspended sessions, or procedures that will take a long time to execute due to high-latency hosts or networks, or navigation across a large number of entities.
The recommended maximum limit is 250 concurrent host sessions per single-CPU session server. Higher concurrent session requirements can be met with multiple session servers.
Note: Your concurrent session limit is governed by your product licensing. Do not configure more concurrent sessions than authorized by your license.
Memory usage by the Host Integrator server is directly related to model size and the number of concurrent sessions.
The minimum required physical memory is 512 MB (1 GB recommended) for an average model of 50 entities and less than 100 concurrent sessions. An additional 64 MB is suggested (128 MB recommended) for each additional 100 concurrent sessions. With 100 concurrent sessions, each entity uses roughly 0.44 MB.
VHI is highly efficient in memory usage, so large amounts of memory do not increase server performance. VHI does not use more than 4 GB of memory.
With more entities in a model, more memory is consumed per session. Although there can be wide variations in the complexities of entities (operations, patterns, recordsets, and event handlers), these attributes do not have a large impact on the memory consumption per entity. A model with 100 entities uses roughly twice the memory compared to a model with 10 entities.
Example: With 200 concurrent sessions, a 13-entity model uses 85 MB of memory, and a 100-entity model uses 161 MB.
Multi-processor systems can improve Host Integrator performance. VHI uses multiple CPUs (symmetric multi-processing, or SMP) when available.
The largest marginal increase in efficiency is realized on a dual processor system. Further performance gains can be obtained with additional CPUs, but a diminished improvement is realized per additional processor.
| Number of Processors |
Approximate Gain in Performance |
| 2 CPUs vs. 1 CPU |
75% gain |
| 4 CPUs vs. 2 CPUs |
38% gain |
| 8 CPUs vs. 4 CPUs |
14% gain |
Note: More than 4 physical cores (two Dual Core) is not recommended.
The following table illustrates the transaction rate of a 37-entity procedure that both reads and writes to the host. With additional processors, the procedure completes more quickly, thus increasing the transactions per second.
| Number of Concurrent Sessions |
1 |
5 |
10 |
20 |
35 |
55 |
80 |
100 |
| Transactions per second with 1 CPU (process on one core) |
0.53 |
0.76 |
0.80 |
0.85 |
0.84 |
0.85 |
0.83 |
0.80 |
| Transactions per second with 2 CPUs (process across Dual Core) |
0.58 |
1.18 |
1.33 |
1.44 |
1.47 |
1.50 |
1.50 |
1.48 |
| Transactions per second with 4 CPUs (2 Dual Core) |
0.58 |
1.78 |
1.88 |
1.88 |
2.06 |
2.06 |
2.34 |
2.24 |
| Transactions per second with 8 CPUs (2 Dual Core w/Hyper-Threading) |
0.71 |
2.00 |
2.13 |
2.29 |
2.26 |
2.33 |
2.34 |
2.24 |
The measurement can be normalized as entities per second by calculating Transactions / Second x Entities.
Performance gains for additional CPUs is realized when the concurrent session count is approximately five or greater.
Given the falling cost of hardware and the rise of multi-processor systems, four or more processors can still be beneficial, especially when a specific transaction per second requirement is sought.
Note the following:
------------------------------------------------------------------------------------------------------------------------------
If you are interested in the testing details, the following information describes the testing environment, methodologies, and results data.
Tests were performed with the following models:
Each model has 2 procedures (navigating a total of 37 screens) retrieving data from the host and updating data to the host (healthcare host application). Tests were conducted with VHI version 6.5.
This test used the following system configuration:
| No. of Concurrent Sessions |
Model R Memory Usage |
Model L Memory Usage |
Model S Memory Usage |
| 200 |
84,960 KB |
160,492 KB |
84,524 KB |
| 500 |
190,224 KB |
381,940 KB |
190,260 KB |
| 1000 |
365,516 KB |
750,972 KB |
366,340 KB |
| 2000 |
716,340 KB |
1,489,040 KB |
718,556 KB |
| 3000 |
1,067,164 KB |
- |
1,070,680 KB |
| Approx. RAM per 100 sessions |
35 MB |
73 MB |
35 MB |
Total memory usage varies during execution (of procedures, event handlers, etc.) but these increases are minimal compared to the initial memory load.
This test used the following system configuration:
Test client and trace player are installed on separate machines to ensure minimal interference on performance data.
For each set of tests:
The following table shows the amount of time (in ms) for the Y concurrent sessions to complete a total of Y transactions. Test results show the time for 1 session running 1 transaction, 5 sessions for 5 transactions, ...100 sessions running 100 transactions. For example, in test R1, with 2 CPUs it takes 422 ms for 5 concurrent sessions to complete 5 transactions.
For comparison purposes, to estimate the time per 100 transactions, divide the results value by the number of transactions and multiply by 100. For example, in test R1, with 2 CPUs it takes approximately 8.4 seconds (.422/5*100) for 5 concurrent sessions to complete 100 transactions.
| Test R1: Server with security, logging, and debugging disabled |
||||||||
| # of Concurrent Sessions and Transactions |
1 |
5 |
10 |
20 |
35 |
55 |
80 |
100 |
| 8 CPUs |
141 |
250 |
469 |
875 |
1547 |
2360 |
3422 |
4469 |
| 4 CPUs |
172 |
281 |
532 |
1063 |
1703 |
2672 |
4000 |
5106 |
| 2 CPUs |
172 |
422 |
750 |
1391 |
2375 |
3672 |
5344 |
6765 |
| 1 CPU |
187 |
656 |
1250 |
2344 |
4157 |
6453 |
9687 |
12437 |
| Test R5: Server with security enabled |
||||||||
| # of Concurrent Sessions and Transactions |
1 |
5 |
10 |
20 |
35 |
55 |
80 |
100 |
| 8 CPUs |
1016 |
953 |
1125 |
1828 |
2703 |
3797 |
5203 |
6922 |
| 4 CPUs |
828 |
953 |
1281 |
2000 |
3078 |
4501 |
5969 |
7531 |
| 2 CPUs |
843 |
1172 |
1515 |
2360 |
3796 |
5875 |
7766 |
10000 |
| 1 CPU |
1078 |
1531 |
2469 |
4218 |
6531 |
10140 |
13891 |
18000 |
| Test R7: Server logging all messages and recording everything in model debug messages |
||||||||
| # of Concurrent Sessions and Transactions |
1 |
5 |
10 |
20 |
35 |
55 |
80 |
100 |
| 8 CPUs |
234 |
438 |
735 |
1547 |
2657 |
4047 |
5907 |
7219 |
| 4 CPUs |
219 |
391 |
797 |
1671 |
2625 |
4360 |
5953 |
7844 (2) |
| 2 CPUs |
219 |
516 |
1125 |
2031 |
3703 |
5641 |
8422 |
9094 (14) |
| 1 CPU |
250 |
1625 |
2172 |
4188 |
6704 |
10469 |
15265 |
17016 (13) |
| Test L1: Large 100-entity model |
||||||||
| # of Concurrent Sessions and Transactions |
1 |
5 |
10 |
20 |
35 |
55 |
80 |
100 |
| 8 CPUs |
156 |
266 |
438 |
1000 |
1688 |
2641 |
3969 |
4766 |
| 4 CPUs |
187 |
297 |
563 |
1172 |
1922 |
2922 |
4250 |
5282 |
| 2 CPUs |
203 |
390 |
734 |
1563 |
2609 |
4000 |
5906 |
7016 (3) |
| 1 CPU |
187 |
703 |
1328 |
2719 |
4453 |
6766 |
10641 |
12781 |
| Test S1: Model with 223 event handlers |
||||||||
| # of Concurrent Sessions and Transactions |
1 |
5 |
10 |
20 |
35 |
55 |
80 |
100 |
| 8 CPUs |
422 |
765 |
1297 |
2062 |
3125 |
4672 |
6813 |
9469 |
| 4 CPUs |
640 |
1234 |
1391 |
2531 |
4031 |
6203 |
8687 |
11422 |
| 2 CPUs |
515 |
1266 |
1985 |
3922 |
6296 |
9578 |
14140 |
17079 |
| 1 CPU |
594 |
1969 |
4125 |
6250 |
10625 |
16157 |
24235 |
29500 (2) |
| Note: Number of failed transactions is indicated in red next to time recorded. |
||||||||
Four machines are used in this setup:
Machine A: VHI Server on Windows XP Professional, Xeon 2.4 GHz (1 CPU), 1 GB RAM
Machine B: VHI Server on RedHat Enterprise Linux ES 4, Xeon 2.4 GHz (1 CPU), 1 GB RAM
Machine C: Trace Player (functioning as host without latency factors)
Machine D: Test Client
Test client and trace player are installed on separate machines to ensure minimal interference on performance data.
For each set of tests, execute a total of 100 transactions (where each transaction represents navigation of 37 screen entities in the test model). Transactions were split equally between the number of concurrent sessions.
The following tables show the amount of time (in seconds) to complete 100 transactions. Smaller numbers are better.
| # of Concurrent Sessions |
1 |
2 |
5 |
10 |
20 |
50 |
100 |
| Windows (w/HTT) |
163.43 |
144.38 |
124.84 |
115.78 |
117.81 |
114.22 |
117.96 |
| Windows (w/o HTT) |
160.31 |
137.81 |
150.00 |
139.38 |
136.56 |
133.44 |
142.03 |
| Linux (w/HTT) |
224.37 |
145.47 |
120.78 |
108.90 |
106.25 |
111.41 |
104.53 |
| Linux (w/o HTT) |
212.34 |
150.78 |
134.06 |
124.69 |
124.06 |
121.09 |
118.75 |
| # of Concurrent Sessions |
1 |
2 |
5 |
10 |
20 |
50 |
100 |
| Windows (w/HTT) |
373.34 |
201.10 |
151.41 |
144.22 |
148.44 |
149.38 |
164.06 |
| Windows (w/o HTT) |
373.91 |
240.63 |
186.72 |
184.37 |
178.13 |
183.90 |
212.65 |
| Linux (w/HTT) |
308.74 |
193.13 |
154.68 |
138.44 |
133.12 |
143.12 |
148.28 |
| Linux (w/o HTT) |
307.65 |
249.84 |
216.72 |
182.96 |
172.18 |
178.74 |
171.87 |
| # of Concurrent Sessions |
1 |
2 |
5 |
10 |
20 |
50 |
100 |
| Windows (w/HTT) |
351.87 |
268.27 |
239.38 |
238.28 |
242.97 |
248.44 |
255.31 |
| Windows (w/o HTT) |
366.56 |
326.25 |
323.74 |
318.90 |
316.71 |
325.78 |
349.21 (12) |
| Linux (w/HTT)** |
506.24 |
528.59 |
531.40 |
545.00 |
551.87 |
561.87 |
566.55 |
| Linux (w/o HTT)** |
529.21 |
557.65 |
581.08 |
601.08 |
595.62 |
621.70 |
607.95 |
Note: Number of failed transactions is indicated in red next to time recorded.
**With heavy logging on Linux, time values reflect use of journaling filesystem. Improved performance can be realized with a standard filesystem.
| # of Concurrent Sessions |
1 |
2 |
5 |
10 |
20 |
50 |
100 |
| Windows (w/HTT) |
170.16 |
136.10 |
126.71 |
127.65 |
123.59 |
125.47 |
138.43 |
| Windows (w/o HTT) |
174.99 |
149.69 |
150.94 |
150.94 |
149.84 |
149.85 |
163.43 |
| Linux (w/HTT) |
233.75 |
143.75 |
131.41 |
123.90 |
115.94 |
115.16 |
127.03 |
| Linux (w/o HTT) |
203.74 |
155.00 |
145.00 |
134.68 |
136.41 |
137.50 |
155.94 |
| # of Concurrent Sessions |
1 |
2 |
5 |
10 |
20 |
50 |
100 |
| Windows (w/HTT) |
482.34 |
345.78 |
339.21 |
335.47 |
340.00 |
372.03 |
441.40 |
| Windows (w/o HTT) |
512.96 |
435.15 |
425.62 |
400.94 |
385.77 |
416.40 |
491.25 |
| Linux (w/HTT) |
559.52 |
356.40 |
299.69 |
275.93 |
262.69 (1) |
258.75 (1) |
286.39 (4) |
| Linux (w/o HTT) |
493.27 |
391.24 |
360.46 |
309.37 |
265.31 |
274.22 |
313.21 (1) |
Note: Number of failed transactions is indicated in red next to time recorded.
The following tables show the number of transactions per second (transaction rate). This is an inverse of the data above, calculated from 100 (number of transactions) divided by the seconds (to complete the 100 transactions). Larger numbers are better.
| # of Concurrent Sessions |
1 |
2 |
5 |
10 |
20 |
50 |
100 |
| Windows (w/HT) |
0.61 |
0.69 |
0.80 |
0.86 |
0.85 |
0.88 |
0.85 |
| Windows (w/o HT) |
0.62 |
0.73 |
0.67 |
0.72 |
0.73 |
0.75 |
0.70 |
| Linux (w/HT) |
0.45 |
0.69 |
0.83 |
0.92 |
0.94 |
0.90 |
0.96 |
| Linux (w/o HT) |
0.47 |
0.66 |
0.75 |
0.80 |
0.81 |
0.83 |
0.84 |
| # of Concurrent Sessions |
1 |
2 |
5 |
10 |
20 |
50 |
100 |
| Windows (w/HT) |
0.27 |
0.50 |
0.66 |
0.69 |
0.67 |
0.67 |
0.61 |
| Windows (w/o HT) |
0.27 |
0.42 |
0.54 |
0.54 |
0.56 |
0.54 |
0.47 |
| Linux (w/HT) |
0.32 |
0.52 |
0.65 |
0.72 |
0.75 |
0.70 |
0.67 |
| Linux (w/o HT) |
0.33 |
0.40 |
0.45 |
0.55 |
0.58 |
0.56 |
0.58 |
| # of Concurrent Sessions |
1 |
2 |
5 |
10 |
20 |
50 |
100 |
| Windows (w/HT) |
0.28 |
0.37 |
0.42 |
0.42 |
0.41 |
0.40 |
0.39 |
| Windows (w/o HT) |
0.27 |
0.31 |
0.31 |
0.31 |
0.32 |
0.31 |
0.29 |
| Linux (w/HT) |
0.20 |
0.19 |
0.19 |
0.18 |
0.18 |
0.18 |
0.18 |
| Linux (w/o HT) |
0.19 |
0.18 |
0.17 |
0.17 |
0.17 |
0.16 |
0.16 |
| # of Concurrent Sessions |
1 |
2 |
5 |
10 |
20 |
50 |
100 |
| Windows (w/HT) |
0.59 |
0.73 |
0.79 |
0.78 |
0.81 |
0.80 |
0.72 |
| Windows (w/o HT) |
0.57 |
0.67 |
0.66 |
0.66 |
0.67 |
0.67 |
0.61 |
| Linux (w/HT) |
0.43 |
0.70 |
0.76 |
0.81 |
0.86 |
0.87 |
0.79 |
| Linux (w/o HT) |
0.49 |
0.65 |
0.69 |
0.74 |
0.73 |
0.73 |
0.64 |
| # of Concurrent Sessions |
1 |
2 |
5 |
10 |
20 |
50 |
100 |
| Windows (w/HT) |
0.21 |
0.29 |
0.29 |
0.30 |
0.29 |
0.27 |
0.23 |
| Windows (w/o HT) |
0.19 |
0.23 |
0.23 |
0.25 |
0.26 |
0.24 |
0.20 |
| Linux (w/HT) |
0.18 |
0.28 |
0.33 |
0.36 |
0.38 |
0.39 |
0.35 |
| Linux (w/o HT) |
0.20 |
0.26 |
0.28 |
0.32 |
0.38 |
0.36 |
0.32 |