Sie sind auf Seite 1von 101

Microsoft Exchange Load Generator

Microsoft Corporation
Published: June 2010

This document provides information about working with the Exchange Load Generator tool. This
tool helps administrators perform benchmarking, pre-deployment validation, and stress testing
tasks that introduce various types of workloads into a test (non-production) Exchange messaging
system.
Comments? Send feedback to exload@microsoft.com

1
Contents
Microsoft Exchange Load Generator............................................................................................ 1
Microsoft Exchange Load Generator........................................................................................... 5
System Requirements for Exchange Load Generator.................................................................6
When to Use Exchange Load Generator.....................................................................................7
Installing Exchange Load Generator on a Client Computer.........................................................8
Creating and Running the Exchange Load Generator Test.........................................................9
How to Start Exchange Load Generator.................................................................................11
How to Set Up the Exchange Load Generator Test Topology................................................12
How to Configure the Test Properties.....................................................................................14
Customizing the Exchange Load Generator Test...................................................................16
Specifying Threshold Detection during Simulation.................................................................36
How to Enable Remote Control.............................................................................................. 41
How to Enable Stress Mode................................................................................................... 43
How to Enable RPC over HTTP............................................................................................. 43
How to Initialize the Exchange Load Generator Test..............................................................44
How to Run the Exchange Load Generator Test....................................................................46
How to Stop the Simulation Process......................................................................................47
How to Repeat the Test.......................................................................................................... 47
Running Exchange Load Generator as a Command-Line Program..........................................48
Running Exchange Load Generator Tasks................................................................................49
Using System Monitor and Exchange Load Generator Data.....................................................51
How to Consolidate System Monitor Data..............................................................................52
Operational Recommendations for Using Exchange Load Generator.......................................53
Specific Features and Behaviors of Exchange Load Generator................................................57
Public Folders........................................................................................................................ 57
Mail Flow and Recipients....................................................................................................... 57
Task Rate, Concurrency Settings, and Stress Mode..............................................................58
Dynamic Mail Generator........................................................................................................ 59
Performance Counters Reference.............................................................................................62
Scripted Load Modules in the Exchange Load Generator Framework......................................70
Exchange Load Generator Configuration XML.......................................................................71
Base Script Verbs................................................................................................................... 72
The POP3 Module.................................................................................................................. 76
The SMTP Module................................................................................................................. 78
The IMAP4 Module................................................................................................................ 79
The Outlook Web Access Module.......................................................................................... 84
Frequently Asked Questions about Exchange Load Generator.................................................96
Copyright................................................................................................................................. 105

3
Microsoft Exchange Load Generator
Microsoft Exchange Load Generator is a pre-deployment validation, and stress testing tool that
introduces various types of workloads into a test (non-production) Exchange messaging system.
Exchange Load Generator lets you simulate the delivery of multiple MAPI client messaging
requests to an Exchange server. To simulate the delivery of these messaging requests, you run
Exchange Load Generator tests on client computers. These tests send multiple messaging
requests to the Exchange server, which causes a mail load.
After the tests are complete, you can use the results to help do the following:
Verify the overall deployment plan
Identify bottlenecks on the server
Validate Exchange settings and server configurations
Exchange Load Generator tests the effect of client load on a server.
There are general tasks such as logoff, logon, and send mail that are common to most protocols.
Additionally, there are feature tasks that are available only in certain protocols.

Improvements in Exchange Load Generator


Exchange Load Generator replaces the Exchange Server Load Simulator 2003 tool and contains
these important improvements.
Operating System Loadgen will now run on only Windows Vista or Windows Server
2008.

Improved simulation accuracy Accurate mail flow for profiles; Light (5/20), Average
(10/40), Heavy (20/80), Very Heavy (30/120). As well as; 50, 100, 150, 200, 250, 300,
350, 400, 450, 500 (sent/received per day).

Exchange Management Pack No longer required to run.

ActiveSync Module At last we have an ActiveSync module that can be shipped outside
of the Exchange Organization. Enjoy!

Dynamic Mail Content Generator Message files no longer required. Messages created
on the fly.

UI enhancements User group page shows the separate selection of ActionProfile and
MailboxStoreProfile we also enable/disable columns based on module selected.

Mailbox Profile for initialization now based on mailbox size Settings range from
2mb to 2GB.

4
Public Folder Initialization You are now able to enable or disable public folder
initialization. The checkbox to disable PF intialization will only be visible if you have a PF
configured. Loadgen will skip FreeBusy initialization if no public store exists.

Log files in their own directory You will notice that log files are no longer being
created in the Loadgen root. They are now created under %ALLUSERSPROFILE
%/Microsoft/Exchange Load Generator. We have added a shortcut under the Exchange
Load Generator folder that will direct you to this location.

New Junk Mail Rule action Create default additional folders, i.e. Sync Issues,
Conflicts, Local Failures, Server Failures, Junk E-mail, at the time of first logon during
simulation. This is what Outlook does, applies to both outlook 2003 and 2007. LoadGen
simulation code will only do default JunkEmail rule creation with blank blocking sender
list/safer sender list.

Calendar Items have reminders turned off by default We were seeing extra hits on
the server that turned out to be Loadgen trying to dismiss all the reminders that would
pop up.

Additionally, the Exchange Load Generator includes support for native execution on a 64-bit
platform.

System Requirements for Exchange Load


Generator
To use Microsoft Exchange Load Generator, you must meet the minimum and recommended
system requirements outlined in the following table.

Component Minimum Recommended

Processor Any of the following Any of the following processors:


processors: Intel Pentium or compatible 2.2-
Intel Pentium or compatible GHz or faster 32-bit processor
550-MHz or faster 32-bit x64 architecture-based
processor processor running at 2.2 GHz or
X64 architecture-based faster
processor that supports Intel
Extended Memory 64
Technology (Intel EM64T)
X64 architecture-based
computer with AMD 64-bit
processor that supports AMD64
platform

Operating system Microsoft Windows Server Microsoft Windows Server 2008


2008 Windows Vista
Windows Vista

5
Component Minimum Recommended

Memory 512 megabytes (MB) of RAM 2 gigabytes (GB) of RAM

Available hard-disk drive 300 MB 300 MB

Display SVGA (800 x 600) or higher SVGA (800 x 600) or higher


resolution monitor resolution monitor

.NET Framework Microsoft .NET Framework 3.5 Microsoft .NET Framework 3.5
Redistributable Package Redistributable Package

Running against Exchange Exchange Server 2007 (latest Exchange Server 2007 (latest
Server SP), or Exchange 2010 SP), or Exchange 2010

When to Use Exchange Load Generator


Microsoft Exchange Load Generator simulates the server workload that is generated by user
interaction with various message client software. It is a useful tool for server administrators or
messaging deployment engineers who are sizing servers and validating a deployment plan.
Specifically, Exchange Load Generator helps you determine whether each of your servers can
handle the load that they are intended to carry. Another use for Exchange Load Generator is to
help validate the overall solution. Because Exchange Load Generator simulates client requests,
the effect of server-side solutions such as archiving, antivirus, or anti-spam products can also be
validated.

Important
Exchange Load Generator should be used only in test environments that have no
connection to the production environment. This tool should not be used in a production
environment, an environment that is mission critical, or one that contains important
information of any kind anywhere in the network.
Exchange Load Generator uses many simulated user mailboxes to create the server
workload. Because mailboxes must be part of a domain users account, the Exchange
Load Generator tool therefore creates many domain user accounts to support these user
mailboxes. By design, Exchange Load Generator requires that the password associated
with these domain accounts be the same. Because this most likely does not comply with
your organization's security requirements, to lessen any risk this could present, we
recommend that this tool be used only on isolated test networks that do not have
connectivity to your production network.
Because load simulation works by using system resources, Exchange Load Generator is
unsuitable for use on production networks because it could interfere with production
operations by competing for those resources.

Additionally, Exchange Load Generator does not account for all factors that are required to size
servers completely. The following factors are not simulated by Exchange Load Generator and can
affect server capacity planning:

6
Loadgen will not replicate the correct IOPs per user. For IOP testing, we recommend you
use Microsoft Exchange Server Jetstress.

Exchange Load Generator also does not provide a complete picture of user experience, and its
results should not be interpreted in that manner.

Installing Exchange Load Generator on a Client


Computer
To simulate many clients sending messaging requests to an Exchange server, you must install
and configure Exchange Load Generator on one or more client computers. This topic provides
the installation procedures for each client computer. The following are some important
considerations for installation.
You can install Exchange Load Generator on an Exchange Server but the actual simulation
should be run from separate client computers.
If you do not log on as the enterprise administrator (for example if you log on as the local
administrator), Exchange Load Generator cannot create users in Active Directory. Exchange
Load Generator must have sufficient rights to create users, organizational units, distribution
groups, and query-based distribution groups. Exchange Load Generator must be running
under an account that is a member of the Enterprise Administrators group. To view the group
membership of a user, double-click the user account name in the Active Directory Users and
Computers snap-in, and then click Member Of. If you are logged on as a user who has
correct permissions, you can add a user to a security group. To add a user to a security
group, double-click the group in the Active Directory Users and Computers snap-in, click
Members, and then click Add.
We recommend that you join the client computer to the domain where the Exchange servers
are located. Exchange Load Generator does not require that the computer experience be
domain-joined. However, the user experience will be enhanced if you follow this step.
Follow these steps to install Exchange Load Generator on the client computer.

To install Exchange Load Generator on the client computer


1. Log on to the client computer by using domain credentials. As mentioned, we recommend
that you join the client computer to the domain in which the Exchange servers are
located.
2. Download and extract the Exchange Load Generator files and installer (Loadgen.msi).
3. Double-click Loadgen.msi. The Microsoft Exchange Load Generator Setup Wizard
opens and steps you through the installation. The installer file creates a new folder on the
system drive named Exchange Load Generator, and copies the Exchange Load
Generator files to that new directory. You can either accept the default settings in the

7
installation or customize the installation location for your requirements.

Creating and Running the Exchange Load


Generator Test
First, you will need to configure the storage groups and mailbox stores on the Exchange server.
Once this is completed you can create and run the Exchange Load Generator tests. This topic
highlights the steps that are required to create and run an Exchange Load Generator test on a
client computer. Also included is a table that indicates which method is used to do the various
steps.
Each of these steps is described in detail in accompanying topics.
1. How to Start Exchange Load Generator. Start the simulation on the Start menu (Programs),
from the new graphical user interface, or from a command-line program.
2. How to Set Up the Exchange Load Generator Test Topology. To set up the test topology,
specify the number of users you want to simulate for each mailbox store. Also, create the
distribution groups in Active Directory on the Exchange server. You must follow this step on
the first client only.
3. How to Configure the Test Properties. To configure the test properties, specify the length of
time and the range of simulated users who will run on the client computer.
4. Customizing the Exchange Load Generator Test. Optional. To customize the test, customize
the default behaviors of the test tasks, logon processes, and initialization.
5. How to Enable Remote Control. Optional. If you use more than one client for the Exchange
Load Generator test, enable Remote Control through the user interface so that you can
manage all the clients from one computer. You can enable or disable load balancing as well
during the remote control step.
6. How to Initialize the Exchange Load Generator Test. If you use more than one client for the
Exchange Load Generator test and you have enabled Remote Control, you must do this step
from the client that controls the other clients. The initialization process populates the users
with content that is required for running the tests. Only the Outlook client types can be used
to initialize users.
7. How to Run the Exchange Load Generator Test. You must manually start the test on each
client participating in the test or from the Master Loadgen machine.
8. How to Repeat the Test. Optional. You may want to run the same Exchange Load Generator
test to validate the results of your initial test. You may also want to run a test using slightly
different client numbers and characteristics.

Methods used to do Tasks

8
Steps and sub steps Method(s) used

Starting the simulation Start menu, user interface, or command-line


How to Start Exchange Load Generator program

Setting up the topology, which involves User interface


specifying the number of users for each
mailbox store
How to Set Up the Exchange Load Generator
Test Topology

Configuring the test properties, which involves Command-line program to create file. Edit the
generating and editing a configuration file configuration file.
Running Exchange Load Generator as a
Command-Line Program

Customizing the test by task Edit the configuration file parameters


Customizing the Exchange Load Generator
Test

Common task: Customizing logon and logoff Edit the configuration file
behavior of users
Customizing the Exchange Load Generator
Test

Common task: Enabling stress mode Edit the configuration file


Customizing the Exchange Load Generator
Test

Common task: Enabling RPC over HTTP Edit the configuration file
Customizing the Exchange Load Generator
Test

Common task: Customizing the initialization of Edit the configuration file


the test
Customizing the Exchange Load Generator
Test

Enabling remote control Edit the configuration file. User interface.


How to Enable Remote Control

Setting up the test topology User interface


How to Set Up the Exchange Load Generator
Test Topology

Verify that users were created in Active Active Directory Users and Computers
Directory
How to Set Up the Exchange Load Generator

9
Steps and sub steps Method(s) used

Test Topology

Initializing the test Edit the configuration file


How to Initialize the Exchange Load Generator
Test

Monitoring the progress of the initialization Run Performance Monitor (Perfmon)


Performance Counters Reference

Initializing the mailboxes Edit the configuration file


Customizing the Exchange Load Generator
Test

Initializing public folders Edit the configuration file


Customizing the Exchange Load Generator
Test

Running the test Command-line program. User interface.


How to Run the Exchange Load Generator Test

Stopping the simulation test Command-line program. User interface


How to Stop the Simulation Process

Repeating the test Control Panel > Administrative Tools. Active


How to Repeat the Test Directory Users and Computers.

Deleting database and log files Control Panel > Administrative Tools
How to Repeat the Test

Removing users from Active Directory Active Directory Users and Computers
How to Repeat the Test

How to Start Exchange Load Generator


You can start Exchange Load Generator on the Start menu, from the user interface
(LoadGenWin.exe), or from a command-line program (LoadGenCmd.exe).

To start Exchange Load Generator on the Start menu


1. Click Start, and then click All Programs.
2. Open Microsoft Exchange
3. Click Exchange Load Generator.

Note:
This procedure also starts the user interface version of Exchange Load Generator.

10
To start Exchange Load Generator from the user interface
1. Locate the folder in which you installed the Exchange Load Generator files. By default,
this is the Exchange Load Generator directory on the system drive.
2. Double-click LoadGenWin.exe for the graphical user interface version.

To start Exchange Load Generator at a command prompt


1. Click Start, click Run, and then type cmd to open a Command Prompt window.
2. Locate the folder in which you installed the Exchange Load Generator files. By default,
this is the Exchange Load Generator directory on the system drive.
3. At the command line, type LoadGenCmd.exe.
For more information about starting Exchange Load Generator at a command prompt, see
Running Exchange Load Generator as a Command-Line Program.

How to Set Up the Exchange Load Generator Test Topology


This topic explains how to specify the number of users to simulate for each mailbox store that
receives Exchange Load Generator requests. If you use more than one client to run the same
Exchange Load Generator test, you have to perform this step on one client only. You do not have
to create the topology on every client. You must configure the number of users in the mailbox
stores where you want to send requests.
After you specify the topology parameters, you have to create the test topology. This procedure
creates the Exchange Load Generator users, distribution groups (also known as DLs or
distribution lists), and dynamic distribution groups (also known as DDLs or dynamic distribution
lists) in Active Directory.

Important
You must configure the Exchange Server 2007 or the Exchange 2010 topology from
Exchange Management Console before you create the topology. This could involve, for
example, creating the required databases, pointing databases to the correct public
folders, or changing distribution group settings.

Note:
Exchange Load Generator can be run in an Exchange 2007 or Exchange 2010 topology
that contains no public folders.

To set up the topology for an Exchange Load Generator test


1. Log on to the client computer.
2. Start Exchange Load Generator by double-clicking LoadGenWin.exe. For more
information, see How to Start Exchange Load Generator.
3. On the Welcome to the Exchange Load Generator page, click Start a new test.

11
4. On the Start a new test page, create a new configuration or use an existing configuration
file by clicking the selection you want. Click Continue.
5. On the Specify test settings page, define the global test settings as well as the Topology
permissions and user permissions.
You can choose Skip recipient management and continue with user group
configuration if your users have already been created. Continue to step 8.
If your users have not been created yet and you wish to do so through Loadgen click
Continue with recipient management and continue to step 6.
6. On the User settings page, set up according to your test requirements. For example,
select the user count that corresponds to each mailbox store, and then enter the number
of users that you want to simulate.

Note:
The number of users in the storage groups and server is automatically calculated
from the numbers you enter for each mailbox store. Click Continue.
7. On the Advanced recipient settings page, configure the options of Distribution List
Settings, Dynamic Distribution List Settings, Contact Settings, and External
Recipient Settings according to your test requirements. Click Continue. The progress
bar for Recipient creation is in progress is displayed.
8. When the recipient creation task is completed, the Specify test user groups page will
be displayed. From here you can configure one or more groups by Name, Client Type,
Action Profile, Mailbox Profile, PreTestLogon or Container. You can edit any of the
fields, and you can add or delete user groups as required. Click Continue.
9. The Remote configurations page lets you configure one or more remote load
generators. This is an optional task. Click Continue.
10. A Configuration summary Review this summary, and then select an action from the
selection in the lower half of the screen. This includes going back and adjusting or re-
doing any items that you choose.

To verify that users are created in Active Directory


1. On the Exchange server, start the Active Directory Users and Computers snap-in by
clicking Start, click Programs, double-click Administrative Tools, and then click Active
Directory Users and Computers.
2. In the console tree, locate the domain you want, and then expand that domain.
3. Expand LoadGen Objects/Users and verify that a subfolder with the Exchange server
name exists. The distribution groups are displayed in LoadGen Objects/Distribution
Lists, the dynamic distribution groups are displayed in LoadGen Objects/Dynamic
Distribution Lists, and the contacts are displayed in LoadGen Objects/Contacts. The
following figure shows how everything appears in Active Directory.

12
How to Configure the Test Properties
The procedure explains how to configure the test properties by generating a configuration file and
then editing it. Tasks include setting up user credentials and specifying parameters such as the
length of time that the test should run.

To configure the test properties


1. Log on to the client computer by using domain credentials. If you have not joined the
client computer to a domain, log on with a local administrator account. We recommend
that you use a domain account to enhance the user experience.
2. Open a Command Prompt window and locate the Exchange Load Generator installation
directory.
3. Run the command LoadGenCmd.exe /g which will generate a generic configuration file
that is named LoadGenConfig.xml in the current directory. You will need to specify
Configuration Arguments in order for the LoadGenConfig.xml to be created.

13
4. Open the LoadGenConfig.xml file by using Notepad or a similar editor. The section in the
XML Configuration File Internals, describes the meaning and purpose of each
parameter listed in the configuration file.
5. Search for the LdapSearchFilter parameter. This parameter is used to restrict the set of
users who will be included in the test run. By default, it includes all mail-enabled users in
the directory at or below the base domain name that is specified in the LdapBaseDn
parameter, which immediately follows LdapSearchFilter. You will notice that
LdapBaseDn has already been set to the correct value if you are running LoadGenCmd
while logged in with domain credentials. If the LdapBaseDn parameter does not correctly
specify the base location of your test users, you will need to manually adjust this
parameter.
6. Search for the TargetForest parameter. This parameter specifies which forest should be
used to find users and Exchange topology information. The value can be any of the
following: a NetBIOS or fully qualified domain name representing a global catalog server,
domain controller, domain in the forest, or root of the forest. This parameter has already
been set to an acceptable value if you are running LoadGenCmd when logged on with
domain credentials. If the value must be changed for any reason, you can edit it at this
point. An example of the xml script is as follows, with an accompanying discussion of the
parameters.
<TargetForest>E12</TargetForest>
<DirectoryUsername>administrator</DirectoryUsername>
<DirectoryPassword>Manager1</DirectoryPassword>
<DirectoryDomain>E12</DirectoryDomain>
<MasterPassword>Manager1</MasterPassword>
<RunLengthDuration>P0Y0M0DT8H0M0S</RunLengthDuration>
<SimulatedDayLength>P0Y0M0DT8H0M0S</SimulatedDayLength>
The DirectoryUsername, DirectoryPassword, and DirectoryDomain parameters
specify the credentials that will be used to access Active Directory during the test.
You will minimally need to adjust the DirectoryPassword parameter.
The MasterPassword and MasterDomain parameters specify the domain and
password that can be used to authenticate with each test account. You will minimally
need to set the MasterPassword parameter equal to the password that you specified
when you created the test accounts.
The RunLengthDuration parameter specifies how long a test will run before
stopping. By default, this is equal to 1 hour. The parameter is specified by using the
ISO 8601 extended format of PaYbMcDTdHeMfS where a equals the number of
years, b equals the number of months, c equals the number of days, d equals the
number of hours, e equals the number of minutes, and f equals the number of
seconds. A value of P0Y0M0DT1H0M0S means 1 hour, as does PT1H. To change
this to an 8-hour test, you could use P8HS as the value. If you want the test to run
with an infinite duration, specify a duration of 0, for example PT0S.
To define RunLengthDuration at each user group, specify this global

