Last week , Dan Allen posted an excellent article about optimizing Provisioning Services for using a CIFS share to put your images on. You can read it here, if you haven’t done so (highly recommended).

Now in this article Dan works with a CIFS share based on a Windows O/S file server. In the comments of the article some people asked if the performance increases by tuning would also apply to a NAS/SAN filer, and I wanted to know this as well, because we have our own local democenter in the region, which uses a NetApp FAS3020, and I put the vDisk store on CIFS, instead of creating a LUN and add it as a local drive.

So I went on to look at some of the options the NetApp provides regarding CIFS and see if I could match the tuning described by Dan.

Dan talks about the OpLocks and the disconnect/idle timeouts that are of influence to the overall CIFS performance and the ability for the PVS server to cache the VHD, and they are tunable on the FAS:

As a matter of fact, these options were the defaults, as I’m sure I’ve never touched them before
So it seems the NetApp is already set up for increased CIFS performance with PVS!

So before I tuned the PVS server, I wanted to see what the current performance would be in terms of network throughput.

I created a simple Windows XP vDisk, which is going to be streamed to a XenServer VM with 2 vCPU’s and 1 GB of ram, with the writecache stored in the VM’s RAM.

The results were measured using DU-Meter’s stopwatch, and the running time of each measurement is from the point of turning on the VM to the actual logged-in desktop of the Windows XP O/S.

Test Elapsed Time Tuned
Windows XP, 1st boot 1 min 18.2 sec No
Measurement Incoming Outgoing
Total of data transferred 225.4 MB 232.8 MB
Maximum transfer rate 17.4 MB/s 18.0 MB/s
Average transfer rate 2.9 MB/s 3.0 MB/s
Test Elapsed Time Tuned
Windows XP, 2nd boot 1 min 23.2 sec No
Measurement Incoming Outgoing
Total of data transferred 227.5 MB 235.2 MB
Maximum transfer rate 13.3 MB/s 13.7 MB/s
Average transfer rate 2.7 MB/s 2.8 MB/s

You can clearly see that networkwise there is almost as much sending of data to the client (Outgoing) as there is reading from the CIFS share (Incoming). There is actually a little bit of return traffic from the VM to the PVS server, but this is about 1-2 MB, so im going to ignore that here.

Now it was time to tune the PVS server according to Dan’s tweaks, and then the results are like this:

Test Elapsed Time Tuned
Windows XP, 1st boot 1 min 8.9 sec Yes
Measurement Incoming Outgoing
Total of data transferred 166.8 MB 193.6 MB
Maximum transfer rate 19.4 MB/s 20.1 MB/s
Average transfer rate 2.4 MB/s 2.8 MB/s
Test Elapsed Time Tuned
Windows XP, 2nd boot 54.2 sec Yes
Measurement Incoming Outgoing
Total of data transferred 3.2 MB 185.0 MB
Maximum transfer rate 657.4 KB/s 27.3 MB/s
Average transfer rate 60.5 KB/s 3.4 MB/s

There were some improvements on the 1st boot already; 10-15 seconds faster, lower amount of netwerkdata en slightly higher throughput, but some remarkable improvements on the 2nd boot! Not only does the PVS server stop reading the entire image from the network anymore, because it now utilizes its cache, the actual boot time decreased by about another 15 seconds, and the throughput of the network increased by about 30-40% (which is logical as it can now fill the pipe with sending, rather than also have to receive)
So also with a CIFS based filer you can get huge increases in performance by just a few simple tweaks.

Ofcourse there are a couple of disclaimers here: our democenter setup is nowhere near a full production spec, so the actual boottimes and network speeds are hardly representative of a realworld scenario, so obviously your results will vary. I merely wanted to find out if this also worked with our NAS/SAN, so I declare this proof-of-concept succesful!

Best regards,

Martijn Bosschaart
Sr. Systems Engineer Channel
Citrix Systems Benelux