Tuesday, June 10, 2014

AppV 5 Shared Content Store performance profiled vs. local disk

We are looking to utilize AppV 5's shared content store and one of the things I was interested in was knowing what kind of overhead network performance may vs. local disk.  What I have is a physical server with 3x300GB 10,000 RPM SAS drives in a RAID-5 vs. a CIFS share on SSD.  The catch about the CIFS share is it is 300 kilometers (200 miles) away in another city.  I used this share as I don't have another share local to the physical box and this brings the performance of the share down, but it's still faster than the disk.  The IOMETER readings for the Shared Content Store and the local disk hosting the PackageInstallationRoot are:

Local Disk (D:)
IOPS     MB/s  Avg IO/s  Max IO latency  %CPU
1324.44  5.43  24.123    451.5146        0.50%

CIFS Share
2803.2  11.48  11.41     4878.02         3.96%

IOMeter settings was 100% read with 4k transfer sizes

The CIFS share is 2x faster on average, pulling 2803 IOPS vs 1324.  Bandwidth of the CIFS share is faster as well, 11.48MB/s vs. 5.43MB/s for the local disk.

To test the performance I did the following, I loaded an AppV 5 application to disk, I then wrote a AutoIT script to get the start time, launch the program, wait for the login screen, once the login screen is visible get the finish time.  I then stopped and started the appvclient as this ensures nothing is cached in RAM and ran the AutoIT script again.  I did this thirty times.  I then turned on Shared Content Store (SCS) and loaded the package in that manner and retested.  The results are (average of all 30 runs):

Local Disk: 9.6s
SCS: 9.7s

For the 30 runs the Local Disk deviated +/- 0.2s from average so the range was from 9.4s to 9.8s.

For the SCS the deviation was much bigger, probably to be expected when you're pulling from a file share 6ms away across a shared pipe.  Deviation on the network was:
+/- 1.85s with a range from 8.2s to 11.9s.  Amazingly, there were numerous runs where the network bested the local disk under 9.4s for launch time.  I'm sure if the SCS was local we'd get even more consistent performance and probably even faster performance.  A local server to the share gets about 8x better IOMeter numbers.

Now, how about when the application has already been launched so files are cached?  Results (average of all 30 runs):

Local Disk: 4.8s
SCS: 4.8s

Local Disk deviation/range: +/- 1.4s, range 3.5-6.3s
SCS deviation/range: +/- 1.85s, range 3.4s-7.1s

Again, the SCS has a bigger range but again pulls ahead of the local disk numerous times.

A curious thing I found was that after the 14th run in the loop the times improved greatly:
Disk Start Finish Delta
Local D 15:58.0 16:10.7 00:12.7
Local D 16:10.9 16:17.1 00:06.2
Local D 16:17.2 16:23.4 00:06.3
Local D 16:23.5 16:29.6 00:06.1
Local D 16:29.7 16:35.9 00:06.2
Local D 16:36.0 16:42.1 00:06.1
Local D 16:42.2 16:48.2 00:06.1
Local D 16:48.3 16:54.5 00:06.2
Local D 16:54.6 17:01.5 00:06.9
Local D 17:01.5 17:07.6 00:06.1
Local D 17:07.7 17:13.7 00:06.1
Local D 17:13.8 17:20.3 00:06.5
Local D 17:20.3 17:26.4 00:06.1
Local D 17:26.5 17:32.5 00:06.0
Local D 17:32.5 17:38.1 00:05.5   //--speeds up here
Local D 17:38.1 17:41.7 00:03.5   \\--speeds up here
Local D 17:41.8 17:45.3 00:03.5
Local D 17:45.4 17:48.9 00:03.5
Local D 17:49.0 17:52.8 00:03.9
Local D 17:52.9 17:56.4 00:03.5
Local D 17:56.5 18:00.0 00:03.5
Local D 18:00.1 18:03.6 00:03.6
Local D 18:03.7 18:07.3 00:03.6
Local D 18:07.3 18:11.1 00:03.7
Local D 18:11.1 18:14.7 00:03.5
Local D 18:14.7 18:18.2 00:03.5
Local D 18:18.3 18:22.1 00:03.8
Local D 18:22.1 18:25.7 00:03.6
Local D 18:25.7 18:29.3 00:03.6
Local D 18:29.4 18:33.0 00:03.7

I'm not sure if that's the application or AppV has a caching structure but I'm leading towards AppV/Windows doing something with the file cache.  I'm unsure how to prove this out.

3 comments:

Marc said...

Hello, i am interested in this Auto-IT Script. Could you please help me. Thank you!

Trentent said...

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
;
; AutoIt Version: 3.0
; Language: English
; Platform: Win9x/NT
; Author: Trentent Tye (trentent@ca.ibm.com)
;
; Script Function:
; This script takes 2 parameters. The first is the program to launch; second is the window we wait for then output
; standard output with the duration both took. eg, Time_Window_Launch.exe C:\testprog.exe "Hello World"

#include

$progToLaunch = $CmdLine[1]
$windowToWaitFor = $CmdLine[2]

Local $hTimer = TimerInit()
Run($progToLaunch)

WinWaitActive($windowToWaitFor)
Local $fDiff = TimerDiff($hTimer)
Local $Time = _NowTime()

ConsoleWrite($Time & "," & $fDiff & "," & $windowToWaitFor & "," & $progToLaunch & @CRLF)

;finished

Trentent said...

I should note that the reason for the faster launch times after numerous application launches was due to the Registry Staging completing.

http://trentent.blogspot.de/2014/12/appv5-and-measuring-registrystaging.html