14
RunLengthDuration as 0.
7. Save your configuration file.

Customizing the Exchange Load Generator Test


Microsoft Exchange Load Generator simulates some calls that Microsoft Office Outlook makes to
the server that is running Exchange Server. The most common user tasks are combined into one
Exchange Load Generator task named Read and Process Message. With the Read and Process
Message task, the simulated user reads all the e-mail in the Inbox and replies to, replies to all,
forwards, moves, deletes, or loads attachment to a certain percentage of the e-mail messages.
This topic lists the parameters, by task alphabetically, that can be changed in the configuration
file. These tasks include the common tasks for MAPI and Outlook-specific tasks.

Tables of Simulation Tasks and Their Parameters


Generally, to customize the test, you have to make changes in the XML configuration script file.
The following table of tasks, positioned alphabetically by task name, describes the meaning and
purpose of each parameter listed in the configuration file.

Browse Calendar
BrowseCalendar opens the Calendar folder and performs modify or delete actions on content
within the folder. If BrowseCalendarActionCount is 0, no action will be performed on calendar
items.

Parameter Comment

MinimumActionMessages The minimum number of calendar items to


perform an action on.

MaximumActionMessages The maximum number of calendar items to


perform an action on.

ChangePercentage The percentage of calendar items to be


changed.

DeletePercentage The percentage of calendar items to be deleted.

Browse Contacts
BrowseContacts opens the Contacts folder and performs modify actions on content within the
folder.
There are no parameters for this task.

Browse Public Folder


BrowsePublicFolder browses Public Folder content. This action can include opening 1 or more
(1-n) public folders, reading new content, reading 0 or more (0-n) previously read messages,

15
creating or deleting sub folders, and performing the same processing actions that the
ReadAndProcessMessages task performs on mailbox content.

Parameter Comment

FolderOpenCount The number of folders that will be opened.

OldPostReadCount The number of old posts to read, in addition to


any new posts, in each folder opened.

CreateSubFolderPercentage The percentage of task invocations in which a


new sub folder will be created.

DeleteSubFolderPercentage The percentage of task invocations in which a


sub folder will be deleted.

MinimumFolderDepth The minimum folder depth for the public folder


hierarchy that must be used when you create
sub folders.

MaximumFolderDepth The maximum folder depth for the public folder


hierarchy that must be used when you create
sub folders.

AverageFolderDepth The average folder depth for the public folder


hierarchy that must be used when you create
sub folders.

ResolveConflictsPercentage The percentage of conflicts that must be


resolved if there are any.

ApplyViewPercentage The percentage of folder opens in which a


random view will be applied.

ReplyPercentage The percentage of processed messages that


will result in a reply to action.

ReplyToFolderPercentage The percentage of processed messages that


will result in a post reply to folder action.

ForwardPercentage The percentage of processed messages that


will result in a forward action.

DeletePercentage The percentage of processed messages that


will result in a delete action.

MovePercentage The percentage of processed messages that


will result in a move action.

CopyPercentage The percentage of processed messages that


will result in a copy action.

ChangePostPercentage The percentage of processed messages that

16
Parameter Comment

will result in a content change action.

MaximumMessages The maximum number of messages that can


remain in any processed folders.

Browse Tasks
BrowseTasks opens the Tasks folder and performs modify or delete actions on content within the
folder. The status of the task must be complete before a deletion is performed.
There are no parameters for this task.

Create Contact
CreateContact adds a contact to the Contacts folder in the user's mailbox.
There are no parameters for this task.

Create Folder
CreateFolder creates a folder in the mailbox folder hierarchy. The CreateFolder task can be
tuned to create at the top level of the hierarchy at a given percentage, and also takes minimum,
maximum, and average parameters for the desired hierarchy depth.

Parameter Comment

CreateAtTopLevelPercentage The percentage of folders to be created at the


top level.

MaxDepth The maximum depth of the folder to be created


if it is not at the top level.

AvgDepth The average depth of the folder to be created if


it is not at the top level.

MinDepth The minimum depth of the folder to be created if


it is not at the top level.

Create Tasks
CreateTask adds a task to the Tasks folder in the user's mailbox.
No parameters for this task.

Delete Mail
DeleteMail deletes mail from a selected folder, which is controlled by
DeleteFromDeletedItemsPercentage. If you are not deleting from the DeletedItems folder,
Exchange Load Generator randomly selects one from any other folder. The source folder can be
weighted to select the Deleted Items folder.

17
Parameter Comment

MinimumMessagesToDelete The minimum number of e-mail messages to be


deleted.

MaximumMessagesToDelete The maximum number of e-mail messages to


be deleted.

AverageMessagesToDelete The average number of e-mail messages to be


deleted.

DeleteFromDeletedItemsPercentage The percentage of e-mail messages deleted


from the Deleted Items folder.

Download Offline Address Book


DownloadOAB downloads the offline address book. This operation should simulate downloading
the content based on the usual operation of the simulated client type and should ignore the
received data (that is, do not store it locally).

Parameter Comment

FullDownload Specify whether to always download the Offline


Address Book instead of to make incremental
changes since the last download.

FullDetails Collect full details instead of partial details.

Edit Rules
EditRules modifies the rules in a user's mailbox. This can include create, change, and delete
operations.

Parameter Comment

MinimumRules The minimum number of rules that should exist


in a mailbox.

MaximumRules The maximum number of rules that should exist


in a mailbox.

DeletePercentage The percentage of task invocations in which a


rule will be deleted.

CreatePercentage The percentage of task invocations in which a


rule will be created.

ChangePercentage The percentage of task invocations in which a


rule will be changed.

ConditionFromDistributionListPercentage The percentage of rules that will be triggered by

18
Parameter Comment

a From-Distribution-List condition.

ConditionFromPersonPercentage The percentage of rules that will be triggered by


a From-Person condition.

ConditionSentOnlytoMePercentage The percentage of rules that will be triggered by


a Sent-Only-To-Me condition.

ConditionWithWordInSubjectBodyPercentage The percentage of rules that will be triggered by


a With-Word-In-Subject-Or-Body condition.

ConditionNameInToCcBoxPercentage The percentage of rules that will be triggered by


a Name-In-To-or-Cc-Box condition.

ConditionWithAttachmentPercentage The percentage of rules that will be triggered by


a With-Attachment condition.

ConditionNameNotInToBoxPercentage The percentage of rules that will be triggered by


a Name-Not-In-To-Box condition.

ConditionWithWordInSubjectPercentage The percentage of rules that will be triggered by


a With-Word-In-Subject condition.

ActionDeletePercentage The percentage of rules that result in a delete


action.

ActionMoveToFolderPercentage The percentage of rules that result in a move to


folder action.

ActionCopyToFolderPercentage The percentage of rules that result in a copy to


a folder action.

ActionForwardtoPersonPercentage The percentage of rules that result in a forward


to person action.

ActionForwardtoDistributionListPercentage The percentage of rules that result in a forward


to distribution list action.

ActionPermanentlyDeletePercentage The percentage of rules that result in a


permanently delete action.

ActionStopProcessingMoreRulesPercentage The percentage of rules that result in a stop


processing more rules action.

Edit Smart Folders


EditSmartFolders modifies the smart folders in a user's mailbox. This can include create,
change, and delete operations.

19
Parameter Comment

MinimumSmartFolders The minimum number of


smart folders that should
exist in each mailbox.

MaximumSmartFolders The maximum number of


smart folders that should
exist in each mailbox.

DeletePercentage The percentage of task


invocations that should
result in a delete action.

CreatePercentage The percentage of task


invocations that should
result in a create action.

BrowsePercentage The percentage of task


invocations that should
result in a browse action.
Be aware that the
parameters specified for
the browse folder task will
be used if a browser
action is selected.

CriteriaUnreadPercentage The percentage of smart


folders that should use
Unread criteria.

CriteriaImportantPercentage The percentage of smart


folders that should use
Important criteria.

CriteriaOldPercentage The percentage of smart


folders that should use
Old criteria.

CriteriaForFollowUpPercentage The percentage of smart


folders that should use
For-Follow-Up criteria.

CriteriaConversationWithRandomPersonOrDistributionListPercentage The percentage of smart


folders that should use
Conversation-With-
Person-Or-Distribution-
List criteria.

CriteriaUnreadOrForFollowUpPercentage The percentage of smart

20
Parameter Comment

folders that should use


Unread-or-For-Follow-Up
criteria.

CriteriaReceivedThisWeekPercentage The percentage of smart


folders that should use
Received-This-Week
criteria.

CriteriaFromRandomPersonOrDistributionListPercentage The percentage of smart


folders that should use
From-Person-or-
Distribution-List criteria.

CriteriaSentToRandomDistributionListPercentage The percentage of smart


folders that should use
Sent-to-Distribution-List
criteria.

CriteriaWithSpecificWordsPercentage The percentage of smart


folders that should use
With-Specific-Words
criteria.

CriteriaLargePercentage The percentage of smart


folders that should use
the Large criteria.

Export Mail
ExportMail simulates the effect of exporting the content of a folder from the mailbox. The
ExportMail task can be configured to include subfolders of the selected folder, or the whole
mailbox.

Note:
This action should not actually result in content being stored locally on the client as that
will not scale. The task should only simulate the effect of the server of performing this
action.

Parameter Comment

ExportEntireMailboxPercentage The percentage of the whole tree exported.


Otherwise randomly select a top level folder
and export.

IncludeSubFolder Specify whether to include subfolders in export.

21
Logoff
Logoff disconnects from the server in such a way that client and server side resources
associated with the user connection are released.

Parameter Comment

EmptyDeletedItems Specify whether the Deleted Items Folder will


be emptied on logoff.

Logon
Logon establishes a user connection to the server. Depending on the type of client being
simulated, this can involve more than one connection being established, and can involve any
processing that is typically run as part of starting the client or performing a user initiated action
within the client to establish a connection to the server. For example: authentication, fetching any
information that is required to build the user interface, and so on.

Note:
By default, all the mailbox connections are encrypted. There is currently no parameter
available to disable MAPI encryption.

Parameter Comment

AutoDiscoveryPercentage The percentage of autodiscovery performed


during logon. This parameter applies only when
the user's mailbox server is running Microsoft
Exchange Server 2007.

Make Appointment
MakeAppointment adds an appointment to the calendar folder in the user's mailbox.

Parameter Comment

MinimumAppointmentHours The minimum length of appointment in hours.

MaximumAppointmentHours The maximum length of appointment in hours.

AverageAppointmentHours The average length of appointment in hours.

RecurringPercentage The percentage of meetings that will have a


random recurrence pattern.

AllDayPercentage The percentage of meetings that will be marked


as all day.

OOFAppointmentPercentage The percentage of appointments that will be


marked as OOF. If the user's mailbox server is
running Exchange 2007, and it runs Office

22
Parameter Comment

Outlook 2007 simulation, whenever an OOF


appointment is created, Web service will be
called to set the user's OOF settings.

Move Mail
MoveMail moves messages from a selected folder to another selected folder in the mailbox. The
source folder selection can be weighted to select the Inbox, and the destination folder can be
weighted to select the Deleted Items folder.

Parameter Comment

MinimumMessagesToMove The minimum number of e-mail messages to be


moved.

MaximumMessagesToMove The maximum number of e-mail messages to


be moved.

AverageMessagesToMove The average number of e-mail messages to be


moved.

MoveToDeletedItemsPercentage The percentage of e-mail messages moved to


Deleted Items

MoveFromInboxPercentage Percentage of e-mail messages moved from


the Inbox folder.

Post Free Busy


PostFreeBusy simulates the action of publishing free/busy data for clients that perform this
behavior.

Note:
This task will not be run if the user's mailbox is running Exchange 2007.

Parameter Comments

UpdateFreeBusyInformation Specify whether to update public Free Busy


information.

MonthCount Specify how many calendar months of Free


Busy information to publish.

Public Folder Post


PublicFolderPost post a single item to a Public Folder.

23
Parameter Comments

MessageFiles Specify that custom message files be used for


this task.

Read and Process Messages


ReadAndProcessMessages simulates the action of a user processing mail in the mailbox.
Processing mail typically consists of reading and responding to unread items. This task will select
a folder to process with a given weight for the Inbox folder. The task will optionally apply a view to
the folder that has been selected. All unread content (or a maximum number of unread
messages) will be read. Some of this content may be left open if a particular client and protocol
support that. For each read message, various actions will be applied based on configured
percentages such as reply, reply all, forward, move, delete, permanent delete, and copy.
Additionally, Incoming meeting requests will be processed by this task.

Parameter Comment

ReplyPercentage The percentage of messages processed that


will result in a Reply action.

ReplyAllPercentage The percentage of messages processed that


will result in a Reply All action.

Forward Percentage The percentage of messages processed that


will result in a Forward action.

MovePercentage The percentage of messages processed that


will result in a Move action.

DeletePercentage The percentage of messages processed that


will result in a Delete action.

PermanentDeletePercentage The percentage of messages processed that


will result in a Permanent Delete action.

CopyPercentage The percentage of messages processed that


will result in a Copy action.

ApplyViewPercentage The percentage of task invocations in which a


random view on the folder will be attached.

LoadAttachementsPercentage The percentage of messages opened that


contain attachments in which the attachments
will be opened.

PreviewItems Specify whether to preview items in the folder


without opening them.

RespondToMeetingsPercentage The percentage of responses to a meeting


request.

24
Parameter Comment

AcceptMeetingPercentage The percentage of meeting requests that will


result in an acceptance.

MaximumOpenMessages The maximum number of messages that can be


kept open.

KeepMessagesOpenPercentage The percentage of messages that can be kept


open.

MaximumFolderMessages The maximum number of messages that can


remain in the folder when the task has
completed. Note that Exchange Load Generator
operates only on a number that is great than
zero.

ProcessInboxPercentage The percentage of processing an Inbox.

MaximumMessagesToProcess The maximum number of unread messages


that will be processed during the task.

Request Meeting
RequestMeeting sends a meeting request message to a set of recipients.

Parameter Comment

MinimumMeetingHours The minimum meeting length in hours.

MaximumMeetingHours The maximum meeting length in hours.

AverageMeetingHours Average meeting length in hours.

MinimumMeetingAttendees The minimum number of attendees to invite to


meetings.

MaximumMeetingAttendees The maximum number of attendees to invite to


meetings.

AverageMeetingAttendees The average number of attendees to invite to


meetings.

AddDistributionListPercentage The percentage of task invocations in which a


distribution list will be added to the attendee list
of the meeting request.

AddDynamicDistributionListPercentage The percentage of task invocations in which a


dynamic distribution list will be added to the
attendee list of the meeting request.

AddExternalRecipientPercentage The percentage of task invocations in which an

25
Parameter Comment

external recipient will be added to the attendee


list of the meeting request.

ExternalContactPercentage The percentage of contacts picked as external


recipients.

AvailabilityCheckPercentage The percentage of attendee availability checks.


This parameter applies only when the user's
mailbox server is running Exchange 2007.

Search
Search performs a content search on a folder or throughout the whole mailbox. This results in the
default search behavior for the client platform. For example, on a cached mode Outlook client,
this would be a no-op. For an online mode Outlook client, this would call into the content index
(CI) on an Exchange 2007 server.
This task is not implemented in Office Outlook simulation modules.

Synchronize Folders
SynchronizeFolders simulates the effect of the server during a synchronize folders operation.
This should simulate the actual effect on the server that would be caused by synchronizing a local
version of mailbox data with the data that is stored on the server that uses whatever method is
appropriate for the given client type and protocol.
This task is not implemented in Office Outlook simulation modules.

Topology Monitor Group


TopologyMonitorGroup is where you define a set of rules for Exchange Load Generator to use.
This is done to monitor the health of the target environment.

Parameter Comment

Duration Specify the time period that threshold detection


will be run. Default is the test run time.

Event Specify the details in the <Event> tag. The


values are not case-sensitive.

TargetMachine Specify the computer name that the threshold


data is collected from.

Actions Specify what actions are turned on or off. By


default, all the actions are off. Specify "true" to
the corresponding attribute to enable the action.

PollFrequency Specify the rate of threshold data collection.

DelayStartTime Specify the time period before threshold

26
Parameter Comment

detection starts.

NumberOfSamples Specify the number of samples that will be used


to calculate the statistics. Default is 10.

PerfHealthEntities Specify the details of the performance counter


threshold detection under the
<PerfHealthEntities> tag followed by the
<PerfHealthEntity> tag. Multiple threshold
entities can be added as the <PerfHealthEntity>
tag under <PerfHealthEntities>.

ThresholdRules Specify threshold values: aggregation


Maximum, Average, and Standard deviation.
Each threshold rule has attributes Aggregate,
Lower, Upper, and Enabled to specify what
types of aggregation, the minimum values, the
maximum values, and the on and off value
respectively.

ServiceHealthEntity Specify the service display name or the short


name. The names are not case-sensitive. For
example, both MSExchangeIS and Microsoft
Exchange Information Store are valid.

MailboxStoreProfile and PublicStoreProfile and Their Parameters


The MailboxStoreProfile and the PublicStoreProfile define the mailbox initialization and public
store initialization respectively. The procedures for working with them are in the topic How to
Customize the Initialization of a Test.

MailboxStoreProfile

Parameter Comment

InboxUnreadPercentage The percentage of messages that will be marked as unread


in the Inbox folder.

NewFolderUnreadPercentage The percentage of messages that will be marked as unread


in the new folders.

BuildInboxRules Specify whether to create rules. If set to false, Exchange


Load Generator does nothing. Additionally, if there are
existing rules in the mailbox, they are kept there. If this
option is set to true, the FixUpInboxRules option is ignored.

FixUpInboxRules Specify whether to fix up Inbox rules. If set to true, Exchange

27
Parameter Comment

Load Generator follows the existing rules and tries to fix the
condition and actions by setting the valid recipients and
folders. This option takes effect only if BuildInboxRules is set
to false. Generally this option is used when the mailboxes
are restored by using production data.

InboxMessageCount The number of e-mail messages that will be created in the


Inbox folder.

DeletedMessageCount The number of e-mail messages that will be created in the


Deleted Items folder.

NewFolderCount The number of new folders that will be created in a mailbox.

NewFolderMessageCount The number of e-mail messages that will be created by the


Exchange Load Generator.

SmartFolderCount The number of smart folders that will be created.

InboxRuleCount The number of rules that will be created in each mailbox.

AppointmentCount The number of appointments that will be created in each


calendar.

ContactCount The number of contacts that will be generated in the


Contacts folder.

UseOrdinalFolderName Specify whether to use the ordinal number for folder name. If
set to true, the folder name will resemble Folder1, Folder2,
and so on. Otherwise, the GUID will be used for folder
names.

InitializeFreeBusy Specify whether to generate a free/busy status message on


an appropriate public folder store for each mailbox

InitializeIndices Specify whether to pre-create the standard indexes, for


example, for Contacts.

InitializeCachedModeIndices Specify whether to pre-create the cached mode indexes.

MessagePercentageRecent The percentage of messages that have a delivery date that


is within the time frame defined by the
<MessageRecentContentTimeFrame> tag.

MessageRecentContentTimeFram The period of time frame percentage that messages within a


e delivery time, within this period, are classified as recent.

MessageContentTimeFrame The period of time frame percentage that the delivery times
of all messages are within this time frame.

