Citrix Storefront - Performance Testing and Tuning - Part 3 - PerfMon Counters, browser logon

01 Jun 2017

In looking at the performance of the Citrix Storefront Server, one of the thing I want is to understand what Storefront is doing at each stage of a session life cycle. There are two session-types that I’m curious about, a web browser based connection and a PNA connection. I’m going to examine a web browser based connection first.

Using my powershell script to simulate a user connection I put ‘pauses’ between each stage. I then setup Perfmon to capture counters from the following objects:

Citrix Dazzle Resources Controller\Image Response Whole Body  Calls / second
Citrix Dazzle Resources Controller\Image Response Whole Body Average Time (Microseconds)
Citrix Dazzle Resources Controller\List Sessions Whole Body  Calls / second
Citrix Dazzle Resources Controller\List Sessions Whole Body Average Time (Microseconds)
Citrix Dazzle Resources Controller\List Whole Body  Calls / second
Citrix Dazzle Resources Controller\List Whole Body Average Time (Microseconds)
Citrix Dazzle Resources Controller\ListWithoutAutoProvision Whole Body  Calls / second
Citrix Dazzle Resources Controller\ListWithoutAutoProvision Whole Body Average Time (Microseconds)
Citrix Dazzle Resources Controller\Update Resources Image Cache  Calls / second
Citrix Dazzle Resources Controller\Update Resources Image Cache Average Time (Microseconds)
Citrix Delegated Kerberos Authentication\Authenticate  Calls / second
Citrix Delegated Kerberos Authentication\Authenticate Average Time (Microseconds)
Citrix Delivery Services Web Application(authservice:tokenservices:post:_citrix_authentication)\Controller Action  Calls / second
Citrix Delivery Services Web Application(authservice:tokenservices:post:_citrix_authentication)\Controller Action Average Time (Microseconds)
Citrix Delivery Services Web Application(citrixfederationauthentication:authenticate:post:_citrix_authentication)\Controller Action  Calls / second
Citrix Delivery Services Web Application(citrixfederationauthentication:authenticate:post:_citrix_authentication)\Controller Action Average Time (Microseconds)
Citrix Delivery Services Web Application(dazzleresources:launchica:post:_citrix_store)\Controller Action  Calls / second
Citrix Delivery Services Web Application(dazzleresources:launchica:post:_citrix_store)\Controller Action Average Time (Microseconds)
Citrix Delivery Services Web Application(dazzleresources:list:get:_citrix_store)\Controller Action  Calls / second
Citrix Delivery Services Web Application(dazzleresources:list:get:_citrix_store)\Controller Action Average Time (Microseconds)
Citrix Delivery Services Web Application(endpoints:endpoints:get:_agservices)\Controller Action  Calls / second
Citrix Delivery Services Web Application(endpoints:endpoints:get:_agservices)\Controller Action Average Time (Microseconds)
Citrix Delivery Services Web Application(endpoints:endpoints:get:_citrix_authentication)\Controller Action  Calls / second
Citrix Delivery Services Web Application(endpoints:endpoints:get:_citrix_authentication)\Controller Action Average Time (Microseconds)
Citrix Delivery Services Web Application(endpoints:endpoints:get:_citrix_configuration)\Controller Action  Calls / second
Citrix Delivery Services Web Application(endpoints:endpoints:get:_citrix_configuration)\Controller Action Average Time (Microseconds)
Citrix Delivery Services Web Application(endpoints:endpoints:get:_citrix_roaming)\Controller Action  Calls / second
Citrix Delivery Services Web Application(endpoints:endpoints:get:_citrix_roaming)\Controller Action Average Time (Microseconds)
Citrix Delivery Services Web Application(endpoints:endpoints:get:_citrix_store)\Controller Action  Calls / second
Citrix Delivery Services Web Application(endpoints:endpoints:get:_citrix_store)\Controller Action Average Time (Microseconds)
Citrix Delivery Services Web Application(protocols:choices:post:_citrix_authentication)\Controller Action  Calls / second
Citrix Delivery Services Web Application(protocols:choices:post:_citrix_authentication)\Controller Action Average Time (Microseconds)
Citrix Delivery Services Web Application(selfserviceaccountmanagement:allowselfserviceaccountmanagement:get:_citrix_authentication)\Controller Action  Calls / second
Citrix Delivery Services Web Application(selfserviceaccountmanagement:allowselfserviceaccountmanagement:get:_citrix_authentication)\Controller Action Average Time (Microseconds)
Citrix Delivery Services Web Application(tokenvalidation:tokenvalidation:get:_citrix_authentication)\Controller Action  Calls / second
Citrix Delivery Services Web Application(tokenvalidation:tokenvalidation:get:_citrix_authentication)\Controller Action Average Time (Microseconds)
Citrix Receiver for Web\Get Ica file  Calls / second
Citrix Receiver for Web\Get Ica file Average Time (Microseconds)
Citrix Receiver for Web\Get icon  Calls / second
Citrix Receiver for Web\Get icon Average Time (Microseconds)
Citrix Receiver for Web\Get launch status  Calls / second
Citrix Receiver for Web\Get launch status Average Time (Microseconds)
Citrix Receiver for Web\List resources  Calls / second
Citrix Receiver for Web\List resources Average Time (Microseconds)
Citrix Receiver for Web\Login attempts  Calls / second
Citrix Receiver for Web\Login attempts Average Time (Microseconds)
Citrix Resources Common\Find all resources  Calls / second
Citrix Resources Common\Find all resources Average Time (Microseconds)
Citrix Resources Common\Find resource by id  Calls / second
Citrix Resources Common\Find resource by id Average Time (Microseconds)
Citrix Resources Common\ICA Launch  Calls / second
Citrix Resources Common\ICA Launch Average Time (Microseconds)
Citrix Xml Service Communication(10.10.10.11)\Network Traffic  Calls / second
Citrix Xml Service Communication(10.10.10.11)\Network Traffic Average Time (Microseconds)
Citrix Xml Service Communication(10.10.10.12)\Network Traffic  Calls / second
Citrix Xml Service Communication(10.10.10.12)\Network Traffic Average Time (Microseconds)
Citrix Xml Service Communication(10.10.10.13)\Network Traffic  Calls / second
Citrix Xml Service Communication(10.10.10.13)\Network Traffic Average Time (Microseconds)
Citrix Xml Service Communication(10.10.10.14)\Network Traffic  Calls / second
Citrix Xml Service Communication(10.10.10.14)\Network Traffic Average Time (Microseconds)
Citrix Xml Service Communication(&5.bottheory.local)\Network Traffic  Calls / second
Citrix Xml Service Communication(&5.bottheory.local)\Network Traffic Average Time (Microseconds)
Citrix Xml Service Communication(XenApp65t.bottheory.local)\Network Traffic  Calls / second
Citrix Xml Service Communication(XenApp65t.bottheory.local)\Network Traffic Average Time (Microseconds

I’ve added 6 farms to the storefront server to examine the load “in a real world” environment as Storefront does do some magic with concurrent enumeration. What I love that Citrix has done, is actually time the transactions AND gives you the ‘rate’ the transactions are occurring at. This will make it much easier to baseline what your load is vs how I had to do it to measure the ‘rates’ for Web Interface.


$stage = “Initial Connection”
$store = “http://storefront.bottheory.local/Citrix/StoreWeb/”

So for a web browser based connection, I ‘connected’ to the site and saw nothing. Storefront does very little work for the initial connection.


$stage = “Client Configuration”
$store + “Home/Configuration”

Result:

<clientSettings
	xmlns='http://citrix.com/delivery-services/webAPI/2-6/clientConfig'>
	<session timeout="600" />
	<authManager getUsernameURL="Authentication/GetUserName" logoffURL="Authentication/Logoff" changeCredentialsURL="ExplicitAuth/GetChangeCredentialForm" loginFormTimeout="5" webviewReturnURL="ExplicitAuth/Bounce" webviewResumeURL="ExplicitAuth/ResumeForms" allowSelfServiceAccountManagementURL="ExplicitAuth/AllowSelfServiceAccountManagement" />
	<storeProxy keepAliveURL="Home/KeepAlive">
		<resourcesProxy listURL="Resources/List" resourceDetails="default" />
		<sessionsProxy listAvailableURL="Sessions/ListAvailable" disconnectURL="Sessions/Disconnect" logoffURL="Sessions/Logoff" />
		<clientAssistantProxy getDetectionTicketURL="ClientAssistant/GetDetectionTicket" getDetectionStatusURL="ClientAssistant/GetDetectionStatus" />
	</storeProxy>
	<pluginAssistant enabled="true" upgradeAtLogin="false" showAfterLogin="false">
		<win32 path="http://downloadplugins.citrix.com/Windows/CitrixReceiverWeb.exe" />
		<macOS path="http://downloadplugins.citrix.com/Mac/CitrixReceiverWeb.dmg" minimumSupportedOSVersion="10.6" />
		<html5 enabled="Fallback" platforms="Firefox;Chrome;Version/([6-9]|\d\d).*Safari;MSIE \d\d;Trident/([6-9]|\d\d);Android;iPad;iPhone;iPod;" launchURL="clients/HTML5Client/src/SessionWindow.html" preferences="" singleTabLaunch="false" chromeAppOrigins="chrome-extension://haiffjcadagjlijoggckpgfnoeiflnem" chromeAppPreferences="" />
		<protocolHandler enabled="true" platforms="(Macintosh|Windows NT).*((Firefox/((5[3-9]|[6789][0-9])|\d\d\d))|(Chrome/((4[2-9]|[56789][0-9])|\d\d\d)))(?!.*Edge)" skipDoubleHopCheckWhenDisabled="false" />
	</pluginAssistant>
	<userInterface autoLaunchDesktop="true" multiClickTimeout="3" enableAppsFolderView="true">
		<workspaceControl enabled="true" autoReconnectAtLogon="true" logoffAction="disconnect" showReconnectButton="true" showDisconnectButton="true" />
		<receiverConfiguration enabled="true" downloadURL="ServiceRecord/GetDocument/receiverconfig.cr" />
		<uiViews showDesktopsView="true" showAppsView="true" defaultView="auto" />
		<appShortcuts enabled="false" allowSessionReconnect="true" />
	</userInterface>
	<featureToggles>
		<feature name="Citrix.DeliveryServices.WingImpl.AlwaysOnTracing" enabled="True" />
		<feature name="Citrix.DeliveryServices.DazzleResources.Web.AlwaysOnTracing" enabled="True" />
		<feature name="Citrix.DeliveryServices.DazzleResourcesController.AnonymousPrelaunch" enabled="True" />
		<feature name="Citrix.StoreFront.Roaming.NetScalerConfiguration" enabled="True" />
		<feature name="Citrix.DeliveryServices.Admin.NetScalerImport" enabled="True" />
		<feature name="Citrix.DeliveryServices.WebUI.ClientDetection.IfRequiredByApps" enabled="True" />
		<feature name="Citrix.DeliveryServices.WebUI.WebviewCredentialSupport" enabled="True" />
		<feature name="Citrix.DeliveryServices.ZonePreference" enabled="True" />
		<feature name="Citrix.StoreFront.Authentication.Saml" enabled="True" />
		<feature name="Citrix.StoreFront.AuthenticationToken.Jwt" enabled="False" />
		<feature name="Citrix.StoreFront.Authentication.Cloud" enabled="False" />
		<feature name="Citrix.StoreFront.XenMobile.SmartAccess" enabled="True" />
		<feature name="Citrix.DeliveryServices.Authentication.SelfServiceAccountManagement" enabled="True" />
		<feature name="Citrix.StoreFront.MultipleIISWebsites" enabled="True" />
		<feature name="Citrix.DeliveryServices.HdxOverUdp" enabled="True" />
		<feature name="Citrix.StoreFront.WebAndSaaSApps" enabled="False" />
		<feature name="StoreFrontCloudAdmin" enabled="False" />
		<feature name="StoreFrontCloudDeployment" enabled="False" />
		<feature name="StoreFrontGWaaS_Product_RestrictPop" enabled="False" />
		<feature name="StoreFrontMultiTenantBrokerService" enabled="False" />
	</featureToggles>
</clientSettings>

This request is to get the client configuration. Essentially, it pulls down an xml file from the store containing important links to various locations in Storefront. Again, no perf counter seems to occur and it doesn't seem to generate any load.


$stage = “Get Authentication Methods”
$store + “Resources/List”

 

<#
https://citrix.github.io/storefront-sdk/requests/#authentication-methods
Note
The client must first make a POST request to /Resources/List. Since the user is not yet authenticated, this returns a challenge in the form of a CitrixWebReceiver- Authenticate header with the GetAuthMethods URL in the location field.
#

So this command starts to get a little exciting. It's a bit of a misnomer to call it "Resources/List" as it doesn't actually return resources, yet. It returns the challenge to logon. We get our first Peformance Counter hit.

The four counters that register are

Citrix Receiver for Web\List resources Calls / second
Citrix Receiver for Web\List resources Average Time (microseconds)
Citrix Delivery Services Web Application(dazzleresources:list:get:_citrix_store)\Controller Action Calls / second
Citrix Delivery Services Web Application(dazzleresources:list:get:_citrix_store)\Controller Action Average Time (Microseconds)

Results:

List resources Calls / second: 1
List resources Average Time (microseconds): 3,714
(dazzleresources:list:get:_citrix_store)\Controller Action Average Time (Microseconds): 607
(dazzleresources:list:get:_citrix_store)\Controller Action Calls / second: 1

$stage = “Get Auth Methods”
$store + “Authentication/GetAuthMethods”

Response:

<authMethods xmlns="http://citrix.com/delivery-services/webAPI/2-6/authMethods">

    <method name="ExplicitForms" url="ExplicitAuth/Login"/>

    <method name="IntegratedWindows" url="DomainPassthroughAuth/Login"/>

    <method name="CitrixAuth" url="CitrixAuth/Login"/>

</authMethods>

Another exciting call. This call hits these four performance counters:

Citrix Delivery Services Web Application(authservice:tokenservices:post:_citrix_authentication)\Controller Action Calls / second
Citrix Delivery Services Web Application(authservice:tokenservices:post:_citrix_authentication)\Controller Action Average Time (Microseconds)
Citrix Delivery Services Web Application(protocols:choices:post:_citrix_authentication)\Controller Action Calls / second
Citrix Delivery Services Web Application(protocols:choices:post:_citrix_authentication)\Controller Action Average Time (Microseconds)

Results:

(protocols:choices:post:_citrix_authentication)\Controller Action Calls / second: 1
(protocols:choices:post:_citrix_authentication)\Controller Action Average Time (Microseconds) : 488
(authservice:tokenservices:post:_citrix_authentication)\Controller Action Calls / second: 1
(authservice:tokenservices:post:_citrix_authentication)\Controller Action Average Time (Microseconds): 138

The Controller Action Calls /second was "1", obviously I'm doing just a single test. For the action average time I got 711 microseconds. Extremely fast.


$stage = “Domain Pass-Through and Smart Card Authentication”
$store + “DomainPassthroughAuth/Login”

Response:

<?xml version="1.0" encoding="UTF-8"?>
<AuthenticationStatus xmlns="http://citrix.com/delivery-services/webAPI/2-6/authStatus">
  <Result>success</Result>
  <AuthType>IntegratedWindows</AuthType>
  
</AuthenticationStatus

Two more perf counters hit (rate + time):

Citrix Delivery Services Web Application(citrixfederationauthentication:authenticate:post:_citrix_authentication)\Controller Action Calls / second
Citrix Delivery Services Web Application(citrixfederationauthentication:authenticate:post:_citrix_authentication)\Controller Action Average Time (Microseconds)

Results:

(citrixfederationauthentication:authenticate:post:_citrix_authentication)\Controller Action Calls / second: 1
(citrixfederationauthentication:authenticate:post:_citrix_authentication)\Controller Action Average Time (Microseconds): 4,850

$stage = “Resource Enumeration”
$store + “Resources/List”

Response:

{
	"isSubscriptionEnabled": true,
	"isUnauthenticatedStore": false,
	"resources": [
		{
			"clienttypes": [
				"ica30",
				"rdp"
			],
			"description": "MS Access 2010",
			"iconurl": "Resources/Icon/L0NpdHJpeC9TdG9yZS9yZXNvdXJjZXMvdjIvUVRkRE1EZzFORFUwTVVaRE5UZzJSVEkyTVVOQ09ETTFPRU5CUVRRMk5qUTFOakZCTmtZME1nLS0vaW1hZ2U-?size=128",
			"id": "CTX65.Office - Access 2010",
			"launchstatusurl": "Resources/GetLaunchStatus/QUhTQ1RYNjUuT2ZmaWNlIC0gQWNjZXNzIDIwMTAgLSBTb3V0aA--",
			"launchurl": "Resources/LaunchIca/QUhTQ1RYNjUuT2ZmaWNlIC0gQWNjZXNzIDIwMTAgLSBTb3V0aA--.ica",
			"name": "Access 2010",
			"path": "\\Office\\",
			"shortcutvalidationurl": "Resources/ValidateAppShortcutLaunch/QUhTQ1RYNjUuT2ZmaWNlIC0gQWNjZXNzIDIwMTAgLSBTb3V0aA--",
			"subscriptionurl": "Resources/Subscription/QUhTQ1RYNjUuT2ZmaWNlIC0gQWNjZXNzIDIwMTAgLSBTb3V0aA--"
		},
	]

This call returns a list of all the resources for which you have access. The counters important to this call are:

Citrix Receiver for Web\List resources Average Time (microseconds)
Citrix Dazzle Resources Controller\List Whole Body Calls / second
Citrix Dazzle Resources Controller\List Whole Body Average Time (Microseconds)
Citrix Delivery Services Web Application(authservice:tokenservices:post:_citrix_authentication)\Controller Action Calls / second
Citrix Delivery Services Web Application(dazzleresources:list:get:_citrix_store)\Controller Action Calls / second
Citrix Delivery Services Web Application(authservice:tokenservices:post:_citrix_authentication)\Controller Action Average Time (Microseconds)
Citrix Delivery Services Web Application(dazzleresources:list:get:_citrix_store)\Controller Action Average Time (Microseconds)
Citrix Receiver for Web\List resources Calls / second
Citrix Xml Service Communication(10.10.10.11)\Network Traffic Calls / second
Citrix Xml Service Communication(10.10.10.11)\Network Traffic Average Time (Microseconds)
Citrix Xml Service Communication(10.10.10.12)\Network Traffic Calls / second
Citrix Xml Service Communication(10.10.10.12)\Network Traffic Average Time (Microseconds)
Citrix Xml Service Communication(10.10.10.13)\Network Traffic Calls / second
Citrix Xml Service Communication(10.10.10.13)\Network Traffic Average Time (Microseconds)
Citrix Xml Service Communication(10.10.10.14)\Network Traffic Calls / second
Citrix Xml Service Communication(10.10.10.14)\Network Traffic Average Time (Microseconds)
Citrix Xml Service Communication(&5.bottheory.local)\Network Traffic Calls / second
Citrix Xml Service Communication(&5.bottheory.local)\Network Traffic Average Time (Microseconds)
Citrix Xml Service Communication(XenApp65t.bottheory.local)\Network Traffic Calls / second
Citrix Xml Service Communication(XenApp65t.bottheory.local)\Network Traffic Average Time (Microseconds)

We have lots of exciting things happening here. We're reaching back and querying the XML brokers, some kind of authentication occurs, etc.

The results of these counters were:

Citrix Receiver for Web\List resources Average Time (microseconds) : 249,172
Citrix Dazzle Resources Controller\List Whole Body Calls / second : 1
Citrix Dazzle Resources Controller\List Whole Body Average Time (Microseconds) : 182,206
(authservice:tokenservices:post:_citrix_authentication)\Controller Action Calls / second : 1
(dazzleresources:list:get:_citrix_store)\Controller Action Calls / second : 2
(authservice:tokenservices:post:_citrix_authentication)\Controller Action Average Time (Microseconds) : 4,549
(dazzleresources:list:get:_citrix_store)\Controller Action Average Time (Microseconds) : 8,391
Citrix Receiver for Web\List resources Calls / second : 1
Citrix Xml Service Communication(10.10.10.11)\Network Traffic Calls / second : 1
Citrix Xml Service Communication(10.10.10.11)\Network Traffic Average Time (Microseconds) : 0
Citrix Xml Service Communication(10.10.10.12)\Network Traffic Calls / second : 1
Citrix Xml Service Communication(10.10.10.12)\Network Traffic Average Time (Microseconds) : 36,820
Citrix Xml Service Communication(10.10.10.13)\Network Traffic Calls / second : 1
Citrix Xml Service Communication(10.10.10.13)\Network Traffic Average Time (Microseconds) : 37,622
Citrix Xml Service Communication(10.10.10.14)\Network Traffic Calls / second : 1
Citrix Xml Service Communication(10.10.10.14)\Network Traffic Average Time (Microseconds) : 43,121
Citrix Xml Service Communication(&5.bottheory.local)\Network Traffic Calls / second : 1
Citrix Xml Service Communication(&5.bottheory.local)\Network Traffic Average Time (Microseconds) : 95,575
Citrix Xml Service Communication(XenApp65t.bottheory.local)\Network Traffic Calls / second : 1
Citrix Xml Service Communication(XenApp65t.bottheory.local)\Network Traffic Average Time (Microseconds) : 149,888

With these counters we can see how long it took the brokers to respond. My broker that has a few hundred applications took the longest, followed by a broker of an older farm with dozens of apps, then three where only a single app each is published from them. I got a 0.0 for enumeration for one service. I'm not sure what that's about (maybe it exceeded enumeration timeout and is now excluded?). Total time to list resources was 0.249 seconds.


$stage = “Get User Name”
$store + “Authentication/GetUserName”

Response:

Trentent Tye

This call simply returns your display name (or logon name if no display name is specified).

Two counters were hit:

Citrix Delivery Services Web Application(authservice:tokenservices:post:_citrix_authentication)\Controller Action  Calls / second
Citrix Delivery Services Web Application(tokenvalidation:tokenvalidation:get:_citrix_authentication)\Controller Action Average Time (Microseconds)
Citrix Delivery Services Web Application(authservice:tokenservices:post:_citrix_authentication)\Controller Action Average Time (Microseconds)

The results of these counters were:

(tokenvalidation:tokenvalidation:get:_citrix_authentication)\Controller Action  Calls / second : 2
(authservice:tokenservices:post:_citrix_authentication)\Controller Action  Calls / second : 1
(tokenvalidation:tokenvalidation:get:_citrix_authentication)\Controller Action Average Time (Microseconds) : 2,200
(authservice:tokenservices:post:_citrix_authentication)\Controller Action Average Time (Microseconds) : 4,551

$stage = “AllowSelfServiceAccountManagement”
$store + “ExplicitAuth/AllowSelfServiceAccountManagement”

Response:

<?xml version="1.0" encoding="UTF-8"?>
<SelfServiceAccountManagementStatus xmlns="http://citrix.com/delivery-services/webAPI/3-7/selfServiceAccountManagementStatus">
  <AllowSelfServiceAccountManagement>False</AllowSelfServiceAccountManagement>
</SelfServiceAccountManagementStatus

This call appears to return True or False.

Citrix Delivery Services Web Application(selfserviceaccountmanagement:allowselfserviceaccountmanagement:get:_citrix_authentication)\Controller Action  Calls / second
Citrix Delivery Services Web Application(selfserviceaccountmanagement:allowselfserviceaccountmanagement:get:_citrix_authentication)\Controller Action Average Time (Microseconds)
Citrix Delivery Services Web Application(authservice:tokenservices:post:_citrix_authentication)\Controller Action Average Time (Microseconds)
Citrix Delivery Services Web Application(authservice:tokenservices:post:_citrix_authentication)\Controller Action  Calls / second

The results of these counters were:

(selfserviceaccountmanagement:allowselfserviceaccountmanagement:get:_citrix_authentication)\Controller Action  Calls / second : 2
(selfserviceaccountmanagement:allowselfserviceaccountmanagement:get:_citrix_authentication)\Controller Action Average Time (Microseconds) : 2,247
(authservice:tokenservices:post:_citrix_authentication)\Controller Action  Calls / second : 1
(authservice:tokenservices:post:_citrix_authentication)\Controller Action Average Time (Microseconds) : 6,014

$stage = “Download all the icons”
$store + $iconurl

Response:

<downloads all icon files>

This call hits the following counters:

Citrix Receiver for Web\Get icon Average Time (Microseconds)
Citrix Receiver for Web\Get icon Calls / second

The results of these counters were:

Citrix Receiver for Web\Get icon Average Time (Microseconds) : 285.351
Citrix Receiver for Web\Get icon Calls / second : 152.259

$stage = “ICA Launch.GetLaunchStatus”
$store + $appToLaunch.launchstatusurl

Response:

 {"fileFetchUrl":null,"status":"success"}

This call hits the following counters:

Citrix Receiver for Web\Get launch status Calls / second
Citrix Receiver for Web\Get launch status Average Time (Microseconds)
Citrix Delivery Services Web Application(dazzleresources:launchica:post:_citrix_store)\Controller Action Calls / second
Citrix Delivery Services Web Application(dazzleresources:launchica:post:_citrix_store)\Controller Action Average Time (Microseconds)
Citrix Xml Service Communication(10.10.10.11)\Network Traffic Calls / second
Citrix Xml Service Communication(10.10.10.11)\Network Traffic Average Time (Microseconds)

The results of these counters were:

Citrix Receiver for Web\Get launch status Calls / second : 1
Citrix Receiver for Web\Get launch status Average Time (Microseconds) : 152,721
Citrix Delivery Services Web Application(dazzleresources:launchica:post:_citrix_store)\Controller Action Calls / second : 1
Citrix Delivery Services Web Application(dazzleresources:launchica:post:_citrix_store)\Controller Action Average Time (Microseconds) : 5,091
Citrix Xml Service Communication(10.10.10.11)\Network Traffic Calls / second:  2
Citrix Xml Service Communication(10.10.10.11)\Network Traffic Average Time (Microseconds) : 65,709

Storefront will only fetch the status for the application from the broker that the application belongs. If I run this query multiple times, hitting different brokers, the XML service communication populates more information. The information here can be useful for you to find which broker is getting hit the most by looking at the "Network Traffic Calls / second" and you can find whether it's overloaded by the "Network Traffic Average Time" being a number that grows as your load grows. As with everything, it's probably best to get some "base" numbers when load is low and then again when load is high to get your range.


$stage = “ICA Launch.LaunchIca”
$store + $appToLaunch.launchurl

Response:

[Encoding]
InputEncoding=UTF8

[WFClient]
ProxyFavorIEConnectionSetting=Yes
ProxyTimeout=30000
ProxyType=Auto
ProxyUseFQDN=Off
RemoveICAFile=yes
TransparentKeyPassthrough=Local
TransportReconnectEnabled=On
Version=2
VirtualCOMPortEmulation=On

[ApplicationServers]
Microsoft Office - Word=

[Microsoft Office - Word]
Address=10.1.1.89.52:1494
AutologonAllowed=On
BrowserProtocol=HTTPonTCP
CGPAddress=*:2598
ClientAudio=Off
DesiredColor=8
DesiredHRES=0
DesiredVRES=0
DoNotUseDefaultCSL=On
FontSmoothingType=0
HDXoverUDP=Off
InitialProgram=#Microsoft Office - Word
Launcher=WI
LaunchReference=JR4Y0nuCM8XcFYK9Vx5O+PO2dWcIJNM=
LocHttpBrowserAddress=!
LongCommandLine=
LPWD=234
NRWD=46
ProxyTimeout=30000
ProxyType=Auto
SessionsharingKey=-c17essqKrAujaDa2N
SFRAllowed=Off
SSLEnable=Off
startSCD=1496347847617
Title=Microsoft Office - Word
TransportDriver=TCP/IP
TRWD=0
TWIMode=On
UseLocalUserAndPassword=On
WinStationDriver=ICA 3.0

[Compress]
DriverNameWin16=pdcompw.dll
DriverNameWin32=pdcompn.dll

[EncRC5-0]
DriverNameWin16=pdc0w.dll
DriverNameWin32=pdc0n.dll

[EncRC5-128]
DriverNameWin16=pdc128w.dll
DriverNameWin32=pdc128n.dll

[EncRC5-40]
DriverNameWin16=pdc40w.dll
DriverNameWin32=pdc40n.dll

[EncRC5-56]
DriverNameWin16=pdc56w.dll
DriverNameWin32=pdc56n.dll

We get an ICA file. The performance counters that are important:

Citrix Delivery Services Web Application(dazzleresources:launchica:post:_citrix_store)\Controller Action Calls / second : 1
Citrix Delivery Services Web Application(dazzleresources:launchica:post:_citrix_store)\Controller Action Average Time (Microseconds) : 5,453
Citrix Receiver for Web\Get Ica file Calls / second : 1
Citrix Receiver for Web\Get Ica file Average Time (Microseconds) : 1,255,237
Citrix Xml Service Communication(10.10.10.14)\Network Traffic Calls / second : 2
Citrix Xml Service Communication(10.10.10.14)\Network Traffic Average Time (Microseconds) : 530,153

 


Final results:

Taking all the operations and the time it took, I sorted the list according to duration.

The following operations list the total duration of that specific task:

Get Ica file
List resources
List Whole Body
Get launch status

Excluding them shows us the sub-tasks that actually consumed the majority of the time spent:

The XML communications is what consumes the majority of the processing time. The items starting in 'brackets ()' are the Citrix Storefront processing time that it spent. Being in the single "thousands" of microseconds is super fast. This essentially shows us that it takes next to no time at all for Storefront to execute the tasks that it needs.


Analysis:

Storefront has some great new performance counters that can help you determine your pain points. Access to Citrix is usually talked about in terms of 'rate' so the per-second and average time counters are excellent in helping determine what is the component taking so long to do whatever task. The breaking down of how long individual XML brokers take is a HUGE plus as you should be able to accurately gauge which Citrix FARM is now causing slowness in logon, enumeration or launching for your users.