We were doing a benchmarking exercise recently, comparing the performance of an (untuned) User Profile Manager against standard Roaming Profiles.  I say “untuned”, meaning that we hadn’t set up any include or exclude rules against particular files or directories, nor were we doing any special processing on the registry, and while that’s missing out one of the key benefits of UPM (the ability to exclude unwanted files, etc from the profile), that wasn’t the point.

We assume that many Citrix admins would want to do a like-for-like comparison of UPM against Roaming Profiles to ensure that generally performance is comparable.  Better would be nice, but if there’s a small price to pay for improved functionality, then that’s probably acceptable.

You can imagine our shock when the first benchmark results appeared to show Roaming Profiles was twice as fast, and we had visions of a major re-architecting of the product, just weeks before we were due to release.

Of course, it turned out that we’d not made a proper comparison, which we realised as soon as we looked at the Citrix User Profile Manager 2.0 Logon-Logoff Chart – see http://support.citrix.com/article/ctx119466.

What that chart tells you is exactly what UPM does at logon and logoff time.  It tells you the circumstances in which UPM will create a brand new profile, or migrate an existing local / remote profile, and what processing is associated with that.

So we’d set up a template profile, with a set number of files of various sizes, which gave us the ability to measure repeatably the time it took to log on, compared to an equivalent Roaming Profile.  It should be the same, because all we’re doing is copying files across the network, right?

Wrong!

We’d been tripped up by the extra function of User Profile Manager, in particular, the ability to write back only the changed profile data at the end of session, which helps UPM avoid the dreaded “last write wins” scenarios.  If there’s no existing profile, UPM has to create one, and write it back immediately to the User Store, so there’s something for other sessions to use straight away.

That, of course, means a second network copy, on the first logon only.  So whereas Roaming Profiles performs one full network copy-read at the start of each session, and a full network copy-write at the end of every session, UPM performs a full copy-read and a full copy-write at the start of the very first session.  For all subsequent sessions, UPM performs a full copy-read at session start, and a differential merge-write at session end.  It’s that last merge-write that’s the clever bit, of course, that lets UPM merge changes from multiple simultaneous sessions and avoids overwriting changes from earlier sessions.

Once that was sorted out, we were able to satisfy ourselves that logon times for UPM were very similar to logon times for Roaming Profiles.  The next step was to start adding include / exclude rules to reduce logon times … but that’s another blog post.