AppointmentPercentageRecent The percentage of calendar items that are scheduled within

28
Parameter Comment

the time frame that is defined by the


<AppointmentRecentContentTimeFrame> tag.

AppointmentRecentContentTimeFr A time frame from the last day of the current month
ame backward. All calendar items scheduled within this period
are classified as recent. The default value is two months.

AppointmentContentTimeFrame The period of time from the last day of the current month that
all calendar items are scheduled within this time frame. The
default value is two months.

TaskCount The number of tasks in the users' mailboxes. The task


completion percentage is defined by
<BrowseTasksActionParameters> under <ActionProfile>. An
example is as follows:
<ExtendedProperties>
<Item
Name="PercentageComplete"Type="Double">Administrator
</Item>
</ExtendedProperties>

PublicStoreProfile

Parameter Comment

TopLevelFolderCount The number of folders at the top level of the


hierarchy.

NonTopLevelFolderCount The number of folders that are not at the top


level of the hierarchy.

MinimumFolderDepth The minimum depth of folder hierarchy in the


public folders.

AverageFolderDepth The average depth of folder hierarchy in the


public folders.

MaximumFolderDepth The maximum depth of folder hierarchy in the


public folders.

MinimumMessageCount The minimum number of e-mail messages in


the public folders.

AverageMessageCount The average number of e-mail messages in the


public folders.

MaximumMessageCount The maximum number of e-mail messages in

29
Parameter Comment

the public folders.

UseOrdinalFolderName Specify whether to use the ordinal number for


folder name. If set to true, the folder name will
resemble Folder1, Folder2, and so on.
Otherwise the GUID will be used for folder
names.

How to Customize the Logon/Logoff Behavior


This optional procedure explains how to customize the logon/logoff behavior of Exchange Load
Generator users.

To customize the logon/logoff behavior of Exchange Load Generator users


1. Open the LoadGenConfig.xml file by using Notepad or a similar editor.
2. To log on immediately at the start of the test, provide the <PreTestLogon> tag with a
value. For example: <PreTestLogon>true</PreTestLogon>.
3. To empty the Deleted Items folder when you log off, use the applicable LogOff
parameter.

How to Customize Simulation Duration for Individual User Groups


These optional procedures explain how to define the wait duration and the simulation duration for
an individual user group.

To define the wait duration for a user group


1. Open the LoadGenConfig.xml file by using Notepad or a similar editor.
2. Navigate to the user group of your choice.
3. Set the <StartWaitDuration> tag to the duration of your choice. The user group will not
run simulation until the defined duration has passed after the engine has started.

To define the simulation duration for a user group


1. Open the LoadGenConfig.xml file by using Notepad or a similar editor.
2. Navigate to the user group of your choice.
3. Set the <RunLengthDuration> tag to the duration of your choice. The user group will run
simulation for the defined duration.

Note:
We recommend that you set global <RunLengthDuration/> to 0 if you are going to
customize durations for individual user groups. If global <RunLengthDuration/> is

30
defined, individual user groups cannot have a longer duration than the global
duration. Otherwise, the duration for the individual user group will be overwritten by
the global duration.

How to Customize the Initialization of a Test


This optional procedure outlines how to customize the initialization of a test that involves both the
user mailbox and public store initialization.
For more information about the parameters for these tags, see Customizing the Exchange Load
Generator Test.

To customize the initialization of the test


1. Open the LoadGenConfig.xml file by using Notepad or a similar editor.
2. For user mailbox initialization, customize the <MailboxStoreProfile> section in the
configuration file, as follows:
<MailboxStoreProfile>
<InboxUnreadPercentage>1</InboxUnreadPercentage>
<NewFolderUnreadPercentage>1</NewFolderUnreadPercentage>
<BuildInboxRules>true</BuildInboxRules>
<FixUpInboxRules>false</FixUpInboxRules>
<InboxMessageCount>3000</InboxMessageCount>
<DeletedMessageCount>150</DeletedMessageCount>
<NewFolderCount>5</NewFolderCount>
<NewFolderMessageCount>400</NewFolderMessageCount>
<SmartFolderCount>3</SmartFolderCount>
<InboxRuleCount>17</InboxRuleCount>
<AppointmentCount>25</AppointmentCount>
<ContactCount>30</ContactCount>
<UseOrdinalFolderName>false</UseOrdinalFolderName>
<InitializeFreeBusy>true</InitializeFreeBusy>
<InitializeIndices>true</InitializeIndices>
<InitializeIndices>true</InitializeIndices>
<Name>Heavy</Name>
<MessagePercentageRecent>0</MessagePercentageRecent>

<MessageRecentContentTimeFrame>P0Y0M0DT0H0M0S</MessageRecentContentTim
eFrame>
<MessageContentTimeFrame>P0Y2M0DT0H0M0S</MessageContentTimeFrame>

31
<AppointmentPercentageRecent>0</AppointmentPercentageRecent>

<AppointmentRecentPercentageRecent>P0Y0M0DT0H5M0S</AppointmentRecentPerce
ntageRecent>

<AppointmentContentTimeFrame>P0Y2M0DT0H0M0S</AppointmentContentTimeFrame
>
<TaskCount>0</TaskCount>
</MailboxStoreProfile>
3. For public store initialization, customize the <PublicStoreProfile> section in the
configuration file as follows:
<PublicStoreProfile>
<MessageFiles />
<TopLevelFolderCount>1</TopLevelFolderCount>
<NonTopLevelFolderCount>1</NonTopLevelFolderCount>
<MinimumFolderDepth>1</MinimumFolderDepth>
<AverageFolderDepth>2</AverageFolderDepth>
<MaximumFolderDepth>3</MaximumFolderDepth>
<MinimumMessageCount>5</MinimumMessageCount>
<AverageMessageCount>10</AverageMessageCount>
<MaximumMessageCount>15</MaximumMessageCount>
<UseOrdinalFolderName>false</UseOrdinalFolderName>
</PublicStoreProfile>

How to Customize the Concurrency Profile


This optional procedure outlines how to customize the concurrency profile to define the
participation percentage during different periods throughout the day.

To customize the concurrency profile


1. Open the LoadGenConfig.xml file by using Notepad or a similar editor.
2. Customize the concurrency profile by adding, removing, or modifying the
<ConcurrencyListEntry> tag in the configuration file. For example, the following
concurrency profile defines two <ConcurrencyListEntry> tags with different concurrency
percentages for different durations in the day.
<ConcurrencyProfile Name="Heavy">
<ConcurrencyTimeline>
<ConcurrencyListEntry>
<Duration>P0Y0M0DT2H0M0S</Duration>

32
<ConcurrencyPercent>100</ConcurrencyPercent>
<Label>The first two hour has 100% of user participation</Label>
</ConcurrencyListEntry>
<ConcurrencyListEntry>
<Duration>P0Y0M0DT6H0M0S</Duration>
<ConcurrencyPercent>80</ConcurrencyPercent>
<Label>The rest of the day only has 80% of user running the load</Label>
</ConcurrencyListEntry>
</ConcurrencyTimeline>
</ConcurrencyProfile>

How to Validate Memory Usage


This procedure is used to do the following:
Prevent excessive memory usage which can cause out-of-memory errors.
Provide a guideline for the number of users that can be used to simulate particular e-mail
types.
Default values of memory consumption per user are provided as guidelines for scaling memory
for client computers. By default, memory validation is enabled. To turn off memory validation,
locate the <GlobalSettings> tag in the .xml configuration file, and add the following tag:
<InternalMemoryCheck Enabled="false">.
InternalMemoryCheck is a means of preventing excessive memory usage, which in turn can
cause out-of-memory events. It also provides a guideline about the number of users to specify to
simulate particular e-mail client types.

Note:
There is no protocol memory validation for any client protocol other than Microsoft Office
Outlook.
The parameters of InternalMemoryCheck are described in the following table.

Parameter Comment

MemRPCoHTTPCachedModeUser Specify the memory consumption per user in


megabytes (MBs) when the client type is
Outlook Cached Mode and the connection is
RPC over HTTP.

MemRPCoHTTPOnlineModeUser Specify the memory consumption per user in


MBs when the client type is Outlook Online
Mode and the connection is RPC over HTTP.

MemPerCachedModeUser Specify the memory consumption per user in

33
Parameter Comment

MBs when the client type is Outlook Cached


Mode.

MemPerOnlineModeUser Specify the memory consumption per user in


MBs when the client type is Outlook Online
Mode.

PrivateRegionsToReserve Specify the private memory to reserve to


reduce the possibility of an out-of-memory error,
in blocks of 64 MB.

MemFailTest Specify the size in megabytes of a contiguous


block for the memory allocation test.

To change the default parameters for specific requirements


1. Open the LoadGenConfig.xml file by using Notepad or a similar editor.
2. To fine-tune the parameters of memory validation for your specific requirements, change
the default values in the <InternalMemoryCheck> section in the configuration file, as
follows:
<InternalMemoryCheck>
<MemRPCoHTTPCachedModeUser>1.48</MemRPCoHTTPCachedModeUser>
<MemRPCoHTTPOnlineModeUser>0.38</MemRPCoHTTPOnlineModeUser>
<MemPerCachedModeUser>0.4</MemPerCachedModeUser>
<MemPerOnlineModeUser>0.1</MemPerOnlineModeUser>
<PrivateRegionsToReserve>8</PrivateRegionsToReserve>
<MemFailTest>30</MemFailTest>
</InternalMemoryCheck>

Specifying Threshold Detection during Simulation


Exchange Load Generator enables you to detect thresholds during simulations. You can specify
three types of thresholds as follows:
Performance counter values
Existence of Windows Server services
Occurrences of events in the event logs
Predefined actions can be specified when one or more of the thresholds are detected. These
actions include stopping the simulation, stopping the detection of thresholds but not the
simulation, failing the test based on the detection of threshold values, or doing nothing.
Topics for the various procedures about threshold values are as follows:

34
How to Configure Thresholds for Performance Counter Values
How to Configure Thresholds for Service Status Detection
How to Configure Thresholds for Events Detection
How to Specify Custom Authentication
How to Enable Threshold Detection Logging

How to Configure Thresholds for Performance Counter Values


This procedure shows what tags you need to change in the configuration file in order to configure
the performance values threshold values.

To configure thresholds for performance counter values


1. In the LoadGenConfig.xml file (or whatever you named the file), locate or add
<TopologyMonitorGroup> and the related tags under the <GlobalSetting> tab, as
follows:
<TopologyMonitorGroup>
<NodeMonitorGroups>
<NodeMonitorGroup Name="MyNode">
<ExtendedProperties />
<Duration>P0Y0M0DT0H20M4S</Duration>
<TargetMachine>MyClientMachine</TargetMachine>
<Actions AbortTest="false" StopDetection="false" FailTest="true" />
<PollFrequency>P0Y0M0DT0H0M5S</PollFrequency>
<DelayStartTime>P0Y0M0DT0H1M30S</DelayStartTime>
<NumberOfSamples>4</NumberOfSamples>
<PerfHealthEntities>
<PerfHealthEntity Name="MyRule" AbortOnInvalidCounters="false"
FailOnInvalidCounters="false">
<ExtendedProperties />
<TargetMachine />
<Actions AbortTest="true" StopDetection="false" />
<DelayStartTime>P0Y0M0DT0H2M0S</DelayStartTime>
<CounterPath>\Processor(_total)\% Processor time</CounterPath>
<ThresholdRules>
<ThresholdRule Aggregate="Maximum" Upper="95" Enabled="true" />
<ActionsAbortTest="true" StopDetection="false"/>
<ThresholdRule Aggregate="Average" Lower="70" Upper="85" Enabled="true" />
<ThresholdRule Aggregate="Standard deviation" Lower="0" Upper="4" />
</ThresholdRules>

35
<NumberOfSamples>10</NumberOfSamples>
</PerfHealthEntity>
2. To fail or stop the simulation based on invalid counters, such as the target computer
name and performance counter names, specify the XML attribute
AbortOnInvalidCounters="true" in the <PerfHealthEntity> tag. For example:
<PerfHealthEntity Name="Rule1" AbortOnInvalidCounters="true"
FailOnInvalidCounters="true">.
3. Performance counters that do not exist or are not yet initialized when the threshold
detection starts are skipped by default. To initialize these counters for threshold detection
later when they become available, add the XML attribute WaitCounter="true" to the
<PerfHealthEntity> tag.
4. If the property values such as <TargetMachine> and <DelayStart> under
<PerfHealthEntity> are not specified, the default values are taken from those under
<NodeMonitorGroup>.
5. To disable threshold collection for a particular group, add the attribute Enabled to the
<TopologyMonitorGroup> tag. For example, <TopologyMonitorGroup
Enabled="False">.

How to Configure Thresholds for Service Status Detection


For more information about the parameters for the <TopologyMonitorGroup> tag, see
Customizing the Exchange Load Generator Test.

To configure thresholds for service status detection


1. Open the LoadGenConfig.xml by using Notepad or a similar editor.
2. To configure the parameters for your specific requirements, locate or add the
<TopologyMonitorGroup> tag and related tags under the <GlobalSettings> tab as
follows and then save the file:
<TopologyMonitorGroup>
<NodeMonitorGroups>
<NodeMonitorGroup Name="MyNode">
<ExtendedProperties />
<TargetMachine>MyMachine</TargetMachine>
<ServiceHealthEntities>
<ServiceHealthEntity Name=" Microsoft Exchange Information Store" />
<ExtendedProperties />
<Duration>P0Y0M0DT2H0M5S</Duration>
<TargetMachine />
<Actions NumberOfAttempts="3" ResumeService="true" AbortTest="false"
StopDetection="true" />

36
<PollFrequency>P0Y0M0DT0H0M5S</PollFrequency>
<DelayStartTime>P0Y0M0DT0H0M3S</DelayStartTime>
</ServiceHealthEntity>
</ServiceHealthEntities>
3. Specify the number of attempts if ResumeService is set to true. This is the maximum
number of attempts that resumptions of the stopped service will be made.
4. Add a separate <ServiceHealthEntity> tag for each different service, or on different
computers under the <ServiceHealthEntities> tag.
5. The value in <TargetMachine> under the <NodeMonitorGroup> tag will be used if it is
not specified under the <ServiceHealthEntity> tag.

How to Configure Thresholds for Events Detection


For more information about the parameters for the <TopologyMonitorGroup> tag, see
Customizing the Exchange Load Generator Test.

To configure thresholds for events detection


1. Open the LoadGenConfig.xml file with Notepad or a similar editor.
2. In the file, locate or add the <TopologyMonitorGroup> and related tags under the
<GlobalSettings> tag, change as follows, and then save the file:
<TopologyMonitorGroup>
<NodeMonitorGroups>
<NodeMonitorGroup Name="MyNode">
<ExtendedProperties />
<TargetMachine>MyMachine</TargetMachine>
<EventHealthEntities>
<EventHealthEntity Name="MyRuleForEvent">
<ExtendedProperties />
<Duration>P0Y0M0DT0H4M0S</Duration>
<TargetMachine />
<Actions AbortTest="true" />
<PollFrequency>P0Y0M0DT0H0M10S</PollFrequency>
<DelayStartTime>P0Y0M0DT0H0M3S</DelayStartTime>
<Event EventID="7036" EventSource="Service control manager"
EventComponent="System" EventType="Information" />
</EventHealthEntity>
</EventHealthEntities>

37
How to Specify Custom Authentication
For computers that require custom authentication to access system resources, you can specify
the authentication under the <ExtendedProperties> tag.

To specify custom authentication


1. Locate the <NodeMonitorGroup> tag in the configuration file and add the
<ExtendedProperties> tag group:
<NodeMonitorGroup Name="MyNode">
<ExtendedProperties>
<Item Name="AuthPerfMonUser" Type="String">MyUser</Item>
<Item Name="AuthPerfMonDomain" Type="String">MyDomain</Item>
<Item Name="AuthPerfMonPassword" Type="String">MyPassword</Item>
</ExtendedProperties>

How to Enable Threshold Detection Logging


Threshold detection logging can be enabled either by adding a <ThresholdLogFileName> to the
<TopologyMonitorGroup> tag, or by adding a trace listener for the specific components. The
following procedures describe each method.

To enable logging by adding a specific tag


1. Open the LoadGenConfig.xml file by using Notepad or a similar editor.
2. Enable the logging capability by locating the <TopologyMonitorGroup> tag, which is
under the <GlobalSettings> tag.
3. Add the following tag with the name of your log file:
<ThresholdLogFileName>MyLog.log</ThresholdLogFileName>.

To enable logging by adding a trace listener


1. Add the following XML script to the LoadGenConfig.xml file:
<system.diagnostics> <switches> <add name="mainSwitch"
value="Information" /> </switches> <sources> <source
name="Threshold.General" switchName="mainSwitch"
switchType="System.Diagnostics.SourceSwitch"> <listeners>
<add name="my.log" /> </listeners> </source>
<source name="Threshold.Rule" switchName="mainSwitch"
switchType="System.Diagnostics.SourceSwitch"> <listeners>
<add name="my.log" /> </listeners> </source>
<source name="Threshold.Action" switchName="mainSwitch"
switchType="System.Diagnostics.SourceSwitch"> <listeners>

38
<add name="my.log" /> </listeners> </source>
</sources> <sharedListeners> <add name="my.log"
type="Microsoft.Exchange.Swordfish.FileLogTraceListener"
initializeData="my.log" autoflush="true" maxfilesize="1048576" />
<add name="mainConsole"
type="System.Diagnostics.DefaultTraceListener" />
</sharedListeners> </system.diagnostics>

How to Enable Remote Control


To run Exchange Load Generator from multiple clients, you can use the remote control feature to
manage all the clients from one computer (called a master computer). You do this by changing
the configuration file or by using the user interface.

Note:
Make sure that you start the Microsoft Exchange Load Generator Remote Agent service
on the remote load generator before you start the simulation.

To enable remote control on two client computers in the configuration file


1. In the LoadGenConfig.xml file (or whatever you named the file), locate the
<RemoteProfile> tag followed by the <EnableRemoteDistribution> tag.
2. Make sure that the value between the start tags and the end tags is "true".
3. Add the following to the configuration file to run simulation on two computers:
<EnableRemoteDistribution>true</EnableRemoteDistribution>
<RemoteLoadGenerators>
<RemoteLoadGenerator Name="Remote Load Generator 1"/>
<RemoteLoadGenerator Name="Remote Load Generator 2"/>
</RemoteLoadGenerators>
<LoadBalancing>false</LoadBalancing>
<PerfmonCountersRefreshTimeinSeconds>5</PerfmonCountersRefreshTimeinSeconds>

Note:
Although the master computer can also be configured as a load generator, we do
not recommend that you do this. This is because the Exchange Load Generator
counters will no longer be accurate.

Note:
If LoadBalancing is set to "true", users will be evenly distributed to remote load
generators at the beginning and Exchange Load Generator will monitor the load
on the remote client. Users will be reduced if the remote client is overloaded, or
more users will be assigned if the remote client is underloaded. If LoadBalancing
is set to "false", users will be distributed to remote load generators evenly, but

39
load balancing will not be done.

To enable remote control in the user interface


1. Open the user interface application.
2. On the Remote configuration page, click Enable task engine to distribute the load to
remote load generators.
3. On the Remote configuration page, click Enable load balancing on remote load
generators to enable or disable load balancing.
4. From the drop-down list in Remote logging level, select the log level that you want.
5. Add or delete load generators using the Remote Load Generators selection box.

To enable logging on the remote load generator


1. In the LoadGenConfig.xml file (or whatever you named the file), locate the
<RemoteProfile> tag, and then the <LogLevel> tag that follows it.
2. The default value of LogLevel is Off. This means no log file will be generated on the
remote load generator. To enable the log file, type any of the following values depending
on the log levels that you want: Information, Error, Warning, Verbose.
Information refers to informational messages, warnings, and error-handling
messages.
Error refers to output error-handling messages.
Warning refers to output warnings and error-handling messages.
Verbose refers to output all debugging and tracing messages.

To specify which remote load generator to run for specific user groups
1. In the LoadGenConfig.xml file (or whatever you named the file), locate the
<RemoteProfile> tag followed by the <EnableRemoteDistribution> tag.
2. Make sure that the value between the start tags and the end tags is "true".
3. Change the file as follows:
<EnablePerUserGroupDistribution>true</EnablePerUserGroupDistribution>
<RemoteLoadGenerators>
<RemoteLoadGenerator Name="Remote LoadGenerator 1">
<UserGroups>
<Name>UserGroup1</Name>
</UserGroups>
</RemoteLoadGenerator>
<RemoteLoadGenerator Name="Remote Load Generator 2">
<UserGroups>
<Name>UserGroup2</Name>

40
</UserGroups></RemoteLoadGenerator>
</RemoteLoadGenerators>
<LogLevel>Verbose</LogLevel>
<PerfmonCountersRefreshTimeinSeconds>5</PerfmonCountersRefreshTimeinSeconds>
<LoadBalancing>true</LoadBalancing>
</RemoteProfile>

Note:
You cannot have load balancing and EnablePerUserGroupDistribution turned on at
the same time. This is because load balancing involves moving users around, and
that would probably violate the user group definition for each remote load generator.

How to Enable Stress Mode


This optional procedure explains how to enable stress mode.

To enable stress mode


1. Open the LoadGenConfig.xml file by using Notepad or a similar editor.
2. Enable stress mode by setting the <StressMode> tag to true.

How to Enable RPC over HTTP


This optional procedure explains how to enable RPC over HTTP.

To enable RPC over HTTP


1. Open the LoadGenConfig.xml file by using Notepad or a similar editor.
2. In the LoadGenConfig.xml file (or whatever you named the file), locate the
<LogonParameters> tag.
3. Change the RpcHttpEnabled tag to true.
<TaskParameters d4p1:type="LogonParameters">
<MapiPrivateStoreConnectionCount>0</MapiPrivateStoreConnectionCount>
<NspiConnectionCount>0</NspiConnectionCount>
<AutoDiscoveryPercentage>100</AutoDiscoveryPercentage>
<EnableFullAutoDiscovery>false</EnableFullAutoDiscovery>
<RpcHttpEnabled>true</RpcHttpEnabled>
<RpcHttpAuthenticationType>NTLM</RpcHttpAuthenticationType>
<RpcHttpSslEnabled>true</RpcHttpSslEnabled>
<RpcHttpProxyServer />

41
<DisableRpcUniqueBinding>false</DisableRpcUniqueBinding>
<DisableMapiEncryption>false</DisableMapiEncryption>

</TaskParameters>

Notes:
RpcHttpAuthenticationType can be either NTLM or Basic. If RpcHttpProxyServer is
not set, a Client Access server will be randomly selected from the list of Client Access
servers that are defined with the <ClientAccessServers/> tag. The format of the
definition is as follows:
<ClientAccessServers>
<string>CAS-SERVER1.mydomain.com</string>
<string>CAS-SERVER2.mydomain.com</string>
</ClientAccessServers>

Note:
If you want Exchange Load Generator to automatically load-balance RPC over
HTTPs between the Client Access servers that are specified in the configuration file,
delete the following line in the file: <Item Name="RpcHttpProxyServer"
Type="string">yourservername</Item>

How to Initialize the Exchange Load Generator Test


Before you run a Microsoft Exchange Server Load Generator test, you must initialize the
mailboxes that will be used for the test. The initialization process stores much data in each
mailbox based on the <MailboxStoreProfile> tag in the configuration file. You should only run
initialization from one computer at a time or use remoting.
However, if search indexing is running on the server, it competes with Exchange Load Generator
for CPU resources. Depending on whether your goal is to run a highly accurate test or not, you
can either disable the search service if you are not concerned about accuracy. Or if you do, you
have two choices for running the Exchange Load Generator initialization.
Run Exchange Load Generator initialization on the server with search service disabled during
initialization. As soon as the initialization has finished, enable the search service and let it
complete the indexing process all at one time. Be aware that this activity could take a very
long time.
When you initialize the test, Exchange Load Generator adds or deletes messages in the Inbox
and folders of each user in the test so that each mailbox has the number of messages specified
in the <MailboxStoreProfile> tag. Calendar items and Contacts are handled similarly. Therefore
you can re-run initialization to set the mailboxes back to how they were before you ran the test.

Note:
Initialization can take several hours, or even a full day(s), to finish.

42
The procedure in this topic describes how to initialize the test using the command line and the
configuration file. When you use this method, you must run a separate command for the mailbox
store and for the public store.
If you use the graphical user interface, the mailbox store and public store initialization is
automatically done together. You can step through the user interface until you are at the
Configuration summary page, where you are given two choices:
Start the initialization phase. We recommend that you do this before you run the test.
Skip the initialization phase and run the simulation immediately

To initialize the test


1. Log on to the client computer by using domain credentials. If you have not joined the
client computer to a domain, log on with a local administrator account. We recommend
that you use a domain account because the user experience will be enhanced.
2. Open a command shell and locate the Exchange Load Generator installation directory.
Run the command LoadGenCmd.exe /r /c <configurationfile>, where configurationfile
is the name of your configuration file. By default, this is LoadGenConfig.xml in the current
directory if you have run LoadGenCmd.exe /g. Therefore, if you have not renamed your
configuration file, the command is LoadGenCmd.exe /i.

Important
To view detailed trace information about the actions that the tool is doing, you can add a trace
listener as a command-line option. Trace listeners can be files. Alternatively, they can be the
console if you want to view the output on screen. To view the output on screen, add the
option /add console. To output the trace.log, add the /add trace.log option at the command
line. For example:
C: \Program Files\Exchange Server Load Generator>LoadGenCmd.exe /i
/add trace.log
Microsoft Exchange Load Generator
Configuring LoadGen task engine
Load settings
NOTE: There are no trace listeners found. You can add/remove shared
trace listeners.
Starting mailbox initialization
3. Monitor the progress of initialization tasks by using performance counters. Click Start,
click Run, type perfmon, and then click OK.
4. Add the following performance counters to your view:
Exchange Load Generator(_Total)\Task Queue Length
Exchange Load Generator(_Total)\Tasks Completed
Exchange Load Generator(_Total)\Tasks Dispatched
The Tasks Dispatched counter equals the number of users whom you have
configured for the test. One initialization task is dispatched for each user during the

43
initialization process. The Tasks Completed counter shows the number of initialization
tasks that have been completed. This value slowly increases to equal the value of the
Tasks Dispatched counter until the initialization process is complete. The Tasks
Queue Length counter displays the number of tasks that remain to be run. This value
goes to zero when the initialization process is finished.
5. To cancel the initialization process, see How to Stop the Simulation Process.

Note:
During initialization, Exchange Load Generator will stop if it encounters errors
such as network errors or errors connecting to the Exchange server or
Active Directory. If you restart the initialization after you resolve the errors,
Exchange Load Generator restarts with the first user. It does not delete and re-
create the messages already in the Inbox and folders. This applies also to
Calendar items and Contacts.
6. If you decide to initialize public folders, run the command LoadGenCmd.exe /p /c
<configuration file>, where configuration file is the name of your configuration file.
Exchange Load Generator randomly determines the number of subfolders and messages
in each folder, based on the minimum, maximum, and average parameters that are set in
<PublicStoreProfile>.
When Exchange Load Generator determines the number of subfolders and messages to
create, it will create them if the number of existing folders is less. Alternatively, Exchange
Load Generator will delete some existing public folders if the number of existing folders is
more. If Exchange Load Generator stops the initialization, when you run it again and
decide to initialize public folders again, the number of subfolders and messages
Exchange Load Generator creates will not necessarily match the numbers from the
previous initialization. We recommend that you delete all existing public folders before
you run initialization again.

How to Run the Exchange Load Generator Test


A typical test that has an average number of users is set to take ten hours as the duration of the
simulation. Allow for at least two hours for a sufficient warm-up. After this warm-up period, the
clients and the server operate at a sustained baseline because the intensive startup processes
have completed. After the server starts and code is paged into memory, the server operates in a
consistent pattern. If the mailbox store database is new, more database activity can occur as
index pages split. The server does not reach a sustained baseline for adequate benchmarking
until this activity level decreases.
You should collect test information when the server is in this consistent state. After the server has
reached a sustained baseline, it must run long enough to collect statistically significant data. The
time this takes depends on the complexity of the user model and the cumulative rate at which
user actions are being generated. Perform a long calibration test run before you run your actual
tests. For example, if you perform an eight-hour test run and find variation from hour to hour, but
not between two-hour segments, the results are consistent. This indicates that your test runs

44
should include at least two hours where the server has reached a sustained baseline of
consistent behavior.
For information about performance counters and running Performance Monitor (Perfmon) so that
you can monitor the progress of the simulation, see Performance Counters Reference.

To run the Exchange Load Generator test


1. Start Exchange Load Generator. For the three methods to start the test, see How to Start
Exchange Load Generator.
2. Log on to the client computer that has domain credentials. If you have not joined the
client computer to a domain, log on with a local administrator account. We recommend
that you use a domain account because the user experience will be enhanced.
3. Open a command shell and locate the Exchange Load Generator installation directory.
4. Run the command LoadGenCmd.exe /r /c <configurationfile>, where configurationfile
is the name of your configuration file. By default, this is LoadGenConfig.xml in the current
directory. If you have not renamed your configuration file, you only need to run
LoadGenCmd.exe /r.

Important:
To view detailed trace information about the actions that the tool is performing,
you can add a "trace listener" as a command-line option. Trace listeners can be
either files or the console, if you want to view the output on screen. To view the
output on screen, add this option to the command line: /add console. To output
to a file that is named trace log, add this option to the command line: /add
trace.log.
5. For running a test using the user interface, after you have opened the user interface,
follow the instructions on the Welcome page to Start a new test.

How to Stop the Simulation Process


From the user interface, on the Simulation in Progress screen, click Stop Simulation.
From the command line, to cancel the process from the keyboard, press the keyboard shortcut
Ctrl+C. The task engine will be stopped as soon as possible. To force the task engine to stop
immediately, press Ctrl+C repeatedly until you are returned to a command prompt.

How to Repeat the Test


This is an optional step. It is common to run subsequent tests using different client numbers and
characteristics. Running subsequent tests gives you a better idea of the capabilities of the
Microsoft Exchange server. Be prepared to rerun your test to validate the test results. Also, be
sure to allocate enough time in your test cycles to do this.

45
Running Exchange Load Generator as a
Command-Line Program
There are several tasks or actions that you can run for Exchange Load Generator by using the
command-line program LoadGenCmd.exe. One of the key tasks is to generate the generic
configuration file. You must do this in order to set up the adjustable parameters for the test.
When you start Exchange Load Generator at a command prompt, you must indicate if you want
to initialize users or run a simulation. You cannot do these tasks from the same command. You
must run Exchange Load Generator separately for each task. Additionally, you must create user
accounts before generating a configuration file.
To run Exchange Load Generator at a command prompt, locate the LoadGenCmd.exe program,
which is in the directory where Exchange Load Generator was installed. Click Start, click Run,
and type cmd. If it is required, change the directory path to the path of the LoadGenCmd.exe
program, and continue with running the applicable tasks.
The syntax for running Exchange Load Generator as a command-line program is as follows:
LoadGenCmd [Action Argument] [Configuration Argument]
The configuration argument is Config [filename] = Config file (default is /c) LoadGenConfig.xml.
The following table presents action arguments with their examples of use.

Action Argument Example of use Description

Help /h or /? The help for the command-line


program

LoadCtr /l counter.xml Load performance counters

UnloadCtr /u counter.xml Unload performance counters

AddTrace /add trace log Add trace listeners

SupTrace /sup console Suppress trace listeners

EnsMessage /ens *.msg Make sure that message files


are formatted correctly and
can be opened successfully

GenConfig /g Generate a generic


configuration file

InitPrivStore /i Initialize mailbox stores

PrepPublicStore /p Prepare the public store

RunLoadSim /r Run load simulation

46
Running Exchange Load Generator Tasks
The default task parameters for Microsoft Exchange Load Generator are set up in the
LoadGenConfig.xml file. This can be generated by using the command LoadGenCmd.exe /g.
To customize the test tasks, you have to edit the configuration file and save it to a directory of
your choice. You can also rename it if you choose.
Access the configuration file in either of the following two ways.
From the command-line tool: LoadGenCmd.exe /r /c <path>\<config.xml>
From the user interface: After you have started the user interface by clicking
LoadGenWin.exe in the installation directory, select the file from the Start a new test
screen.
This topic includes information about how to set up the task information from the command line
(LoadGenCmd.exe) and from the user interface (LoadGenWin.exe).

Setting Parameters using LoadGenCmd and the Configuration


File
After you run LoadGenCmd to generate a new configuration file, you then make any required
changes in this generated file for the test simulation run.

Note:
You can edit the XML file by using an editor of your choice. To download XML Notepad
2007, go to the XML Downloads page at http://go.microsoft.com/fwlink/?linkid=8078.
A typical scenario for setting parameters is as follows:
Generate a new configuration file by using LoadGenCmd.exe /g.
Open the configuration file and change parameters as required. Important XML tags include
<ActionProfile> and <ActionCount>.
There is an <ActionProfile> tag for each defined user group. This tag indicates the start
of the XML that is related to tasks and their parameters, for a particular user group.
In the XML script, a task is of the format <tasknameActionCount>. Therefore, for the
logon task, this would be <LogonActionCount>.
Additionally, <ActionProfile> has the Name attribute, which will have one of the following
values: Light, Average, Heavy, Light, VeryHeavy, etc, or Custom (same as the UI drop
down). If you select the Custom profile (<ActionProfile Name="Custom">), the task
parameters can be changed according to the user requirements of the simulation.

Caution:
We encourage you to use the above well-known profiles that are provided by
Exchange Load Generator. Avoid creating a custom profile unless you are very
familiar with Exchange Load Generator parameters, and you understand what
type of difference your customization will make in terms of the load that is
generated on the server.

47
Running the Simulation Using LoadGenCmd.exe
When the action profile has been set, run LoadGenCmd.exe /r /c config.xml. This runs the
simulation based on the configuration.

Selecting the Action Profile Using LoadGenWin.exe


When you run LoadGenWin.exe, you are provided with the user interface with which to select
the Action Profile type. As you step through the user interface, in the Specify test user groups
page, under Action Profile, select Custom.
However, there is no user interface for editing task parameters so if you want a custom profile, do
the following:
1. On the Configuration summary page, save the configuration file.
2. Close the Microsoft Exchange Load Generator tool.
3. Open the saved configuration file in Notepad or a similar application, manually change the
required task parameters, and then save the file when you are completed.
4. Open the Microsoft Exchange Load Generator tool. (Locate LoadGenWin.exe and double-
click it.)
5. On the Welcome to Exchange Load Generator landing page, click Start a new test,
provide the saved configuration file name on the next page, and then click Continue.
6. Continue paging through until you reach the Configuration summary page, and then click
Start the initialization phase (recommended before running the test).

Changing the XML


The following are the tasks that can be run during simulation. To change the XML, search for the
task and change the parameters to customize the file. See Customizing the Exchange Load
Generator Test for information about the parameters.
BrowseCalendar
BrowseContacts
BrowsePublicFolder
BrowseTasks
CreateContact
CreateFolder
CreateTask
DeleteFolder
DeleteMail
DownloadOab
EditRules
EditSmartFolders
ExportMail
Logoff

48
Logon
MailboxStoreProfile
MakeAppointment
MoveMail
PostFreeBusy
PublicFolderPost
PublicStoreProfile
ReadAndProcessMessages
RequestMeeting
SendMail
Search

Using System Monitor and Exchange Load


Generator Data
Exchange Load Generator performance counters represent only a partial view of the operation of
a system. To fully understand how the system works, analyze the information in the Windows and
Exchange counters by running Windows System Monitor during the Exchange Load Generator
test.
Use System Monitor data to do the following:
Track how closely various resources are to saturation, and adjust subsequent Exchange
Load Generator tests accordingly.
Use the server performance data to identify bottlenecks and resources that are in high
demand, and consider re-tuning the system and then running the same test again.
You should log the System Monitor data from both the Exchange server and the Exchange Load
Generator client on a single, separate computer. For more information about consolidating your
log files on a single computer, see How to Consolidate System Monitor Data.

Questions to Consider when Looking at Test Results


Consider the following questions when looking at Exchange Load Generator test results and the
performance data from System Monitor. To additionally help you answer these questions, view
the log files in Exchange Load Generator and System Monitor.
Were there any errors in the test? Did they significantly affect the load?
You can use both the LoadGen.log file and Windows Event Viewer to locate any test errors.
To determine the validity of the test, examine the type and quantity of errors.
Did the client computers create the expected load?
If too many users are simulated per client computer, Exchange Load Generator generates
less than the expected load. To determine whether too many users are causing Exchange
Load Generator to generate a lighter load, you can designate a control client that has one-
fourth or one-eighth the number of users as the other client computers as a control for your

49
test. If the per-user rate of events that Exchange Load Generator generates is different for the
control client and the other clients, your experiment is invalid because the workload that is
generated is incorrect. If your other client computers are bottlenecked, they will generate less
than the expected requests. Additionally, if you compare the response times between the
regular clients and the control client, you can help determine whether the number of users per
client computer is affecting the results.
What was the actual load on the server with regard to transactions per user per day? Does
this match the expected value?
Make sure that you answer these two questions. To better understand the accuracy of the
test and the performance characteristics of a server, consider the actual work that the server
performed. If the server performed a different amount of work than expected, your test
represents a different workload than intended.
Were there any server resources that were saturated? Were there any software queues
growing unbounded?
To verify this we suggest you use the performance counters and thresholds that are specified
in the following locations.
Exchange 2010
http://technet.microsoft.com/en-us/library/dd335215.aspx

Exchange 2007
http://technet.microsoft.com/en-us/library/bb201720(EXCHG.80).aspx

How to Consolidate System Monitor Data


You can consolidate System Monitor (perfmon) data by logging all Exchange Load Generator
client counters and Exchange server System Monitor counters to one data log instead of having
one log per computer.

To log all Exchange Load Generator counters and Exchange server counters to one
data log
1. Log on to the computer on the domain where you want to log all System Monitor data.
2. Open Services: Click Start, point to Programs, point to Administrative Tools, click
Computer Management, and then click Services.
3. In Services, in the results pane, under Name, right-click Performance Logs and Alerts,
and then click Properties.
4. In Performance Logs and Alerts Properties (Local Computer), click the Log On tab,
and then click This account.
5. Click Browse.
6. In Select User, select the domain administrator account, and then click OK.
7. On the Log On tab, in the Password box, type the password for the domain
administrator account.
8. In the Confirm password box, retype the password for the domain administrator

50
account.
9. Click OK.
10. Close Services.
11. Click Start, click Run, and then type perfmon.msc to access the Performance dialog
box.
12. In Performance, click System Monitor, and then click the Add (+) icon on the toolbar to
open the Add Counters dialog box.
13. In the Add Counters dialog box, click Select counters from computer, and then type
the server or client name in the corresponding list.
14. In the Performance object list, select the performance object to add. Minimally, you
should add Exchange Load Generator Engine and Exchange Load Generator User
Groups for each client.
15. Click All counters to add all counters for the object, or click Select counters from list to
individually select the counters to be added for the object.
16. Repeat Steps 14 and 15 for each performance object to be monitored for this computer.
17. Repeat Steps 12 to 16 for each additional client or server for which you want to
consolidate the logs.

Operational Recommendations for Using


Exchange Load Generator
The following operational recommendations will help you achieve solid results from the Exchange
Load Generator tests.

Simulating Cached Mode


Exchange Load Generator simulates the cached mode of Microsoft Office Outlook 2003 and later
versions, through a combination of tasks that are common to online mode. To simulate cached
mode, use the Cached Mode client type as a starting point to increasing and decreasing task
frequencies to match your user profiles.

Using Stress Mode


By using stress mode, you can run a test with the Exchange Load Generator users performing
their tasks as fast as they can. When in this mode, Exchange Load Generator does not spread
out the tasks throughout the defined length of a simulation day, but runs them as fast as the
server or client can and will finish probably faster and unpredictably.
You should only use this mode when the objective is to stress the server at its mode and ignore
the deterministic way (spreading a fixed load for a fixed number of hours) that Exchange Load
Generator runs. Make sure while running in stress mode that you are not bound by the
performance of your Loadgen clients but of the server.

51
RPC over HTTP
To use RPC over HTTP, your topology has to be configured to use one or more RPC proxy
servers. Instructions for doing this using the configuration file are in the topic, Customizing the
Exchange Load Generator Test. The following are two recommendations for user loads when you
use RPC over HTTP.

Does the Connector Behavior Accurately Simulate Outlook?


With a reasonable number of users who are running on an Exchange Load Generator computer,
inactive RPC/HTTP connections will be disconnected automatically by the Windows RPC runtime
component at 90-second intervals. This means that with such a small level of load running
through RPC/HTTP, you may find that the number of active connections is very low.

How Many Users does the Client Support?


The number of users who are supported by the client depends on the actions and frequencies
specified in the configuration file. Generally, the number of users is limited by the connections and
ports configured on the server. If you are running Outlook 2003 online simulation, there are two
RPC connections to the mailbox store and one to the public folder for each user. Each connection
generates two HTTP connections (data in and data out). Make sure that the server is configured
correctly and there are no other applications on either side that consume more TCP port numbers
than you expected. For a client computer that has a single processor (2 GHz) and 1 gigabyte of
RAM, no major issues are presented in supporting 1200 to 1500 RPC over HTTP users driven by
Exchange Load Generator. The command-generated LoadGenConfig.xml file would be used for
setting up the configuration.
Make sure that you monitor the value of \Exchange Load Generator Engine\Task Queue Length
to make sure that it is not increasing. The value of \Exchange Load Generator Engine\Task
Completed/sec and \Exchange Load Generator Engine\Task Dispatched/sec should also match.
This means that the client is catching up. Usually the out-of-memory problem or MAPI connection
errors occur you hit the CPU bottleneck.

Distribution Groups, Query-Based Distribution Groups, and


Global Catalogs
In the Read and Process Message task, you can configure a percentage of the messages to be
sent to distribution groups (also known as DLs) or query-based distribution groups. Although you
can configure the average size of a distribution group in Exchange Load Generator, query-based
distribution groups are generally larger than the distribution groups. This is because they can
include all per database, per server, or for a whole topology.
Sending mail to query-based distribution groups can severely stress the server and global
catalogs domain controller when the query-based distribution groups are being expanded. We
recommend that you set up a dedicated expansion server for the distribution groups. You should
also modify Exchange Load Generators distribution groups and query-based distribution groups
accordingly. Additionally, consider using the one per MDB query-based distribution group that is
typically smaller.

52
For Exchange 2007 information, use the Set-DynamicDistributionGroup and Set-
DistributionGroup cmdlets to modify the settings. Both these cmdlets have an ExpansionServer
parameter. Detailed information about cmdlets is in the Exchange 2007 Online Help at
http://go.microsoft.com/fwlink/?linkid=76150.

Deployment Verification Using Exchange Load Generator


Exchange Load Generator can be an effective tool for deployment verification. For example, you
can use it to verify that you will be able to support the number of users who have been planned
for your deployment. You can also examine how the system might react to stress loads that are
heavier than what you would typically expect.

Important:
Although Exchange Load Generator can be used to verify your deployment in various
ways, it should not be used in production environments.
We recommend that Exchange Load Generator be run for verification in separate topologies and
then rolled out on production environments. Also, it is a good idea to run each Exchange Load
Generator test multiple times. This will help make sure of the validity of your results.

Capacity Planning Using Exchange Load Generator


Exchange Load Generator has profiles that enable you to verify deployments and that help in
capacity planning. To model your deployments users, enable or disable tasks and change the
settings and task frequencies of the Heavy profile. The Heavy profile has many features to better
simulate real-life users.

Caution:
We encourage you to use the well-known profiles such as "Heavy" that are provided by
Exchange Load Generator. Avoid creating a custom profile unless you are very familiar
with Exchange Load Generator parameters, and you understand what type of difference
your customization will make in terms of the load that is generated on the server.
To control the stress load that Exchange Load Generator puts on the Exchange server, you can
change the duration settings of the simulation in the Specify test settings page of the user
interface, and enable or disable tasks. Exchange Load Generator calculates the stress from the
frequencies of the tasks, and then spreads the load homogeneously across the configured length
of the simulation day. For example, if Exchange Load Generator must run a task four times in an
eight-hour daytime period, it will run a task every two hours. By increasing the task frequency to
eight times a day and keeping the length of the simulation day setting the same, a task will be run
every hour, thereby doubling the stress load. Therefore, if the length of the simulation day
increased, the stress is actually diminished, because the same load is spread over a longer time.
To increase the stress load, increase the task frequencies and/or reduce the simulation day
length.

53
Re-create the Topology Every Time a Topology Setting Changes
After you change the topology settings, you should re-create the topology to make sure that the
physical topology matches your settings.

Back up and Restore Databases to Skip Repeating the


Initialization Phase
After you initialize users for a test run that will be changed and repeated over time, it is a good
idea to back up the databases so that the initialization process does not have to be repeated.
After each test run, restore the databases and re-start your tests without having to reinitialize all
users.

Note:
Backing up and restoring databases to skip repeating the initialization phase makes
sense only if the initialization and topology settings are unchanged between test runs for
the server in question.

Monitor for Saturation


The typical goal of Exchange Load Generator tests is to analyze the load that the server can
support and still provide sufficient response times. However, sometimes the goal of Exchange
Load Generator tests is to determine what load the network can support while still providing
sufficient response times. You should saturate the resource you are focusing on with the test, but
not saturate other resources in the test. For example, you cannot effectively study the server
behavior if the client computers or the network are saturated.
The following two methods can be used to monitor for saturation:
Monitor the demands on the clients, network, and server.
Do not let the clients become the bottleneck in an experiment.

Monitor Mail Queues


Use System Monitor to make sure that mail delivery is working correctly. In Exchange Server
2007, the counter to monitor is MSExchangeIS Mailbox: Message Queued for Submission.
If there are several messages in the queue, this indicates a server bottleneck. Because the server
must operate at a consistent baseline for sufficient benchmarking, a server bottleneck invalidates
your test results. For example, if the queue is continually growing for the whole duration of the
test, the server is probably overloaded. This indicates a bottleneck.

Specific Features and Behaviors of Exchange


Load Generator
This topic contains in-depth observations about some specific features and behaviors of
Exchange Load Generator.

54
Public Folders
Exchange Load Generator has two public folder tasks: Public Folder Post and Browse Public
Folder. Both tasks will choose any public folder in the MAPI TLH (the default public folder root),
except for one named Internet Newsgroups.
Exchange Load Generator can choose other folders to browse or post, even if it did not create
them. Therefore, in such an attempt, Exchange Load Generator may not always run some tasks
and indicate it had access denied. We recommend that you have only the public folders that were
created by Exchange Load Generator.
When Exchange Load Generator creates its public folders, it changes the permissions to give
owner rights as default. This means that any user can edit, delete, or add new posts. This is
required for Exchange Load Generator to simulate multiple users when logging on to users using
their respective accounts. If the permissions are changed in any way, Exchange Load Generator
might not always create posts or browse the public folders.

Mail Flow and Recipients


A core functionality of Exchange Load Generator is that it can send mail to users, distribution
groups, and query-based distribution groups. When you set up a complex topology, you must
understand how Exchange Load Generator will decide who it will send mail to.
There are two distinct scenarios that cause Exchange Load Generator to send mail. The first is
when Exchange Load Generator is processing the Inbox or browsing old mail and tries to Reply
or Reply all to one or more messages. In this scenario, Exchange Load Generator sends the
reply to the sender and recipients (if Reply all), regardless of whether the users are in the
topology. This means that when a topology is initialized, all the mail that is populated in the
mailbox is consistent with the topology settings of the client that initialized all mailboxes. As test
runs occur, e-mail is added from clients that have their own topology configuration, which can be
the same as the one that initialized the mail. If at any point there is a change in the topology (for
example, a server is removed or users are added or removed), the mail that is already in the
users mailboxes is not affected. If Exchange Load Generator tries to reply to a sender that no
longer exists, a non-delivery report (NDR) occurs.
The other scenario is with regard to sending a new mail. When sending a new mail, Exchange
Load Generator uses the information in the send mail task for selecting the number of recipients
and whether distribution groups and query-based distribution groups should be added. After this
step, Exchange Load Generator chooses the recipients based on the test group configuration.
For example, if the topology settings are configured so that a server has 1,000 users and the test
targets only 10 users, Exchange Load Generator will only consider 10 users as possible
recipients. Additionally, the distribution groups and query-based distribution groups will be
configured to the 1,000 users. Therefore any mail going to them will end up in users other than
the 10 users.

Task Rate, Concurrency Settings, and Stress Mode


To fine-tune stress, it helps to understand how Exchange Load Generator calculates how much
load will occur against servers. This calculation process occurs in two steps.

55
In the first step, Exchange Load Generator calculates the number of tasks that need to run per
user group. This is the sum of all task frequencies multiplied by the number of users.
In the second step, Exchange Load Generator sums the number of tasks of all the user groups
that the client computer that the test is running on is configured to do. In other words, this is the
result of the calculation from the first step. The summed task is spread across the total duration of
the simulation. The duration values are set in the Specify test settings page in the user interface
as follows:
The length of a 'simulation day' defined in hours, minutes, and seconds
The total length of the simulation defined as forever, or as a specified duration (in hours,
minutes, and seconds)
For example, if there is one group that has 100 users and will run the Send Mail task 10 times in
an eight-hour configuration, Exchange Load Generator will spread 1,000 tasks across eight
hours, running each task every 347 milliseconds (1,000 divided by 8 hours).
Independently of the concurrency settings, the duration of the simulation will stop the test after a
designated elapsed time is started. For the previous example, if the duration of the simulation
was two or eight hours, the tasks would still run every 347 milliseconds. The difference is that the
test would stop in two and eight hours, respectively.
Finally, there is an additional option: stress mode. In stress mode, Exchange Load Generator
ignores the concurrency settings and task frequencies. It runs the tasks back-to-back and without
a wait for the duration of the simulation. For example, if the duration of the simulation was set to
eight hours, the tasks would run for eight hours without the 347 millisecond wait between them.
Because only the client, server, and network configurations limit this mode, results will vary
extensively from setup to setup. Therefore, we do not recommend this mode for comparing
computers or for sizing.

Dynamic Mail Generator


Mail messages are now created dynamically as they are needed. This ensures a more unique
message mix that is closer to a real environment. The word frequency it based on the language of
choice.
The dynamic mail generator has a number of settings that you can specify.
o Min/Max/Avg message size
o Default language (English, French, Spanish, Korean, Turkish)
o Language Variation %
o Default Body Type (html, rtf, text)
o Body Type Variation %
o Attachments (just drop the attachments that you want to use into the folder where
the Dynamic Mail Generator is looking.

The dynamic mail generator is setup by default for initialization as well as sending mail.
We currently do not have a UI for this feature. You will have to customize your Loadgen XML to
change the default settings.

The default settings are:


<TaskConfig d6p1:type="GeneratedMailProfileTask">

56
<TaskCount>0</TaskCount>
<TaskParameters d6p1:type="GeneratedMailParameters">
<MessageSizeParameters>
<MinimumSize>100</MinimumSize>
<MaximumSize>100000</MaximumSize>
<AverageSize>30000</AverageSize>
</MessageSizeParameters>
<LanguageParameters>
<EnglishLanguageWeight>100</EnglishLanguageWeight>
<FrenchLanguageWeight>0</FrenchLanguageWeight>
<KoreanLanguageWeight>0</KoreanLanguageWeight>
<SpanishLanguageWeight>0</SpanishLanguageWeight>
<TurkishLanguageWeight>0</TurkishLanguageWeight>
</LanguageParameters>
<BodyTypeParameters>
<HtmlBodyWeight>70</HtmlBodyWeight>
<PlainTextBodyWeight>5</PlainTextBodyWeight>
<RtfBodyWeight>15</RtfBodyWeight>
</BodyTypeParameters>
<AttachmentParameters>
<AttachFrequency>0.05</AttachFrequency>
<AttachmentCount>
<MinimumCount>1</MinimumCount>
<MaximumCount>5</MaximumCount>
<AverageCount>1</AverageCount>
</AttachmentCount>
<PercentInfected>0</PercentInfected>
<MessageFiles>
<MessageFile>
<Weight>840</Weight>
<Pathname>messages\msg00001.msg</Pathname>
</MessageFile>
</MessageFiles>
</AttachmentParameters>
</TaskParameters>
</TaskConfig>
</TaskConfigList>
<WellKnownProfileType>Default</WellKnownProfileType>
</GeneratedMailProfile>
In order to use attachments specify them in the following location:
<MessageFiles>
<MessageFile>
<Weight>840</Weight>
<Pathname>messages\msg00001.msg</Pathname>
</MessageFile>
</MessageFiles>

Using Custom Messages


Exchange Load Generator has two areas where a custom message mix can be used. One set is
for sending new messages and another set is for posting in public folders. The former is defined

57
in the Send Mail task and it is also used by individual mailbox initialization. The latter is defined in
the Public Folder Post task.
Exchange Load Generator has one message set for public store initialization. It is also configured
in the LoadGenConfig.xml file.
You can use any MSG MAPI message that is formatted correctly with Exchange Load Generator.
The following table lists the message mix of the files that are downloaded to the installation
directory. The attachments can be documents, clip art, spreadsheets, or any type recognized by
the client mail application.
Exchange Load Generator loads in memory all messages used from both message sets, per user
group. This means that if you have multiple user groups, even if with the same list of messages to
be used, they will be loaded separately and occupy more space in memory. Additionally, the
overall memory consumption of Exchange Load Generator increases if many custom messages
are used.
The following table lists the message mix of the files that are downloaded to the installation
directory. Use these files as is, or customize for your test simulation.

File name Content type Size (in bytes) in DAV

msg00001 HTML 2187

msg00002 HTML 3858

msg00003 HTML 5174

msg00004 HTML 6716

msg00005 HTML 11639

msg00006 HTML 16720

msg00007 HTML 32518

msg00008 HTML 47781

msg00009 HTML 105244

msg00010 HTML 211710

msg00011 HTML 313025

msg00012 HTML 530583

msg00013 HTML 106890

msg00014 HTML 2651291

msg00015 HTML w/attachment 6831

msg00016 HTML w/attachment 7869

msg00017 HTML w/attachment 11965

msg00018 HTML w/attachment 18178

58
File name Content type Size (in bytes) in DAV

msg00019 HTML w/attachment 48299

msg00020 HTML w/attachment 416410

msg00021 HTML w/attachment 1053029

msg00022 RTF 6404

msg00023 RTF 8280

msg00024 RTF 10174

msg00025 RTF 20850

msg00026 RTF 30254

msg00027 RTF 61812

msg00028 RTF 92586

msg00029 RTF 205005

msg00030 RTF 409874

msg00031 RTF 614404

msg00032 RTF 1048846

msg00033 RTF w/attachment 12217

msg00034 RTF w/attachment 15326

msg00035 RTF w/attachment 20881

msg00036 RTF w/attachment 31032

msg00037 RTF w/attachment 61383

msg00038 RTF w/attachment 614192

msg00039 RTF w/attachment 1057303

msg00040 Text 1472

msg00041 Text 2287

msg00042 Text 2681

msg00043 Text 3190

msg00044 Text 4900

msg00045 Text 6624

msg00046 Text 11679

msg00047 Text 16607

59
File name Content type Size (in bytes) in DAV

msg00048 Text 35177

msg00049 Text 68834

msg00050 Text 102574

msg00051 Text 346338

msg00052 Text w/attachment 5661

msg00053 Text w/attachment 6849

msg00054 Text w/attachment 10779

msg00055 Text w/attachment 16521

msg00056 Text w/attachment 38678

msg00057 Text w/attachment 277239

msg00058 Text w/attachment 1051835

Performance Counters Reference


You can monitor the progress of the simulation when the test is being run by observing
performance counters. To reach the Performance screen, click Start, click Run, type perfmon,
and then click OK.
The following two tables list the counters and purposes for the Exchange Load Generator
Engine Counter object and the Exchange Load Generator User Groups Counter object.

Note:
Do not use the Exchange Load Generator latency counters as a measure of acceptable
performance with regard to latency. Instead, use the RPC averaged latency counter on
the server.

Counter Object for Exchange Load Generator Engine

Counter Purpose

ContentCacheTrims Number of times that the task engine was


required to allocate additional space for cached
data, where there were no more than 8 regions
of 64 MBs available and in-memory contents
were removed from the cache. Indicates that
task engine does not have sufficient virtual
memory to perform an accurate simulation.

ContentCacheTrims/sec. Rate of content cache trims. As the rate

60
Counter Purpose

increases, overall accuracy of the simulation


decreases.

Task Exceptions Count of task executions that resulted in a fatal


exception

Task Exceptions/sec. Number of fatal exceptions encountered when


running a task per second

Task Interval Number of milliseconds that the engine will wait


between dispatching tasks

Task Queue Length Number of items currently in task queue that


have not yet been executed

Tasks Skipped Number of tasks that were skipped

Tasks Completed Total number of tasks completed

Tasks Completed/sec. Number of tasks completed per second

Tasks Dispatched Total number of tasks dispatched

Tasks Dispatched/sec. Number of tasks dispatched per second

Counter Object for Exchange Load Generator User Groups


The counters are listed alphabetically, and within task or action type.

Counter Purpose

Browse Calendar Action Latency Average time (in milliseconds) taken to


complete a Browse Calendar action

Browse Calendar Actions Total Browse Calendar actions executed

Browse Calendar Actions/sec. Count of Browse Calendar actions executed per


second

Browse Calendar Action Latency (95th The 95th percentile value of the time (in
Percentile) milliseconds) taken to complete a Browse
Calendar action

Browse Contacts Action Latency Average time (in milliseconds) taken to


complete a Browse Contacts action

Browse Contacts Actions Total Browse Contacts actions executed

Browse Contacts Actions/sec. Count of Browse Contacts actions executed per


second

61
Counter Purpose

Browse Contacts Action Latency (95th The 95th percentile value of the time (in
Percentile) milliseconds) taken to complete a Browse
Contacts action

Browse Public Folder Action Latency Average time (in milliseconds) taken to
complete a Browse Public Folder action

Browse Public Folder Actions Total Browse Public Folder actions executed

Browse Public Folder Actions/sec. Count of Browse Public Folder actions executed
per second

Browse Public Folder Action Latency (95th The 95th percentile value of the time (in
Percentile) milliseconds) taken to complete a Browse
Public Folder action

Browse Tasks Action Latency Average time (in milliseconds) taken to


complete a Browse Tasks action

Browse Tasks Actions Total Browse Tasks actions executed

Browse Tasks Actions/sec. Count of Browse Tasks actions executed per


second

Browse Tasks Action Latency (95th Percentile) The 95th percentile value of the time (in
milliseconds) taken to complete a Browse Tasks
action

Create Contact Action Latency Average time (in milliseconds) taken to


complete a Create Contact action

Create Contact Actions Total Create Contact actions executed

Create Contact Actions/sec. Count of Create Contact actions executed per


second

Create Contact Action Latency (95th Percentile) The 95th percentile value of the time (in
milliseconds) taken to complete a Create
Content action

Create Folder Action Latency Average time (in milliseconds) taken to


complete a Create Folder action

Create Folder Actions Total Create Folder actions executed

Create Folder Actions/sec. Count of Create Folder actions executed per


second

Create Folder Action Latency (95th Percentile) The 95th percentile value of the time (in
milliseconds) taken to complete a Create Folder
action

62
Counter Purpose

Create Task Action Latency Average time (in milliseconds) taken to


complete a Create Task action

Create Task Actions Total Create Task actions executed

Create Task Actions/sec. Count of Create Task actions executed per


second

Create Task Action Latency (95th Percentile) The 95th percentile value of the time (in
milliseconds) taken to complete a Create Task
action

Delete Mail Action Latency Average time (in milliseconds) taken to


complete a Delete Mail action

Delete Mail Actions Total Delete Mail actions executed

Delete Mail Actions/sec. Count of Delete Mail actions executed per


second

Delete Mail Action Latency (95th Percentile) The 95th percentile value of the time (in
milliseconds) taken to complete a Delete Mail
action

Download OAB Action Latency Average time (in milliseconds) taken to


complete a Download OAB action

Download OAB Actions Total Download OAB actions executed

Download OAB Actions/sec. Count of Download OAB actions executed per


second

Download OAB Action Latency (95th The 95th percentile value of the time (in
Percentile) milliseconds) taken to complete a Download
OAB action

Edit Rules Action Latency Average time (in milliseconds) taken to


complete an Edit Rules action

Edit Rules Actions Total Edit Rules actions executed

Edit Rules Actions/sec. Count of Edit Rules actions executed per


second

Edit Rules Action Latency (95th Percentile) The 95th percentile value of the time (in
milliseconds) taken to complete an Edit Rules
action

Edit Smart Folders Action Latency Average time (in milliseconds) taken to
complete an Edit Smart Folders action

Edit Smart Folders Actions Total Edit Smart Folders actions executed

63
Counter Purpose

Edit Smart Folders Actions/sec. Count of Edit Smart Folders actions executed
per second

Edit Smart Folders Action Latency (95th The 95th percentile value of the time (in
Percentile) milliseconds) taken to complete an Edit Smart
Folders action

Export Mail Action Latency Average time (in milliseconds) taken to


complete a Export Mail action

Export Mail Actions Total Export Mail actions executed

Export Mail Actions/sec. Count of Export Mail actions executed per


second

Export Mail Action Latency (95th Percentile) The 95th percentile value of the time (in
milliseconds) taken to complete an Export Mail
action

Initialize Mailbox Action Latency Average time (in milliseconds) taken to


complete an Initialize Mailbox action

Initialize Mailbox Actions Total Initialize Mailbox actions executed

Initialize Mailbox Actions/sec. Count of Initialize Mailbox actions executed per


second

Initialize Mailbox Action Latency (95th The 95th percentile value of the time (in
Percentile) milliseconds) taken to complete an Initialize
Mailbox action

Logoff Action Latency Average time (in milliseconds) taken to


complete a Logoff action

Logoff Actions Total Logoff actions executed

Logoff Actions/sec. Count of Logoff actions executed per second

Logoff Action Latency (95th Percentile) The 95th percentile value of the time (in
milliseconds) taken to complete a Logoff action

Logon Action Latency Average time (in milliseconds) taken to


complete a Logon action

Logon Actions Total Logon actions executed

Logon Actions/sec. Count of Logon actions executed per second

Logon Action Latency (95th Percentile) The 95th percentile value of the time (in
milliseconds) taken to complete a Logon action

Make Appointment Action Latency Average time (in milliseconds) taken to

64
Counter Purpose

complete a Make Appointment action

Make Appointment Actions Total Make Appointment actions executed

Make Appointment Actions/sec. Count of Make Appointment actions executed


per second

Make Appointment Action Latency (95th The 95th percentile value of the time (in
Percentile) milliseconds) taken to complete a Make
Appointment action

Move Mail Action Latency Average time (in milliseconds) taken to


complete a Move Mail action

Move Mail Actions Total Move Mail actions executed

Move Mail Actions/sec. Count of Move Mail actions executed per


second

Move Mail Action Latency (95th Percentile) The 95th percentile value of the time (in
milliseconds) taken to complete a Move Mail
action

Not Implemented Action Latency Average time (in milliseconds) taken to


complete a Not Implemented action

Not Implemented Actions Total Not Implemented actions executed

Not Implemented Actions/sec. Count of Not Implemented actions executed per


second

Not Implemented Action Latency (95th The 95th percentile value of the time (in
Percentile) milliseconds) taken to complete a Not
Implemented action

Post Free Busy Action Latency Average time (in milliseconds) taken to
complete a Post Free Busy action

Post Free Busy Actions Total Post Free Busy actions executed

Post Free Busy Actions/sec. Count of Post Free Busy actions executed per
second

Post Free Busy Action Latency (95th The 95th percentile value of the time (in
Percentile) milliseconds) taken to complete a Post Free
Busy action

Public Folder Post Action Latency Average time (in milliseconds) taken to
complete a Public Folder Post action

Public Folder Post Actions Total Public Folder Post actions executed

65
Counter Purpose

Public Folder Post Actions/sec. Count of Public Folder Post actions executed
per second

Public Folder Post Action Latency (95th The 95th percentile value of the time (in
Percentile) milliseconds) taken to complete a Public Folder
Post action

Read And Process Messages Action Latency Average time (in milliseconds) taken to
complete a Read And Process Messages action

Read And Process Messages Actions Total Read And Process Messages actions
executed

Read And Process Messages Actions/sec. Count of Read And Process Messages actions
executed per second

Read and Process Action Latency (95th The 95th percentile value of the time (in
Percentile) milliseconds) taken to complete a Read and
Process action

Request Meeting Action Latency Average time (in milliseconds) taken to


complete a Request Meeting action

Request Meeting Actions Total Request Meeting actions executed

Request Meeting Actions/sec. Count of Request Meeting actions executed per


second

Request Meeting Action Latency (95th The 95th percentile value of the time (in
Percentile) milliseconds) taken to complete a Request
Meeting action

Search Action Latency Average time (in milliseconds) taken to


complete a Search action

Search Actions Total Search actions executed

Search Actions/sec. Count of Search actions executed per second

Search Action Latency (95th Percentile) The 95th percentile value of the time (in
milliseconds) taken to complete a Search action

Send Mail Action Latency Average time (in milliseconds) taken to


complete a Send Mail action

Send Mail Actions Total Send Mail actions executed

Send Mail Actions/sec. Count of Send Mail actions executed per


second

Send Mail Action Latency (95th Percentile) The 95th percentile value of the time (in
milliseconds) taken to complete a Send Mail

66
Counter Purpose

action

Synchronize Folders Action Latency Average time (in milliseconds) taken to


complete a Synchronize Folders action

Synchronize Folders Actions Total Synchronize Folders actions executed

Synchronize Folders Actions/sec. Count of Synchronize Folders actions executed


per second

Synchronize Folders Action Latency (95th The 95th percentile value of the time (in
Percentile) milliseconds) taken to complete a Synchronize
Folders action

Task Exceptions Count of task executions that resulted in a fatal


exception within the current user group

Task Exceptions/sec. Count of task executions that resulted in a fatal


exception per second within the current user
group

User Init Action Latency Average time (in milliseconds) taken to


complete a User Initiation action

User Init Actions Total User Initiated actions executed

User Init Actions/sec. Count of User Initiated actions executed per


second

User Init Action Latency (95th Percentile) The 95th percentile value of the time (in
milliseconds) taken to complete a User Init
action

User Term Action Latency Average time (in milliseconds) taken to


complete a User Term action

User Term Actions Total User Term actions executed

User Term Actions/sec. Count of User Term actions executed per


second

User Term Action Latency The 95th percentile value of the time (in
milliseconds) taken to complete a User Term
action

Users Active Number of active users in the current


configuration

Users Configured Number of users defined in the current


configuration

Users Standby Number of inactive users in the current

67
Counter Purpose

configuration

Scripted Load Modules in the Exchange Load


Generator Framework
The following topics describe the scripted load modules in the Exchange Load Generator
framework.
Description and example of the Exchange Load Generator configuration XML at Exchange
Load Generator Configuration XML.
Description of the base set of verbs that all the modules can use at Base Script Verbs.
Information about the POP3 module at The POP3 Module.
Information about the SMTP module at The SMTP Module.
Information about the IMAP4 module at The IMAP4 Module.
Information about the Outlook Web Access module at The Outlook Web Access Module.

Exchange Load Generator Configuration XML


The Exchange Load Generator configuration XML is used to supply arguments to the script
modules. In particular, <ScriptProfile> defines the scripted module-specific parameters.
The following table explains the tags that are used in the <ScriptProfile>.

Tag Description

Logging True or false.

LogPath String. The default is the executing directory


and module name.

LogLevel Integer. 0-2 increasing amount of detail in the


log.

ScriptPath String. Path to the script file.

EncryptedPort True or false. By default, the target port is


encrypted.

Server String. The target or destination server.

Port Integer. Port to which requests will be directed.

ProtocolName String. The name of the protocol.

StartDelay Integer. The interval (in) milliseconds to wait


between the start of each user instance.

68
Tag Description

UserCount Integer. Number of script instances. (-1 will run


entire UserGroup.)

NearBy Integer. Distance from the current user to


search for other users.

Sample Configuration XML


The XML script is as follows:
<UserGroup>
<ExtendedProperties />
<ScriptProfile>
<ExtendedProperties />
<Logging>true</Logging>
<LogPath>\myModuleLog.txt</LogPath>
<ScriptPath>myModuleScript.txt</ScriptPath>
<EncryptedPort>false</EncryptedPort>
<Server>targetServer</Server>
<Port>25</Port>
<StartDelay>4</StartDelay>
<UserCount>30</UserCount>
<NearBy>1</NearBy>
</ScriptProfile>
<ClientType>SmtpModule</ClientType>
<Name>UserGroup2</Name>
<LdapBaseDn>OU=FewUsers,DC=XZPVCB,DC=com</LdapBaseDn>
<StartWaitDuration>P0Y0M0DT0H0M0S</StartWaitDuration>
<RunLengthDuration>P0Y0M0DT14H0M00S</RunLengthDuration>
</UserGroup>
<ClientType/>under<UserGroup/> is used to define which scripted module to simulate. Following
is a list of client types supported by Exchange Load Generator.
<ClientType>SmtpModule</ClientType>
<ClientType>PopModule</ClientType>
<ClientType>ImapModule</ClientType>
<ClientType>OwaModule</ClientType> - Latest OWA Module (Exchange 2010 Beta SP1)
<ClientType>Owa2010Module</ClientType> - OWA Module for Exchange 2010 RTM

69
<ClientType>Owa2007Module</ClientType> - OWA Module for Exchange 2007

Base Script Verbs


The base class provides a set of verbs that can be used by all the modules. The script can also
contain variables that are described in this topic.

Note:
Instances of variables and verbs are not related. That is, SEQULIST will be sequential for
each script instance.

Table of Verbs
The following table lists the verbs and their functions.

Verb Function

RANDLIST Returns a string from the list of strings inside a


file.
Matches "randlist\\(([-_:\\\\.#a-z0-9A-Z]+)\\)"
Example: RANDLIST(c:\temp\myfilelist.txt)
returns hello14

SEQULIST Returns the next string from a list of strings.


Wraps after the ultimate line.
Matches "sequlist\\(([-_:\\\\.#a-z0-9A-Z]+)\\)"
Example: SEQULIST(c:\temp\myfilelist.txt)
returns hello0

SAMESEQULIST Returns the same string as the previous call to


SEQULIST.
Matches "samesequlist\\(([-_:\\\\.#a-z0-9A-Z]
+)\\)"
Example: SEQULIST(C:\temp\myfilelist.txt)
returns hello0
Example:
SAMESEQULIST(C:\temp\myfilelist.txt) returns
hello0

SEQUNUMBER Returns the next number between n1 and n2.


Matches "sequnumber\\(([0-9,]+\\))"
Example: SEQUNUMBER(0,10) returns 1

SAMESEQUNUMBER Returns the same number as the previous call


to SEQUNUMBER.

70
Verb Function

Matches "samesequnumber\\(([0-9,]+\\))"
Example: SAMESEQUNUMBER(0,10) returns 1

RANDNUMBER Returns a random number between n1 and n2.


Matches "randnumber\\(([0-9,]+\\))"
Example: RANDNUMBER(0,100) returns 32

LOOP Starts a loop block.


Matches "loop ([0-9]+)"
Example: LOOP (10)

ENDLOOP Ends a loop block.


Matches "endloop"
Example: ENDLOOP

RANDNUMERIC Returns a random number of n digits.


Matches "randnumeric\\(([0-9]+)\\)"
Example: RANDNUMERIC(4) returns 3456

RANDALPHA Returns a random string of length n.


Matches "randalpha\\(([0-9]+)\\)"
Example: RANDALPHA(3) returns sdk

SKIP Skips the next n lines, wraps, not including lines


that have been removed or blanks.
Matches "skip\\(([0-9]+)\\)"
Example: SKIP(10)

PERCENT Executes the remainder of the line n% of the


time.
Matches "%([0-9]+)"
Example: %40 RCPT TO: david@contoso.com

SLEEP Pauses execution of the instance in


milliseconds.
Matches "sleep"
Example: SLEEP 1000

RANDUSER Selects a random user from the list of users in


the UserGroup.
Information available: username, password, e-
mail, domain.
Matches "RANDUSER.[a-zA-Z]+"

71
Verb Function

Example: RANDUSER.emailaddress returns


alex@contoso.com

SEQUUSER Selects the next user from the list of users in the
UserGroup.
Information available: username, password, e-
mail, domain
Matches "SEQUUSER.[a-zA-Z]+"
Example: SEQUUSER.username returns
user21

NEARBY Randomly picks a user from the list of users in


the UserGroup within n of the current user.
ScriptProfile xml parameter NearBy default
value = 5
Information available: username, password, e-
mail, domain
Matches "NEARBY.[a-zA-Z]+"
Example: NEARBY.emailaddress returns
hao@contoso.com

USER Replaced with the current users information.


This is a one-time replacement, not a variable.
Information available: username, password, e-
mail, domain
Matches USER.[a-zA-Z]
USER.emailAddress
USER.username
USER.userPassword
USER.domain

Variable Behavior
All script-based modules support simple variables which enable you to store values and do
simple operations. Declaration and initial value is:
The default value is string.empty.
There are 2 types: string and integer.
There are no operators in the SET command.
The reserved patterns are "\$[^\$^ ]+\$" and "~userVar".
SET <$var$> [initial value]

72
SET $myvar$
SET $myvar1$ 1
SET $myVAR2$ the world
SET $MyVar3$ RANDNUMBER(0,1)
NO SET $MyVar4$ $Myvar3$
NO RANDNUMBER(0,$myVar$)

Integer Operators
All operations return a string: += and -=. Change the value of the left operand. Operations other
than SET on a string variable return the unchanged value of the variable. Precedence is right to
left replacement with the universal variables being replaced first.
+
$myvar$ + 4
$myVar$ + $myvar2$
$myVar$ + RANDNUMBER(0,100)
++
$myvar$++
+=
$myvar$ += 5
$myvar$+=$myvar2$
-
$myvar$ - 4
$myVar$ - $myvar2$
$myVar$ - RANDNUMBER(0,100)
--
$myvar$--
-=
$myvar$ -= 5
$myvar$ -= $myvar2$

The POP3 Module


The Post Office Protocol version 3 (POP3) module simulates multiple clients using the POP3
protocol. The module supports parameters to configure options for the following:
Different protocol-specific options
How the test executes
Security options
Examples are the server that this client is targeting or the port number. Client actions are
simulated by running a script that contains scripted module keywords and POP3 verbs.

73
This module also implements performance counters for protocol statistics. Additionally, you can
log client actions and server responses during a test run. You cannot configure the events that
are logged.

Script Verbs Specific to the POP3 Module


The following table lists script verbs and their functions.

Script verb Function

AUTH Authenticates the current user.

CAPA Executes the CAPA request.

CONNECT Connects to the specified server on the


specified port.

DELE <msgnum> Marks the specified message for deletion.

LIST Returns a listing of messages by using the


current message number and size.

LOGON Creates a logon request using the current user.

NOOP Sends a NOOP (no operation) request.

QUIT Ends the conversation.

RETR <msgnum> Retrieves the specified message.

RSET Resets the status on the mailbox. All messages


that are marked for deletion will be unmarked.

STAT Returns the number of items in the mailbox and


the total size of the mailbox.

STLS Starts a TLS session.

TOP <msgnum> Retrieves the requested number of lines from


the specified message.

UIDL <msgnum> Returns a Unique ID Listing for a particular


message or all the messages.

ALL A macro that can be used in place of


<msgnum>. Assumes the verb LIST has been
previously run.

Sample Script
The following is sample script for running the POP3 module.
REM. Assumes that there are at least 10 items in the Inbox.

74
CONNECT
STLS
LOGON
STAT
LIST
UIDL RANDNUMBER(1,10)
RETR RANDNUMBER(1,9)
TOP 1 10
DELE 4
SLEEP RANDNUMBER(0,20)
RSET
SLEEP RANDNUMBER(0,20)
NOOP
QUIT
SLEEP RANDNUMBER(1800,2400)

The SMTP Module


The Simple Mail Transfer Protocol (SMTP) module simulates multiple clients using the SMTP
protocol. The module supports parameters for configuring the following:
Different protocol-specific options
Options for how the test executes
Security options
Examples of options are the server that this client is targeting or the port number. Client actions
are simulated by running a script that contains scripted module keywords and SMTP verbs.
This module also implements performance counters for protocol statistics. Additionally, you can
log client actions and server responses during a test run. You cannot configure the events that
are logged.

Script Verbs Specific to the SMTP Module


The following table lists script verbs and their functions.

Script verb Function

AUTH [LOGIN] Authenticates the current user by using the


prescribed method.

BDAT <file path> Sends the specified file.

CONNECT Connects to the specified server on the


specified port.

75
Script verb Function

DATA <file path> Sends the specified data.

EHLO <string> Sends the EHLO command.

HELO <string> Sends the HELO command.

HELP Sends the Help command.

MAIL FROM <smtp address> Sends the MAIL FROM command. Defaults to
current user.

NOOP Do nothing.

RCPT TO <smtp address> Sends the RCPT TO command. Defaults to a


random user in the user group.

RSET Resets the session.

QUIT Ends the session.

STARTTLS Begins a TLS session.

VRFY <smtp address> Verifies the SMTP address.

Sample Script
The following is sample script for running the SMTP module.
CONNECT
EHLO ADMIN
STARTTLS
EHLO
AUTH NTLM
MAIL FROM: user.emailaddress
RCPT TO: SEQUUSER.emailaddress
RCPT TO: RANDUSER.emailaddress
RCPT TO: NEARBY.emailaddress
RCPT TO:
%40 RCPT TO:
%30 RCPT TO:
BDAT RANDLIST(d:\loadgen\perfbh\Exiser-Perf-BH-Inbound-messages.txt)
NOOP
QUIT
Sleep RANDNUMBER(500,1000)

76
The IMAP4 Module
The Internet Message Access Protocol version 4 (IMAP4) module simulates multiple clients using
the IMAP4 protocol. The module supports parameters for configuring the following:
Different protocol-specific options
Options for how the test executes
Security options
Examples of options are the server that this client is targeting or the port number. Client actions
are simulated by running a script that contains scripted module keywords and IMAP4 verbs.
This module also implements performance counters for protocol statistics. Additionally, you can
log client actions and server responses during a test run. You cannot configure the events that
are logged.

Script Verbs Specific to the IMAP4 Module


The following table lists the script verbs and their functions.

Script verb Function

APPEND <mailbox name> <file name> Appends the contents of <filename> to the
mailbox.

AUTHENTICATE <package name> Authenticates the connection as the current


user.

CAPABILITY Requests the capability string from the server.

CHECK Performs a Check command against the server


(equivalent to a NOOP in Exchange).

CLOSE Closes the selected folder. This deletes any


items that are flagged for deletion in the folder.

CONNECT Connects to the specified server on the


specified port.

COPY <num><dest> Copies an item or set of items from the selected


mailbox to a destination mailbox.

CREATE <mailbox name> Creates a specified mailbox.

DELETE <mailbox name> Deletes a specified mailbox.

DONE Executes the Done command.

EXAMINE <mailbox name> Examines a specified mailbox.

EXPUNGE <mailbox name> Calls the Expunge command on the selected


folder.

FETCH <num><msg data item string> Returns the item or set of items.

77
Script verb Function

FETCHUID Translates to a FETCH 1:* UID.

IDLE Executes the Idle command.

LIST <reference name><wildcard> Lists folders.

LOGIN Authenticates the current user with the login


command.

LOGOUT Logs out the current user.

LSUB <reference name><wildcard> Lists subscribed folders.

NOOP Do nothing.

RENAME <mailbox name><new name> Renames the object.

SEARCH Executes the Search command.

SELECT <mailbox name> Specifies the selected mailbox.

STARTTLS Begins a TLS session.

STATUS <mailbox name> Returns the status of a specified mailbox and its
attributes.

STORE <num><msg data item name><item Stores the specified item.


value>

SUBSCRIBE <mailbox name> Stores the specified item.

UIDCOPY <num><dest mailbox> Copies the specified object to a destination.

UIDFETCH <num><msg data item set> Uses the UID to fetch an object.

UIDSTORE <num><msg data item set> Stores a specified object.

UNSUBSCRIBE <mailbox name> Unsubscribes to a specified mailbox.

Sample Script
The following is sample script for running the IMAP4 module.
REM # This script assumes the presence of at least 10 message currently
in the users INBOX
REM # And will create said structure
REM # This script will leave the INBOX with the first 10 messages of the
INBOX remaining... all others will be purged.
CONNECT
STARTTLS
REM LOGIN

78
AUTHENTICATE NTLM
SLEEP RANDNUMBER(0,100)
CAPABILITY
SELECT "INBOX"
LOOP 10
APPEND "INBOX" .\scripts\file1.txt
SLEEP RANDNUMBER(0,100)
ENDLOOP
LOGOUT
CONNECT
STARTTLS
LOGIN
SELECT "INBOX"
CREATE "BackMeUp"
COPY 1:10 "BackMeUp"
CREATE "Other Mail"
CREATE "Trash"
IDLE
DONE
LIST "" "*"
SELECT "INBOX"
FETCHUID
UIDFETCH UIDALL (UID RFC822.SIZE rfc822.header)
NOOP
UIDFETCH FIRST 1 (UID RFC822.SIZE RFC822)
SLEEP RANDNUMBER(100,120)
UIDCOPY 1 "Trash"
UIDSTORE 1 +FLAGS (\Deleted)
UIDFETCH NEXT (UID RFC822.SIZE RFC822)
SLEEP RANDNUMBER(100,120)
UIDFETCH NEXT (UID RFC822.SIZE RFC822)
SLEEP RANDNUMBER(100,120)
UIDCOPY 2 "Other Mail"
UIDFETCH NEXT (UID RFC822.SIZE RFC822)
SLEEP RANDNUMBER(100,120)

79
UIDFETCH NEXT (UID RFC822.SIZE RFC822)
SLEEP RANDNUMBER(100,120)
UIDCOPY 1 "Trash"
UIDSTORE 1 +FLAGS (\Deleted)
UIDFETCH NEXT (UID RFC822.SIZE RFC822)
SLEEP RANDNUMBER(100,120)
UIDCOPY 2 "Other Mail"
UIDFETCH NEXT (UID RFC822.SIZE RFC822)
SLEEP RANDNUMBER(100,120)
UIDCOPY 1 "Trash"
UIDSTORE 1 +FLAGS (\Deleted)
CHECK
SLEEP RANDNUMBER(1000,2000)
NOOP
FETCH LAST 1 (UID)
UIDCOPY LAST 2 "Other Mail"
UIDSTORE LAST 2 +FLAGS (\Deleted)
CLOSE
SELECT "Other Mail"
FETCHUID
UIDFETCH 1:* (FLAGS)
UIDFETCH UIDALL (UID RFC822.SIZE rfc822.header)
NOOP
UIDFETCH FIRST 1 (UID RFC822.SIZE RFC822)
SLEEP RANDNUMBER(1000,2000)
UIDFETCH NEXT (UID RFC822.SIZE RFC822)
SLEEP RANDNUMBER(1000,2000)
UIDFETCH NEXT (UID RFC822.SIZE RFC822)
SLEEP RANDNUMBER(1000,2000)
UIDFETCH NEXT (UID RFC822.SIZE RFC822)
SLEEP RANDNUMBER(1000,2000)
FETCHUID
UIDCOPY LAST 4 "Trash"
UIDSTORE LAST 4 +FLAGS (\Deleted)
SLEEP RANDNUMBER(1000,2000)

80
CLOSE
SELECT "INBOX"
FETCHUID
UIDFETCH 1:10 (FLAGS)
UIDFETCH UIDALL (UID RFC822.SIZE rfc822.header)
NOOP
SLEEP RANDNUMBER(1000,2000)
UIDCOPY LAST 5 "Trash"
UIDSTORE UIDALL +FLAGS (\Deleted)
EXPUNGE
CLOSE
SELECT "TRASH"
STORE ALL +FLAGS (\DELETED)
EXPUNGE
LIST "TRASH" "*"
DELETE "Other Mail"
DELETE "TRASH"
CLOSE
SELECT "BackMeUp"
COPY 1:10 "INBOX"
DELETE "BackMeUp"
LOGOUT
SKIP(12)

The Outlook Web Access Module


For the Outlook Web Access module, test cases are written in script files that specify the actions
to be done for each stress test user. The test module parses and reads this script file and
executes each command by building and sending the appropriate HTTP requests. Each
command consists of the name of the action to be performed and a series of parameters for the
action (if applicable).
The topics in this section explain how to configure the Outlook Web Access module and describe
the commands that are currently implemented. The OWA Module is version controlled to match a
particular version of Exchange.

OwaModule - Latest Exchange OWA Module (Exchange 2010 Beta SP1)


Owa2010Module - OWA Module for Exchange 2010 RTM
Owa2007Module - OWA Module for Exchange 2007

81
There is also a topic about how to use CreateCerts, which is a tool that enables a tester to create
certificates to stress-test S/MIME features.

Outlook Web Access Module Configuration


The Outlook Web Access module is configured using an XML file that can be modified like other
Exchange Load Generator profiles. Make sure you use the Outlook Web Module that matches
your version of Exchange. The Outlook Web Access-specific settings should be added to the
<ScriptProfile> section, as follows:
<ScriptProfile>
<ExtendedProperties>
<Item Name="OwaDir" Type="String">owa</Item>
<Item Name="StaticContentCacheMode" Type="String">Cache</Item>
<Item Name="Notifications" Type="Boolean">true</Item>
<Item Name="NotificationsInterval" Type="Int32">120</Item>
<Item Name="NotificationsFollowup" Type="Boolean">true</Item>
<Item Name="UserCulture" Type="Int32">1033</Item>
<Item Name="TimeZone" Type="String">Pacific+Standard+Time</Item>
<Item Name="PublicComputer" Type="Boolean">false</Item>
</ExtendedProperties>
<Logging>true</Logging>
<LogPath>D:\Program Files\Exchange Load Generator\Owa.log</LogPath>
<LogLevel>1</LogLevel>
<ScriptPath>D:\Program Files\Exchange Load
Generator\Scripts\Owa.txt</ScriptPath>
<EncryptedPort>true</EncryptedPort>
<Server><Replace with CAS server name></Server>
<Port>443</Port>
<StartDelay>0</StartDelay>
<UserCount>1</UserCount>
</ScriptProfile>

Outlook Web Access Module Commands


This section describes the Outlook Web Access module commands. Information is provided
about the following command groups.
General commands
Mail module commands

82
Documents module commands
Contacts module commands
Address Book module commands
Tasks module commands
Calendar module commands

General Commands
Logon Sequence Commands
A user logon is required for any actions in a test script that is to be executed. In the Outlook Web
Access module, a logon sequence consists of the following three parts:
retrieve the authentication page
authenticate
log on
Logon information (for example, server name, domain name, user name and password) is read
from the configuration profile. The command syntax for the logon sequence is as follows:
GetAuthenticationPage
Auth
Logon
If this is the first time a user logs on, there will be a request to display the language selection
page.
Logoff Command
The Logoff command simulates a user logging out of Outlook Web Access. The command syntax
is as follows:
Logoff
Refresh Command
The Refresh command is the equivalent of clicking Check for New Messages. The script writer
can specify which folder to refresh for the command. Otherwise, the default value will be the
currently active folder. The command syntax is as follows:
Refresh <folder name>
An example of command usage is as follows:
Refresh Inbox
Be aware that this command updates the current mailbox state object to reflect the currently
loaded items.
PublicFolderModule Command
The PublicFolderModule command is the equivalent of navigating to the Public Folder module
whereby the public folder can be handled like a normal folder. The command syntax is as follows:
PublicFolderModule
An example of command usage is as follows:
PublicFolderModule

83
OpenFolder publicfolder
Note that the user will operate the Public Folder object.
Poll Command
A Poll command is sent from the client to the server to obtain notifications. The interval can be
customized from the xml properties file. This command is implicitly called by the module. That is,
it does not need to be explicitly defined in the test script. The command syntax is as follows:
Poll

Note:
The command sends a DismissReminders request if there are any reminders.
Additionally, the command sends a Refresh request if the mailbox has been changed.
DismissReminders Command
The DismissReminders command sends a request to dismiss all currently active reminders. The
command syntax is as follows:
DismissReminders
MarkAsRead Command
This command marks the currently active item as read. The command syntax is as follows:
MarkAsRead
Search Command
The Search command searches for a specified string under the specified search scope. If no
scope is specified, the default This Folder is used. The allowable scopes are:
ThisFolder
SubFolders
Everywhere
Alternatively, a search command can search the Global Address List (GAL) for a particular user,
specified by the search string. The command syntax is as follows:
Search <search scope> <search string>
Search AddressBook <search string>
An example of command usage is as follows:
Search ThisFolder SomeString
SpellCheck Command
The SpellCheck command does a spell check using the specified language for either a provided
string or the file specified by a full path. Valid languages are as follows:
Spanish
Arabic
Danish
Dutch
EnglishAustralia
EnglishCanada

84
EnglishUnitedKingdom
EnglishUnitedStates
Finnish
French
GermanPostReform
GermanPreReform
Hebrew
Italian
Korean
NorwegianBokmal
NorwegianNynorsk
PortuguesePortugal
PortugueseBrasil
Swedish
Catalan
If no language is specified, the default of EnglishUnitedStates is used. If no string or file path is
specified, a random alphanumeric string is used. The command syntax is as follows:
SpellCheck <language> <string/file path>
An example of command usage is as follows:
SpellCheck Finnish D:\myFinnishFile.txt

Mail Module Commands


CheckName Command
The CheckName command resolves the names of one or more recipients and/or meeting
attendees to be added to the To field of a compose form. If no names are specified, a random
user is selected. The list of recipients is delimited by the comma (,) character. The command
syntax is as follows:
CheckName <names to resolve>
An example of command usage is:
CheckName user1,user2,user3
OpenFolder Command
The OpenFolder command simulates opening the folder specified by the folder name. Sets this
folder as the active folder. Valid folders are:
Inbox
Calendar
Contacts
Tasks
Documents

85
The command syntax is as follows:
OpenFolder <folder name>
An example of command usage is as follows:
OpenFolder Inbox
ComposeMail and ComposePost Commands
The ComposeMail and the ComposePost commands create a new message or post compose
form. The command syntax is as follows:
ComposeMail
ComposePost
SelectMail Command
The SelectMail command selects a message by the specified message subject. If no subject is
specified, a random item from the currently active folder is selected. Sets the currently active item
to the selected item. The command syntax is as follows:
SelectMail <message subject>
OpenPost and OpenMail Commands
The OpenPost and OpenMail commands open a message or post by the specified message or
post subject. If no subject is specified, a random message or post is opened from the currently
active folder. The command syntax is as follows:
OpenPost <post subject>
OpenMail <mail subject>
DeleteMail Command
The DeleteMail command deletes a message specified by the message subject. If no subject is
specified, a random item is deleted from the currently active folder. The command syntax is as
follows:
DeleteMail <message subject>
SendMail Command
The SendMail command sends a message to the previously resolved recipients (To, CC, and
BCC). If a compose form has already been opened (Reply, ReplyAll, Forward, or a New message
with attachments), that particular message is sent. If there are no compose forms opened, a new
message is sent. If the message is not a Reply or ReplyAll, run a CheckName command before
SendMail to resolve the recipients.
SendMail can also read in a file specifying mail options. The command syntax is as follows:
SendMail <subject/mail option file path>
An example of command usage is as follows:
CheckName user0
SendMail new message
SendPost Command

86
The SendPost command adds a Post message in the currently active folder. SendPost can read
in a file specifying mail options. The command syntax is as follows:
SendPost <subject/mail option file path>
Reply Command
The Reply command replies to the message specified by the subject. If the subject is not
specified, reply to the currently active item in the active folder. If there is no active item either,
reply to a random item in the active folder. This command does not actually send the message. It
only opens the compose form. A SendMail command is required after the form has opened. The
command syntax is as follows:
Reply <message subject>
An example of command usage is as follows:
Reply hello
SendMail
PostReply Command
The PostReply command adds a post reply to the item specified by the message subject. If no
subject is specified, reply to the active item in the active folder. The command syntax is as
follows:
PostReply <message subject>
ReplyAll Command
The ReplyAll command replies to all users to the message specified by the subject. If the subject
is not specified, reply to the currently active item in the active folder. If there is no active item
either, reply to a random item in the active folder. This command does not actually send the
message. It only opens the compose form. A SendMail command is required after the ReplyAll
command has been specified. The command syntax is as follows:
ReplyAll <message subject>
An example of command usage is as follows:
ReplyAll hello
SendMail
Forward Command
The Forward command forwards the message specified by the subject. If no subject is specified,
forward the currently active item in the active folder. If there is no active item either, forward a
random item in the active folder. This command does not actually send the message. It only
opens the compose form. A SendMail command is required after the Forward command has been
specified.
Additionally, the script writer needs to run the CheckName command before forwarding to resolve
the recipients. The command syntax is as follows:
Forward <message subject>
An example of command usage is as follows:
Forward hello

87
CheckName user1
SendMail
ExpandFolder Command
The ExpandFolder command expands the folder specified by the folder name. The command
syntax is as follows:
ExpandFolder <folder name>
AttachFile Command
The AttachFile command attaches the files specified by their full paths. The script writer must
specify one to three files, delimited by the comma (,) character. If the wrong number of files or an
invalid file path is specified, no files are attached. The files would be attached to the currently
active compose message form. The command syntax is as follows:
AttachFile <file paths>
An example of command usage is as follows:
Reply
AttachFile D:\file1.txt,D:\file2.txt
SendMail
OpenSmimeMail Command
The OpenSmimeMail command opens an S/MIME message by the specified message subject. If
no subject is specified, a random message is opened from the currently active folder. The
command syntax is as follows:
OpenSmimeMail <mail subject>
GetCerts Command
The GetCerts command gets a certificate from the Client Access server for the previously
resolved recipients (To). A CheckName command should be done before GetCerts for the
resolved recipients. The command syntax is as follows:
GetCerts
An example of command usage is as follows:
CheckName user1
GetCerts
ValidateCerts Command
The ValidateCerts command validates that the specified certificate file is valid and trusted. If no
file is specified, a default file named user.pfx is validated. The command only simulates the
process to validate a certificate before sending a signed or signed&encrypted message. This is
not identical to the actual process wherein the certificate to validate is read from the store of the
current user, not a file on disk. The command syntax is as follows:
ValidateCerts <certificate file path>
SendSmimeMail Command
The SendSmimeMail command sends an S/MIME message by the specified message file to the
previously resolved recipients (To, CC, and BCC). If no message file is specified, a default

88
message file smime.eml is sent. If no S/MIME message file is specified, this command fails. A
CheckName command should be done before SendSmimeMail to resolve the recipients. The
command syntax is as follows:
SendSmimeMail <smime message file path>
An example of command syntax is as follows:
CheckName user0
SendSmimeMail .\scripts\smime.eml

Documents Module Commands


OpenDocumentsFolder Command
The OpenDocumentsFolder command opens a document folder at the specified URL. The
command syntax is as follows:
OpenDocumentsFolder <URL>
OpenDocumentsFolder <URL> <ID>
OpenDocument Command
The OpenDocument command opens a document at the specified URL. The command syntax is
as follows:
OpenDocument <URL>
OpenDocument <URL> <ID>
OpenLocation Command
The OpenLocation command opens the location specified by the URL. If no URL is specified, the
default location will be opened, if possible. The command syntax is:
OpenLocation <URL>

Contacts Module Commands


OpenContact Command
The OpenContact command opens a contact specified by the contact name. The name must be
specified in the format LastName, FirstName. The command syntax is as follows:
OpenContact <contact name>
SelectContact Command
The SelectContract command selects a contact specified by the contact name. The name must
be specified in the format LastName, FirstName. The command syntax is as follows:
SelectContact <contact name>
SaveContact Command
The SaveContact command saves a contact with the specified name. Only the given name and
the last name of the contact can be specified in the command. The command syntax is as
follows:
SaveContact <given name> <surname>
ComposeContact Command

89
The ComposeContact command opens a new compose contact form. The command syntax is as
follows:
ComposeContact

Address Book Commands


OpenAddressBook Command
The OpenAddressBook command opens the address book. The script writer can specify whether
to open the recipient picker or the room picker. The default is recipient picker. The command
syntax is as follows:
OpenAddressBook <rooms>
An example of command usage is as follows:
OpenAddressBook
OpenAddressBook Rooms
OpenGalFolder Command
The OpenGalFolder command opens the Global Address List (GAL) folder. The script writer can
specify whether to open the recipient picker or the room picker. The default is recipient picker.
The command syntax is as follows:
OpenGalFolder <rooms>
An example of command usage is as follows:
OpenGalFolder
OpenGalFolder Rooms
SelectGalItem Command
The SelectGalItem command selects a GAL item with the specified name. If the name is not
specified, a random GAL item is selected. The command syntax is as follows:
SelectGalItem <item name>

Note:
Calls the GetPersonFreeBusy command to retrieve the persons free/busy schedule for
the week starting today.
OpenGalItem Command
The OpenGalItem command opens a GAL item with the specified name. If an item name is not
specified, a random item is selected. The command syntax is as follows:
OpenGalItem <item name>
GetPersonFreeBusy Command
The GetPersonFreeBusy command gets the Free/Busy schedule for the currently active GAL
entry. A valid GAL entry must be selected for this command to be used. The command syntax is
as follows:
GetPersonFreeBusy
This command advances the end date of the free/busy period by one week.
GetFreeBusy Command

90
The GetFreeBusy command gets the Free/Busy schedule for the current active GAL entry. A valid
GAL entry must be selected to be able to use this command. The command syntax is as follows:
GetFreeBusy
This command advances the end date of the free/busy period by one week.

Tasks Module Commands


OpenTask Command
The OpenTask command opens the task by the specified name. The command syntax is as
follows:
OpenTask <task name>
SelectTask Command
The SelectTask command selects the task by the specified name. The command syntax is as
follows:
SelectTask <task name>
SaveTask Command
The SaveTask command saves the task under the specified task name. The command syntax is
as follows:
SaveTask <task name>
ComposeTask Command
The ComposeTask command opens a new compose task form. The command syntax is as
follows:
ComposeTask

Calendar Module Commands


DeleteCalendarItem Command
The DeleteCalendarItem command deletes a calendar item with the specified subject. If the
subject is not specified, the currently active item is deleted. The command syntax is as follows:
DeleteCalendarItem <subject>
SelectCalendarItem Command
The SelectCalendarItem command selects a calendar item with the specified subject. If the
subject is not specified, the currently active item is selected. The command can be used in Daily
Display mode only. The command syntax is as follows:
SelectCalendarItem <subject>
OpenCalendarItem Command
The OpenCalendarItem command opens a calendar item with the specified subject. If the subject
is not specified, the currently active item is opened. The command syntax is as follows:
OpenCalendarItem <subject>
SaveAppointment Command

91
The SaveAppointment command saves an appointment in the calendar. The command can read
from an options file. The command syntax is as follows:
SaveAppointment now
SaveAppointment <start date in the format yyyy-mm-ddThh:mm:ss>
SaveAppointment <options file>
SaveAppointment now <options file>
SaveAppointment now <subject>
SaveAppointment <start date> <options file>
SaveAppointment <start date> <subject>
SendMeeting Command
The SendMeeting command sends a meeting invitation to the previously resolved recipients
(requires a CheckName command). The command can read from an options file. The command
syntax is as follows:
SendMeeting now
SendMeeting <start date in the format yyyy-mm-ddThh:mm:ss>
SendMeeting <options file>
SendMeeting now <options file>
SendMeeting now <subject>
SendMeeting <start date> <options file>
SendMeeting <start date> <subject>
SaveMeeting Command
The SaveMeeting command saves a meeting invitation. The command can be read from an
options file. The command syntax is as follows:
SaveMeeting now
SaveMeeting <start date in the format yyyy-mm-ddThh:mm:ss>
SaveMeeting <options file>
SaveMeeting now <options file>
SaveMeeting now <subject>
SaveMeeting <start date> <options file>
SaveMeeting <start date> <subject>
NewAppointment and NewMeeting Commands
The NewAppointment and NewMeeting commands compose a new appointment or meeting form.
The commands usage is as follows:
NewAppointment/NewMeeting
OpenCalendarView Command
The OpenCalendarView command opens the calendar view module with the specified display
view type. The display view type can be:

92
Daily
Weekly
WorkWeek
Monthly
If no type is specified, the default type Daily is used. The command syntax is as follows:
OpenCalendarView <view type>

Frequently Asked Questions about Exchange


Load Generator
This topic contains answers to frequently asked questions about Exchange Load Generator,
including how to obtain the latest version of the tool.

General
Q: How can I get the latest Exchange Load Generator?
A: Download the latest 32-bit or 64-bit version of Exchange Load Generator from Tools for
Performance and Scalability Evaluation. Even though this is for Exchange 2010 this version will
also work on Exchange 2007 topologies.

Q: Do I have to install Microsoft Office Outlook on the Exchange Load Generator client?
A: No.

Q: What is SwordfishExceptionTooMuchLoad? Why Im seeing this and how can I avoid it?
A: Exchange Load Generator throws SwordfishExceptionTooMuchLoad when the number of
unfinished tasks, including those in the queue and those being executed, is greater than 1.5 times
the number of users. It occurs because tasks are dispatched at a faster rate than they are being
executed. Either the server cannot keep up or something is causing really high latency, such as
network issues. The following performance counters show how fast tasks are dispatched and
completed: Exchange Load Generator Engine\Task Interval, Exchange Load Generator
Engine\Task Completed/sec, and Exchange Load Generator Engine\Task Dispatched/sec.
Exchange Load Generator is designed to give up if the task queue length becomes too high. This
prevents Exchange Load Generator from experiencing memory issues because of a very large
task queue and enables you to verify that there is a problem that has to be investigated sooner
instead of later.
To avoid this exception, first, make sure that there is no server side problem of slowing down task
execution. If the server performs normally, you can either adjust the task frequency so that the
tasks are dispatched at a rate at which they can actually be executed, or use stress mode. Stress
mode just executes tasks as quickly as possible based on how quickly tasks are completing.

Q: How does Exchange Load Generator determine the task dispatch rate?

93
A: Exchange Load Generator dispatches tasks at a certain rate, which is calculated by this
formula:
(simulated day length) / (total number of tasks need to be run during a simulated day across all
the user groups)
For each user group, the number of tasks to be run = number of users * number of tasks defined
by action profile.
Based on this calculation, you can adjust the task dispatch rate by changing the simulate day
length or the task action count in action profile or number of users.

Q: My simulation went well, but why do I see Failed in the report that is generated by
Exchange Load Generator?
A: The Exchange Load Generator report would indicate that a simulation failed if the following
condition was not met.
The actual run length must meet the following formula:
scheduled run length <= actual run length <= scheduled run length +
EngineStopTimeOutInSecs.
You can customize EngineStopTimeOutInSecs through the configuration file. By default, this
value is 5 minutes, which means the engine should be shut down within 5 minutes.

Q: What is RethrowTaskExceptions and when should I set RethrowTaskExceptions to


true?
A: If there is an exception thrown while executing tasks, Exchange Load Generator will catch it
and log it if logging is enabled. By setting RethrowTaskExceptions to true, you are telling
Exchange Load Generator to rethrow the task exceptions. Meanwhile, you will have to set
StopOnTaskExceptionThreshold to a nonzero value so that when the exceptions thrown hit this
threshold, it will be thrown.
You will want to set RethrowTaskExceptions to true if you are an API user and want to catch
those exceptions. You have options to implement your own UnhandledExceptionEventHandler
and register it with TaskEngine.UnhandledException. If you are a non-API user, see the next
Question for what will occur if you set RethrowTaskExceptions to true.

Q: Exchange Load Generator just disappears what is occurring?


A: Most likely you have RethrowTaskExceptions set to true. When the exceptions hit the
StopOnTaskExceptionThreshold, it will rethrow the exception, and it goes unhandled. The life
of the process is then controlled by the registry keys
HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\DbgJITDebugLaunchSetting
and
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
when managed exceptions become native after being rethrown.
For detailed information about this, see Enabling JIT-attach Debugging
(http://go.microsoft.com/fwlink/?LinkId=91845) and Microsoft Knowledge Base article 103861,

94
"INFO: Choosing the Debugger That the System Will Spawn" (http://go.microsoft.com/fwlink/?
linkid=3052&kbid=103861).
If you have Exchange Load Generator logging enabled, you can also check the log for a list of
exceptions that have been thrown.

Q: Is Exchange Load Generator supposed to create mailbox users or do users have to be


created before running Exchange Load Generator?
A: Exchange Load Generator has two types of user interface. With LoadGenWin.exe (the
graphical user interface), there is a wizard page for you to define how many users to create for
each mailbox database, and it will create new users if there are not enough existing ones.
With LoadGenCmd.exe (Console), there is no command-line option with which to create users.
Users have to be created before running mailbox initialization or simulation.

Q: Does Exchange Load Generator fill the mailbox like LoadSim did? If so, where is the
user interface to set the size of the mailbox?
A: Exchange Load Generator fills the mailbox in much the same way as LoadSim. You can
configure how many items to create in a certain folder through the <MailboxStoreProfile> tag
within the Exchange Load Generator configuration file. However, these configurations are not
exposed through the user interface so if you are using LoadGenWin, after creating users and
defining user groups, you will have to save the configuration file and manually edit it if you want to
use a custom <MailboxStoreProfile> tag. After editing, you will need to reload it from the Start a
new test page for Exchange Load Generator to pick up the custom settings.

Q: What would you recommend for an index, or catalog size as a percentage of database
size?
A: Standard guidance for index or catalog size is 5 to 10% of the database size. Because of the
limited message set in Exchange Load Generator, we recommend that you allocate 25% of the
database size to accommodate catalog headroom. For additional information about content
indexing storage requirements, see Mailbox Server Storage Design for
Exchange 2007 (http://go.microsoft.com/fwlink/?linkid=106217) or Mailbox Server Storage Design
for Exchange 2010 (http://technet.microsoft.com/en-us/library/dd346703(EXCHG.140).aspx).

Q: How do I simulate heavier volume at certain periods of a simulated day?


A: It can be done by using a concurrency profile which lets you specify what percentage of
users to be used in simulation during a certain period. By default, the concurrency profile has only
one <ConcurrencyListEntry> tag which has 100% concurrency. This means it will run 100%
users. However, you can edit the default <ConcurrencyListEntry> tag or create an additional
<ConcurrencyListEntry> tag with a custom percentage. See the following example in which
100% users will be run during the first four hours, and only 60% of users will be run during the
second four hours.
<ConcurrencyProfile Name="Custom">
<ConcurrencyTimeline>

95
<ConcurrencyListEntry>
<Duration>P0Y0M0DT4H0M0S</Duration>
<ConcurrencyPercent>100</ConcurrencyPercent>
<Label>4 hours at 100%</Label>
</ConcurrencyListEntry>
<ConcurrencyListEntry>
<Duration>P0Y0M0DT4H0M0S</Duration>
<ConcurrencyPercent>60</ConcurrencyPercent>
<Label>4 hours at 60%</Label>
</ConcurrencyListEntry>
</ConcurrencyTimeline>
</ConcurrencyProfile>

Q: In LoadGenWin, I put in all the correct information including target forest, and user
credentials, but I still cannot connect to the topology. What do I have to do?
A: A successful connection requires that you can ping the target forest from the Exchange Load
Generator client. Try the command ping <targetforest> to make sure that it is reachable. If it is
not reachable, you can either substitute with the domain controller name if you can reach domain
controller or you have fix it with your domain name server.
Q: What should I type as remote load generators in LoadGenWin net BIOS name, full
computer name, or an IP address?
A: Any of these will work. But do not type the master client if you do not also intend it to be a
remote load generator. The same applies if you edit the <RemoteProfile> tag directly in the
configuration file. Before you run simulation in remote mode, you need to start LoadGenRemote
service on the remote clients. You can do this by running net start loadgenremote, or from
administrative tools->services window.
A: When you run stress mode against Exchange 2003 (SP1 or later versions) mailbox servers
using more than 32 Exchange Load Generator servers, you will hit a MAPI session limit.
Exchange Server 2003 SP1 imposes a restriction on the number of allowed MAPI sessions per
user. By default, the maximum is 32 sessions.
On the Exchange servers you will see the following event in the event log:
Event Type: Error Event Source: MSExchangeIS Event Category: General Event ID: 9646
Description: Closing Mapi session "/o=Organization/ou=Administrative
Group/cn=Recipients/cn=Recipient" because it exceeded the maximum of 32 objects of type
"session".
In the Exchange Load Generator log, you will see the following exception:
Engine.General Critical: 0 : 4/17/2007 12:19:27 PM -- Caught exception in executeTaskStub:
Microsoft.Mapi.MapiExceptionSessionLimit: MapiExceptionSessionLimit: Unable to make
connection to the server. (hr=0x80040112, ec=1246)
However, you can change the MAPI session limit by modifying a registry key. For more
information about MAPI session limits, see the Microsoft Knowledge Base article 842022, "Event

96
ID 9646 is logged in the application event log of your Exchange Server 2003 computer when a
client opens many MAPI sessions" (http://go.microsoft.com/fwlink/?linkid=3052&kbid=842022).
See the following procedure for changing the registry subkey.

Caution:
Incorrectly editing the registry can cause serious problems that may require that you
reinstall the operating system. Problems that result from editing the registry incorrectly
may be unable to be resolved. Before editing the registry, back up any valuable data.

To set the Maximum Allowed Sessions Per User


1. Start Registry Editor.
2. Locate, and then click to select the following registry subkey:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services|
MSExchangeIS\ParametersSystem.
3. If the Maximum Allowed Sessions Per User does not exist, do the following:
a. On the Edit menu, point to New, and then select DWORD Value.
b. Type Maximum Allowed Sessions Per User as the entry names, and then press
Enter.
4. Right-click Maximum Allowed Sessions Per User, and then click Modify.
5. Click Decimal, type the value that you want to set in the Value data box, and then click
OK.
6. Exit Registry Editor.

Q. Getting error 0xC002100A or 0x80090331 for clients running rpc/http.

A. If you get error 0xC002100A or 0x80090331 for clients running rpc/http you should grab
the update http://support.microsoft.com/kb/948963.

Q. Which ActiveSync Profile do I use?


A. The ActiveSyncVersion is basically a Protocol Version mobile phones use to
communicate with the server. The versions somewhat relate to the Windows Mobile Version.
Because we could have phones with all sorts of versions hitting the CAS server, our protocol
has to be backwards compatible with certain number of old protocol versions. So, for
example, E14 understands V2.5, V12.0, V12.1 and V14.0 versions. But TiSp2 will only
understand V2.5 and below.

It works something like this (dont quote me on the 2.5 one, not quite sure about that one.)

ActiveSyncVersion WM version it relates to Exchange server that can


handle it
V2.5 WM5.5 TiSp2 and above
V12.0 WM6.0 E12RTM and above
V12.1 WM6.1 E12SP1 and above

97
V14.0 WM7.0 E14 and above

Q. Why shouldnt I run Loadgen in a production environment?

A. We have a new clause in the license agreement that forbids use in a live production
environment. Therefore usage for the tool in production is a violation of the license agreement
that you accepted when you installed the tool.

There are many reasons NOT to run Loadgen in a production environment.


1) Potential effect of running load against shared storage which will degrade your
real users experience.
2) Network bandwidth consumption.
3) Starving connection resources on various server roles.
4) Slowing mail delivery as shared hub transports are attempting to keep up with
the load from your live and test users.
5) Possibility of creating users on the same database as your live users and having
to take down this database to perform offline defrag to recover space that was
deleted from the test exercise.
6) Loadgen can reply to REAL mail content inserted into test mailboxes. Which
could result in not only sending a mail that to a DL that includes your board of
directors but also replying to people outside/inside your company (Customers,
Business Partners)

Q. What does stress mode do?


A. Stress mode runs a set number of tasks as quickly as the server can complete them - we
always have that particular number of tasks running, so as one completes, another takes its
place

the data you get back may tell you where a server bottleneck is, but it could also be
bottlenecked on the client

given knowledge about a bottleneck, it's also difficult to translate that into anything useful for
server sizing or capacity planning because the actual workload isn't in any way realistic.

We recommend that you do not use stress mode.

Q. Does Loadgen work with Exchange Portability?


A. Online mode simulation works fine, but there is a known issue with cached mode
simulation that will result in invalid results - it basically will be downloading the entire mailbox
for all of your users when it starts up, so the server will be totally overloaded... We
unfortunately don't have a way to fix this, as the issue is in some libraries that we depend on.

98
Q. Why should LoadBalancing be turned off?
A. If LoadBalancing is set to "true", users will be evenly distributed to remote load generators
at the beginning and Exchange Load Generator will monitor the load on the remote client.
Users will be reduced if the remote client is overloaded, or more users will be assigned if the
remote client is underloaded. If LoadBalancing is set to "false", users will be distributed to
remote load generators evenly, but load balancing will not be done.
The issue is that if all of your clients get overloaded we will logoff users and return them to
the master and we will no longer use them. So at the end of a test you could have 20 users
when you asked for 100.

Q. Loadgen is failing to initialize public folders when PF store is present.


A. Please make sure that the user (the account that you have specified as the directory
access account) has a mailbox somewhere in the topology.

Q. Should I use remoting?


A. We recommend using Load Generators remoting service to disperse load across all
clients. Distributing load in this manor will make the simulation more accurate. You will also
get an aggregated Loadgen report instead of individual reports that you must piece together.
It is also easier from an administrative point. You only have to look at one machine to see if
everyone is behaving. Instead of checking all the individual ones. We have put a lot of effort
into remoting and use it in house for all of our testing.

Q. Can I configure mailboxes with two different profiles?


A. First, you will have to set the multiple action profiles to use a different set of users. To do
this you need to provide an LDAP filter to separate the users between the UserGroups.

This is the line of the XML that you need to have unique for both UserGroups. You will see
that both UserGroups contain this line.

<LdapSearchFilter>(&amp;(objectcategory=person)(objectclass=user)
(homemdb=*))</LdapSearchFilter>
<LdapBaseDn>OU=Users,OU=LoadGen
Objects,DC=YUM,DC=lab</LdapBaseDn>

Next you will have to adjust the MailboxStoreProfile section for both UserGroups in order for
them to have different mailboxes sizes. We have default initialization profiles that match the
action profiles (Light, Average, Heavy, VeryHeavy). When you first set your action profile in
the UI we will set the intialization in that usergroup to match the value of the ActionProfile. We
have a bug that will reset your init settings back to heavy if you save the file in the UI or adjust
any values after you have made these changes. Below are the default mailbox initialization
settings.

<MailboxStoreProfile Name="Heavy">
<ExtendedProperties />
<InboxUnreadPercentage>0</InboxUnreadPercentage>
<NewFolderUnreadPercentage>0</NewFolderUnreadPercentage>
<BuildInboxRules>true</BuildInboxRules>

99
<FixUpInboxRules>false</FixUpInboxRules>
<InboxMessageCount>1640</InboxMessageCount>
<DeletedMessageCount>150</DeletedMessageCount>
<NewFolderCount>5</NewFolderCount>
<NewFolderMessageCount>100</NewFolderMessageCount>
<SmartFolderCount>3</SmartFolderCount>
<InboxRuleCount>17</InboxRuleCount>
<AppointmentCount>25</AppointmentCount>
<ContactCount>30</ContactCount>
<UseOrdinalFolderName>false</UseOrdinalFolderName>
<InitializeFreeBusy>true</InitializeFreeBusy>
<InitializeIndices>true</InitializeIndices>
<InitializeCachedModeIndices>false</InitializeCachedModeIndices>
<MessagePercentageRecent>0</MessagePercentageRecent>
<MessageRecentContentTimeFrame>-
P0Y0M0DT0H0M0S</MessageRecentContentTimeFrame>

<MessageContentTimeFrame>P0Y2M0DT0H0M0S</MessageContentTimeFrame>
<AppointmentPercentageRecent>0</AppointmentPercentageRecent>
<AppointmentRecentContentTimeFrame>-
P0Y0M0DT0H0M0S</AppointmentRecentContentTimeFrame>

<AppointmentContentTimeFrame>P1Y0M0DT0H0M0S</AppointmentContentTimeFr
ame>
<TaskCount>0</TaskCount>
</MailboxStoreProfile>

If you want to init with other profile sizes you can simply do the following:
1. Remove the entire MailboxStoreProfile section
2. Replace with <MailboxStoreProfile Name=<profile> />
3. This profile value can be set to Light, Average, Heavy or VeryHeavy

Q. Why dont the user profiles use reply/forward?


A. We are not doing reply/forward because it doesn't really add anything to the simulation
from a load perspective. The flow of messages is what matters, and we are influencing that
via sendmail and requestmeeting. We don't cause mailflow activity based on the content of
mailboxes, we don't have a huge amount of mailflow activity at the start of the test as we
process all of the unread mail that was placed there via init (this is also why unread
messages = 0 in the init profiles), meaning that we can potentially get to a stable state faster.

Q. How do I run load using a subset of my total users?

A. This can be done through the "Concurrency Profile". Set the concurrency profile from
100% to 20% and you will only use 20% of the active users in your LDAP Search Query.

- <ConcurrencyProfile Name="Heavy">
- <ConcurrencyTimeline>
- <ConcurrencyListEntry>
<Duration>P0Y0M1DT0H0M0S</Duration>

100
<ConcurrencyPercent>100</ConcurrencyPercent>
<Label>Full day at 100%</Label>
</ConcurrencyListEntry>
</ConcurrencyTimeline>
</ConcurrencyProfile>

101
Copyright
The information contained in this document represents the current view of Microsoft Corporation
on the issues discussed as of the date of publication. Because Microsoft must respond to
changing market conditions, it should not be interpreted to be a commitment on the part of
Microsoft, and Microsoft cannot guarantee the accuracy of any information presented after the
date of publication.
This White Paper is for informational purposes only. MICROSOFT MAKES NO WARRANTIES,
EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS DOCUMENT.
Complying with all applicable copyright laws is the responsibility of the user. Without limiting the
rights under copyright, no part of this document may be reproduced, stored in or introduced into a
retrieval system, or transmitted in any form or by any means (electronic, mechanical,
photocopying, recording, or otherwise), or for any purpose, without the express written permission
of Microsoft Corporation.
Microsoft may have patents, patent applications, trademarks, copyrights, or other intellectual
property rights covering subject matter in this document. Except as expressly provided in any
written license agreement from Microsoft, the furnishing of this document does not give you any
license to these patents, trademarks, copyrights, or other intellectual property.
Unless otherwise noted, the companies, organizations, products, domain names, e-mail
addresses, logos, people, places, and events depicted in examples herein are fictitious. No
association with any real company, organization, product, domain name, e-mail address, logo,
person, place, or event is intended or should be inferred.
2010 Microsoft Corporation. All rights reserved.
Microsoft, MS-DOS, Windows, Windows Server, Windows Vista, Active Directory, ActiveSync,
ActiveX, Entourage, Excel, FrontPage, Hotmail, JScript, Microsoft Press, MSDN, MSN, Outlook,
SharePoint, Visual Basic, Visual C++, Visual Studio, Win32, Windows Mobile, Windows NT, and
Windows Server System are either registered trademarks or trademarks of Microsoft Corporation
in the United States and/or other countries.
All other trademarks are property of their respective owners.

102

Das könnte Ihnen auch gefallen