<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tristan Watkins on IT Infrastructure &#187; SharePoint 2010 Archive</title>
	<atom:link href="http://tristanwatkins.com/index.php/tag/sharepoint-2010/feed/" rel="self" type="application/rss+xml" />
	<link>http://tristanwatkins.com</link>
	<description>Technical guidance for SharePoint, Cloud Services, Windows and more</description>
	<lastBuildDate>Fri, 21 Oct 2011 23:33:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>SharePoint 2010 Development Environment Performance: SSD, i5 vs. i7, WEI and Sandy Bridge</title>
		<link>http://tristanwatkins.com/index.php/sharepoint-2010-development-environment-performance-ssd-i5-i7-wei-sandy-bridge/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sharepoint-2010-development-environment-performance-ssd-i5-i7-wei-sandy-bridge</link>
		<comments>http://tristanwatkins.com/index.php/sharepoint-2010-development-environment-performance-ssd-i5-i7-wei-sandy-bridge/#comments</comments>
		<pubDate>Wed, 08 Jun 2011 00:43:03 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[ASUS]]></category>
		<category><![CDATA[Core i5]]></category>
		<category><![CDATA[Core i7]]></category>
		<category><![CDATA[Intel]]></category>
		<category><![CDATA[Lenovo]]></category>
		<category><![CDATA[Sandy Bridge]]></category>
		<category><![CDATA[SATA]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[SSD]]></category>
		<category><![CDATA[USB]]></category>
		<category><![CDATA[VMWare]]></category>
		<category><![CDATA[WEI]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1927</guid>
		<description><![CDATA[Late last year my colleagues and I tried to distil the tasks that impede SharePoint developer productivity. Then I ran those tests on EC2, Hyper-V and VMware Workstation, with the latter two virtualisation technologies running on a desktop, an older laptop and a newer laptop. In this post I hope to shed a bit of [...]]]></description>
			<content:encoded><![CDATA[<p>Late last year my colleagues and I tried to distil <a title="SharePoint 2010 Development Environment Performance Tests" href="http://tristanwatkins.com/index.php/sharepoint-2010-development-environment-performance-tests/">the tasks that impede SharePoint developer productivity</a>. Then I ran those tests on <a title="SharePoint 2010 Development Environment Performance Test Results" href="http://tristanwatkins.com/index.php/sharepoint-2010-development-environment-performance-test-results/">EC2, Hyper-V and VMware Workstation</a>, with the latter two virtualisation technologies running on a desktop, an older laptop and a newer laptop. In this post I hope to shed a bit of light on some follow-up testing that I&#8217;ve squeezed in to the odd hour here and there over the last six months. Unfortunately hardware availability and my schedule have not aligned to produce a further round of comprehensive tests and since I can&#8217;t see that occurring in the immediate future I&#8217;m going to fill in some gaps here with a couple of additional concrete findings, particularly regarding i5 vs. i7 testing and the impact of SSD on first page load times after application pool recycles. I&#8217;ll also talk less rigorously about a few related issues.</p>
<h3><span id="more-1927"></span>SSD</h3>
<p>Probably the most contentious finding from my initial testing was that disk performance and bus speed aren&#8217;t significant factors in most of those results (start-up and shut-down times being a notable exception). To recap a bit of my initial summary:</p>
<blockquote>
<div><em>Disk performance and bus speed did not prove to be significant factors</em> in these results (except for virtual machine start-up times). Obviously    there are fundamental differences about SSD (yet untested) that may    skew this picture, but I will be surprised to see big differences. If    we’ve got these tests right, and they are actually representative of  the   tasks that slow down development, then we would expect to see  wider   variance across bus or disk speeds. We don’t.</div>
<div>
<ul>
<li>This  assumes the disk is relatively uncontended. Virtual machine    performance degrades in every type of test while large file operations    are running concurrently on the same disk. This could be copying an   ISO,  importing or exporting a virtual machine or any other sustained   large  file operations.</li>
</ul>
</div>
</blockquote>
<p>The obvious follow-on test would be to repeat on the same system with SSD. Unfortunately I&#8217;ve not found the time or hardware resources to do that yet, but today I ran an indicative test. In this scenario, I installed two new boots on a brand new <a title="Lenovo ThinkPad W520" href="http://shop.lenovo.com/gbweb/gb/en/learn/products/laptops/thinkpad/w-series/w520/" target="_blank">Lenovo ThinkPad W520</a>. One drive was an SSD in the second bay, the other was a 7200 RPM SATA drive (I don&#8217;t have specs for either to hand, but they were the default Lenovo offerings). For both boots I ran the VMs on the other spindle, so we had one test with an SSD system drive and VMs running on mechanical drive. For the second test I inverted the configuration and had a mechanical system drive with VMs running on SSD. In both cases there was no appreciable system contention outside of these tests.</p>
<p>The results? Identical. First page load after application pool recycle times were around 10 seconds for Central Administration, a blank site and a My Site Host. 16 seconds for a customised intranet solution (the same one from the initial tests). These are very similar times to the desktop results from my original tests &#8211; only marginally slower. What does this tell me? I should complete the testing for more scenarios than just the first page load times. But given that it won&#8217;t happen any time soon, I&#8217;m pretty comfortable assuming that SSD isn&#8217;t going to automagic performance improvements where disk speed is otherwise not a factor, and I&#8217;m happy standing by my initial analysis with this supplementary finding in hand.</p>
<p>To be crystal clear, I&#8217;ve seen first-hand how quickly a VM starts and shuts down when running on SSD. It&#8217;s stunning. And there&#8217;s clearly a subsequent gain reaching a post-start-up stasis of sorts. I always waited for my system to calm down like this before any testing could begin, and in some cases that might take ten minutes on a 7200 RPM mechanical drive, and even longer over USB2. However, I don&#8217;t actually see this as a major productivity loss. Irritating, yes. A sound business case? Probably less so. I imagine doing lots of full crawls would translate to a big productivity gain on SSD, but is that a major issue for most developers on most projects? Not consistently so, in my experience. But if you&#8217;re developing a FAST solution it would probably be a good idea. Maybe even isolate all of the DBs on the SSD. There would certainly be scope to play with this once you have known disk contention that you&#8217;re fighting.</p>
<p>The problem I have is that I can&#8217;t find any other scenarios which are as disk-bound as we might assume. When we first started this testing in late 2009, our first inclination was to add eSATA drives on a PCI Express port to get a second spindle. Freeing up the VMs from system activity and large file operations on the system disk is a clear win, but this will be true for any disk of any speed on virtually any bus if my initial test results are to be trusted, which means that <em>the SSD investment for VM performance gains is only likely to get you faster start-up/shutdown times and anything else that involves large file operations</em>.</p>
<p>All this said, if budget and SSD reliability are not concerns, load up on them, assuming it gets you sufficient storage capacity. It won&#8217;t hurt, so long as they don&#8217;t fail all the time. Additionally, it may be beneficial to get an SSD for the system drive, if other non-development activities would benefit from it. Or it may be that start-up/shutdown times are compelling on their own. In the final analysis, I&#8217;m in no way opposed to SSD, but when it&#8217;s my neck on the line for justifying hardware purchases, I want concrete, consistently-realised performance gains if I&#8217;m going to recommend a less resilient, lower capacity, more expensive technology. In most cases, I&#8217;m not sure that&#8217;s the case for virtualised SharePoint development.</p>
<h3>i5 vs. i7</h3>
<p>One of the other key follow-on investigations from last year&#8217;s testing was a comparison of i5 vs. i7 processors. I&#8217;ll quote the initial context here:</p>
<blockquote>
<ul>
<li>
<div><em>The benefit of spending on i7 processors is in doubt</em>. We are seeing very minor performance <em>penalties</em> when adding more than two CPUs in both VMWare Workstation and Hyper-V   for most tests. There were also very minor improvements for some tasks,   but on the whole there does not appear to be a measurable benefit. This   might vary if the host OS is doing a great deal with the CPU, but that   is liable to cause other contention issues than just in the CPU (on a   laptop).</div>
</li>
<li>
<div>The only tasks that appeared to use all 8 cores in a SharePoint VM were:</div>
<ul>
<li>Retract/Deploy of a solution (but only very briefly)</li>
<li>Create web app, or Create site collection (but at low percentages)</li>
<li>Rebuild with Code Analysis (but not fully)</li>
</ul>
</li>
</ul>
</blockquote>
<p>Since  the initial testing, I&#8217;ve continued to experiment with two versus four  cores in the VM, and have never seen a significant enough difference to  endorse using more than two, but at the same time, I don&#8217;t think the  penalties for multiple cores are significant enough to worry about, if  any user thinks that four cores will be better. Note: I&#8217;m only talking about development here.</p>
<p>Based on  these findings, I had a hunch that a faster clock speed i5  would outperform an i7, assuming two or fours cores running inside the  SharePoint VM. For the sake of simplicity I&#8217;ve tested with two cores.  For these follow-on tests I used the same <a title="V6-P7H55E" href="http://www.asus.com/Barebone_PC/V_Series_2530L/V6P7H55E/" target="_blank">ASUS V6-P7H55E</a> model that I  used during the original testing, with an identical spec/configuration  and the same VM, with one exception. We replaced the <a title="Intel® Core™ i7-870 Processor (8M Cache, 2.93 GHz)" href="http://ark.intel.com/Product.aspx?id=41315" target="_blank">Intel® Core™ i7-870 Processor (8M Cache, 2.93 GHz)</a> with an <a title="Intel® Core™ i5-680 Processor (4M Cache, 3.60 GHz)" href="http://ark.intel.com/Product.aspx?id=48504" target="_blank">Intel® Core™ i5-680 Processor (4M Cache, 3.60 GHz)</a> &#8211; faster speed, smaller cache.</p>
<p>To  my surprise, the performance tests returned virtually identical results  to my initial testing (all within the margins that the initial tests  deviated). Reviewing those results again, we can see that for most tests  disk performance is not an issue (see above), and these tests suggest  that CPU is not a bottleneck to <em>further</em> performance gains beyond a certain point (I believe an older CPU would fare poorly against either of these, but if a 4.0 GHz i5 came along, I&#8217;m not sure we&#8217;d see an improvement over these results). These  machines have reasonably high-spec RAM, so memory <em>speed</em> does not seem a likely candidate  for further improvements. Based on resource monitoring during testing, I  can&#8217;t see that anything is maxed out, so I&#8217;m beginning to think there&#8217;s something inherently languid in the sequence of this computation. Perhaps a deeper dive is in order some day, but I&#8217;m probably not the best person to take that on.</p>
<p>As an aside, I can confirm that I&#8217;ve been running up to six VMs concurrently on this desktop with the i5 over the last couple of weeks. Starting all of the machines up at once is rough, but after 15-20 minutes it&#8217;s handling it no problem, and I don&#8217;t have to do that unless I&#8217;m taking a major snapshot. This suggests disk starts to become an issue with six VMs running at once, but that shouldn&#8217;t surprise anyone. If anything I&#8217;m surprised it&#8217;s not more of an issue on this machine, and if I continue to need this many VMs at once I&#8217;ll probably sacrifice my RAID 1 array for two separate disks. I&#8217;d be hesitant to suggest SSD in this case, since six VMs is probably going to chew up more storage than most SSDs will accommodate.</p>
<p>Based on these results and this longer-term experience, I&#8217;d recommend the higher-speed i5. I don&#8217;t seem to lose anything with the i5, at any rate. Maybe even go down to a 3.0 GHz i5 and save some money? If you know you have a specific scenario that will consistently utilise eight cores, go for the i7. But ultimately, both of these CPUs are fast.</p>
<h3>Windows Experience Index and CPU Benchmarks</h3>
<p>I&#8217;ve had a number of discussions with people about performance since publishing these posts, and it&#8217;s surprised me to find how many people actually look at the Windows Experience Index. Unfortunately, in my experience, this really doesn&#8217;t tell us much on today&#8217;s machines. A poor-to-average developer machine today gets a good score, unless it has a 4200 RPM hard drive (in which case it shouldn&#8217;t be used by a developer). Also, graphics performance is probably irrelevant. I really don&#8217;t think this index sheds any light on the <em>SharePoint Development Experience Index</em>, as it were.</p>
<p>Along these lines, with the receipt of a few new Sandy Bridge CPUs in these Lenovo laptops, we started running CPU benchmark tools. These are quite useful for diagnosing problems (early BIOS versions on the W520 were slooooooooooooooooooow &#8211; make sure to apply v1.25+), but beyond that, I&#8217;m not sure they tell us what we need to know for SharePoint development. For instance, at one point we saw hugely different CPU benchmark scores but the SharePoint performance tests were roughly the same. I guess I mention these tools here to say that they may be useful in some cases, but I think these real world tests probably tell us more.</p>
<h3>Sandy Bridge</h3>
<p>&#8220;How good are these Sandy Bridge CPUs&#8221;, I hear you mutter? Battery life is amazing. I accidentally left the Lenovo W520 running unplugged all day today. I think it lasted about six hours. Performance-wise, you&#8217;ve seen the ~10 second first page load times after an application pool recycle on a few of the standard SharePoint OOTB templates. That&#8217;s on a 2.0 GHz Sandy Bridge i7. This is not far off the 2.93 GHz first generation i7 desktop CPU results from our original tests, and much better than the first-generation i7 laptop PCU. Pretty good, I&#8217;d say. I can&#8217;t wait to see the second generation desktop speeds. Note: the desktop i7 models also have integrated graphics, where the first-generation desktop i7 CPUs did not. Now to hope there aren&#8217;t any more recall issues.</p>
<p>A few other things to note:</p>
<ul>
<li>Until a few months ago, I didn&#8217;t realise that dual-core i7 CPUs exist. I thought they were all quad-core. Not so. This is important because if you find a laptop model with four SODIMM slots (to get you 16GB RAM, and 32GB in due course), the fine print will probably tell you that you will only get two SODIMM slots unless you purchase a quad-core CPU.
<ul>
<li>There&#8217;s a secondary &#8220;gotcha&#8221; here, in that the quad-core laptop i7 CPUs peak at a much lower clock rate than their desktop siblings. I think the fastest first-generation quad-core laptop i7 CPU peaks at just over 2 GHz, and most laptop manufacturers have very few models, if any, with this CPU. In fact, we struggled to find anything other than 1 Lenovo, 1 Dell and 1 HP model at 15&#8243;. Most of these only had availability for lower clock speeds and we nearly had to settle for 1.73 GHz. These are all very expensive as well.</li>
</ul>
</li>
<li>The Sandy Bridge comes to the rescue here insofar as it has higher clock speed quad-core laptop i7 models, even if these are also slower than their desktop siblings. However, it&#8217;s also worth noting that in most CPU comparisons of Sandy Bridge to 1st-generation i7 models, the Sandy Bridge annihilates. Basically, at this point, if shopping for a high-performance SharePoint development laptop, you should be looking at Sandy Bridge. They may actually be cheaper as well &#8211; somehow.</li>
<li>Also be aware that the Japanese earthquake has caused severe manufacturing delays for most hardware vendors. You may find you need to settle for a lengthy lead time at the moment.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/sharepoint-2010-development-environment-performance-ssd-i5-i7-wei-sandy-bridge/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Active Directory Account Creation Mode in SharePoint 2010</title>
		<link>http://tristanwatkins.com/index.php/active-directory-account-creation-mode-sharepoint-2010/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=active-directory-account-creation-mode-sharepoint-2010</link>
		<comments>http://tristanwatkins.com/index.php/active-directory-account-creation-mode-sharepoint-2010/#comments</comments>
		<pubDate>Thu, 02 Jun 2011 23:38:24 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Authentication]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Hosting]]></category>
		<category><![CDATA[Installation]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[SharePoint Foundation]]></category>
		<category><![CDATA[WSSv2]]></category>
		<category><![CDATA[WSSv3]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1919</guid>
		<description><![CDATA[Earlier this week, I had the misfortune of generating an error I&#8217;d never seen before when building a new SharePoint Server 2010 farm. The error first emerged when the SharePoint installation process landed me at the Farm Configuration Wizard page. I wouldn&#8217;t have been running it (not advisable ever, really), but it&#8217;s the first page [...]]]></description>
			<content:encoded><![CDATA[<p>Earlier this week, I had the misfortune of generating an error I&#8217;d never seen before when building a new SharePoint Server 2010 farm. The error first emerged when the SharePoint installation process landed me at the Farm Configuration Wizard page. I wouldn&#8217;t have been running it (not advisable ever, really), but it&#8217;s the first page that loads after the Product Configuration Wizard completes, so my first Central Administration page was this error:</p>
<p style="margin-left: 36pt;"><em>The page cannot be displayed because your server&#8217;s current configuration does not support it. To perform this task, use the command line operations in Stsadm.exe. </em></p>
<p>How odd, given the emphasis on PowerShell in SharePoint 2010! After a bit of head scratching and examining application and ULS logs, I navigated to the Central Admin home page and everything appeared to be fine, but then when I got around to creating a new Site Collection a bit later, I got the same error, even though I was able to create web/service applications. I had the same error when logged on as farm admin, farm admin + local admin rights, farm admin + SQL SysAdmin and farm admin + domain admin rights, so I was pretty sure it wasn&#8217;t a permission issue (and I should note my temporary fiddlery here is only really suitable for non-production environments). This error also occurred on some other Site Collection-specific pages.</p>
<p><span id="more-1919"></span>After searching for a solution I found a number of suggestions that this was related to insufficient rights for <em>Active Directory Account Creation Mode</em>. So I played around with SQL permissions/accounts a bit more and was eventually able to loosen things to the point where I could create a new site using PowerShell (still no luck using Central Administration). I also (strangely), had to specify an outbound e-mail server first!?!?! ULS Viewer unveiled that mystery, as well as an error attempting to create an account for my logged on user (which obviously already exists) in Active Directory. This error didn&#8217;t prevent me from creating the site, but this behaviour confirmed that the site was definitely running in Active Directory Account Creation Mode.</p>
<h3>What is Active Directory Account Creation Mode?</h3>
<p>Unfortunately, current Microsoft documentation is non-existent as far as I can tell, so I&#8217;ll start with the <a href="http://technet.microsoft.com/en-us/library/cc288437%28office.12%29.aspx">TechNet description from WSS2</a>:</p>
<blockquote><p>A new feature of Microsoft Windows SharePoint Services is account creation mode for Active Directory directory service. This feature replaces the local account creation feature in SharePoint Team Services 1.0 from Microsoft. Use Active Directory account creation mode when it is necessary to create new user accounts rather than using existing domain accounts. For example, an Internet service provider (ISP) might need the ability to allow SharePoint site owners the capability to create user accounts or invite users to collaborate on a Web site where existing domain accounts for those users do not already exist.</p></blockquote>
<p>Basically it&#8217;s a hosting mode in which SharePoint creates <strong>new</strong> users in Active Directory and <strong>these are the only accounts that can be used in this mode</strong>. I can attribute my lack of experience with this mode to my lack of experience with the free versions of SharePoint. Nearly all of my work has been focused on SPS2003, MOSS 2007 and SPS2010. I can&#8217;t pin down for certain whether this mode ever existed in the full versions of the product, but <a href="http://dishasharepointworld.blogspot.com/2011/04/active-directory-account-creation-mode.html">according to this article it is now SharePoint Foundation-only</a> and greyed out for SharePoint Server 2010. This <a href="http://social.technet.microsoft.com/Forums/en-US/sharepoint2010setup/thread/b8987e56-200e-4cee-9b69-2ae8b492a93b">TechNet forum post</a> from published SharePoint author and MCC <a href="http://mycentraladmin.wordpress.com/">John Ferringer</a> seems to back up that assertion. This post describes the mode well and also appears to answer my next question (my italics, John&#8217;s bold):</p>
<blockquote><p>SharePoint Foundation 2010 (the &#8220;free&#8221; version of SharePoint that is the successor to Windows SharePoint Services, or WSS) does have something called &#8220;Active Directory Account Creation&#8221; mode available, which functions much like what you saw in WSS v2. Accounts are first created in SharePoint, and then added to an Organizational Unit in Active Directory. The problem is that <em>this mode is only available at the time you install SharePoint, (its an option off the Advanced Settings button) and you <strong>can&#8217;t </strong>change that configuration setting after the fact</em>. Additionally, you can&#8217;t use existing AD accounts in that SharePoint farm, you&#8217;ll only be able to use accounts that you create through the tool and you can&#8217;t give an account an email address that&#8217;s already used by another account in AD. So you need to be mindful of those limitations if you chose to use that mode.</p></blockquote>
<p>I wish I&#8217;d seen this post sooner. It would have saved me some time. For what it&#8217;s worth, my investigation backs up this description as follows:</p>
<ul>
<li>There is no facility to disable this mode through Central Administration.</li>
<li>The STSADM commands only support identifying whether <a href="http://support.microsoft.com/kb/823507">WSS is in Active Directory Account Creation Mode</a> using <em>stsadm.exe -o getproperty -pn createadaccounts</em>. There is no corresponding <em>setproperty</em> command.</li>
<li>The PSCONFIG commands only support creating the farm in this mode – there does not appear to be a means of reverting from it. I believe the configdb&#8217;s <em>addomain</em> and <em>adorgunit</em> parameters are responsible for enabling this mode (I could be wrong – the documentation is a bit scant), but I can&#8217;t find a facility for reverting it.</li>
<li>PowerShell is now the preferred means of creating the farm and would be the preferred means of enabling this mode using the <a href="http://technet.microsoft.com/en-us/library/ff607838.aspx">New-SPConfigurationDatabase</a> command. As far as I can tell the <em>DirectoryDomain</em> and <em>DirectoryOrganizationUnit</em> parameters are responsible for enabling this mode now, although again, the documentation is unclear to me.</li>
<li>I even tried to make the change through the API with the help of a friendly neighbourhood developer. Things have changed a bit from <a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spglobaladmin.accountcreationmodeenabled.aspx">WSS2</a> to <a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spwebservice.createactivedirectoryaccounts.aspx">WSS3/SharePoint Foundation</a>. At any rate, we found the attribute and set it to &#8220;false&#8221;, but unfortunately this did not rescue my nascent farm.</li>
</ul>
<p>In short, it looks like there&#8217;s no way back.</p>
<h3>How Could This Have Happened?</h3>
<p>Given that this mode is only supposed to be present in SharePoint Foundation, I&#8217;m really at a loss to explain how I activated it on SharePoint Server 2010. I may have fat-fingered one of the New-SPConfigurationDatabase <em>DirectoryDomain</em> or <em>DirectoryOrganizationUnit</em> parameters I suppose, but I would be really surprised if I did that in a way that allowed me to successfully run the command. In the end, I reverted to my pre-installation snapshots and rebuilt my farm. I don&#8217;t feel that was such a waste now that I&#8217;ve found John Ferringer&#8217;s description and realise there never would have been a way back, but if you find this post through similar folly, hopefully you won&#8217;t waste any time trying to revert the farm like I did.</p>
<p>Interestingly, while researching this topic, I stumbled across <a href="http://social.technet.microsoft.com/Forums/en/sharepoint2010setup/thread/9ac04d39-56e6-43cf-8b91-55d143d2067a">a TechNet forum post from Andrew Milsark of FPWeb</a> stating that they&#8217;ve, &#8220;moved away from using AD Account creation mode all together&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/active-directory-account-creation-mode-sharepoint-2010/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>SharePoint Server 2010 Search Scopes and Pre-Windows 2000 Compatibility Access</title>
		<link>http://tristanwatkins.com/index.php/sharepoint-server-2010-search-scopes-and-pre-windows-2000-compatibility-access/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sharepoint-server-2010-search-scopes-and-pre-windows-2000-compatibility-access</link>
		<comments>http://tristanwatkins.com/index.php/sharepoint-server-2010-search-scopes-and-pre-windows-2000-compatibility-access/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 00:24:22 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Functional Level]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[Service Application]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[TGGAU]]></category>
		<category><![CDATA[tokenGroupsGlobalAndUniversal]]></category>
		<category><![CDATA[ULS]]></category>
		<category><![CDATA[w3wp]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1681</guid>
		<description><![CDATA[Back in the pre-release days of SharePoint 2010, one of the most reliable sources of information on infrastructure issues was Russ Maxwell&#8217;s SharePoint Brew blog. It&#8217;s still a great resource, although he&#8217;s posting less frequently now than he was during the beta. In this post I want to share my findings regarding Pre-Windows 2000 Compatibility [...]]]></description>
			<content:encoded><![CDATA[<p>Back in the pre-release days of SharePoint 2010, one of the most reliable sources of information on infrastructure issues was <a href="http://blogs.msdn.com/b/russmax/">Russ Maxwell&#8217;s SharePoint Brew blog</a>.  It&#8217;s still a great resource, although he&#8217;s posting less frequently now than he was during the beta. In this post I want to share my findings regarding <em>Pre-Windows 2000 Compatibility Access</em> group rights in Active Directory. Everything I have to say is supplementary to Russ&#8217;s foundational explanation of <a href="http://blogs.msdn.com/b/russmax/archive/2010/01/20/why-the-tokengroupsglobalanduniversal-tggau-attribute-matters-in-sharepoint-2010.aspx">Why the tokenGroupsGlobalAndUniversal (TGGAU) attribute matters in SharePoint 2010</a>. I&#8217;m picking the discussion up from his closing comment, &#8220;At a minimum, certain service accounts like the search service account need to be a member of this group.&#8221;
</p>
<p><span id="more-1681"></span></p>
<h3>Context<br />
</h3>
<p>A couple of months ago I was building a client&#8217;s production farm. It was a pretty straight-forward architecture with few unusual requirements. I&#8217;d successfully provisioned everything and was deploying the PDF iFilter as one of my last steps. When I ran a test crawl to see if it could pick up the contents of PDF documents, I was surprised to find the <em>Local SharePoint sites</em> Scope contained zero items, even though the crawl successfully gathered 459 items. To add to my confusion, the <em>People</em> scope was fully populated. I verified that the scope didn&#8217;t need to be updated, then launched ULS Viewer. While reading the trace logs in real time, I re-ran a full crawl and spotted this clue (my bold):
</p>
<blockquote><p><strong>AuthzInitializeContextFromSid failed</strong> with ERROR_ACCESS_DENIED. This error indicates that <strong>the account under which this process is executing may not have read access to the tokenGroupsGlobalAndUniversal attribute</strong> on the querying user&#8217;s Active Directory object. Query results which require non-Claims Windows authorization will not be returned to this querying user.
</p>
</blockquote>
<p><a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/032911_2346_SharePointS11.png"><img class="alignnone size-full wp-image-475" title="ConfickerPr1" src="http://tristanwatkins.com/wp-content/uploads/032911_2346_SharePointS11.png" alt="032911 2346 SharePointS11 SharePoint Server 2010 Search Scopes and Pre Windows 2000 Compatibility Access"  /></a>
</p>
<h3>Investigation<br />
</h3>
<p>This error message reveals quite a bit. We know the error occurs in a w3wp.exe process associated with SharePoint Server Search&#8217;s, &#8220;Query Processor&#8221;, and that the application pool identity of this process doesn&#8217;t have read access to the <em>tokenGroupsGlobalAndUniversal</em> attribute in Active Directory. This tells us the error is occurring on the SharePoint Search Service Application pool&#8217;s identity, rather than on the Search Service (which is not a w3wp). After searching for a bit I found a few useful posts/articles, but what really helped me was Russ Maxwell&#8217;s article, which I linked to at the top of this post.
</p>
<p>I suspect that in his testing, Russ found different scenarios where <em>Pre-Windows 2000 Compatibility Access</em> rights needed to be granted to the Search service account, but in my case these rights didn&#8217;t help. His error and his explanation of the problem are different. I don&#8217;t want to make too much of this, since his post was circa Beta, but it&#8217;s worth noting there may be multiple issues with these rights and Search. In our case, we tried to grant rights to the Search Service account but <strong>the error persisted until we added the Search Service Application Pool Identity account to this group</strong>. In actuality, we identified these same errors on the farm account initially as well, but granting these rights to the farm account didn&#8217;t solve the problem.
</p>
<p>I should also note for completeness, that there were Security event 4625 Logon Failure errors accompanying the ULS log entries until we granted access to the Search Service Application Pool Identity account, at which point these events were replaced by 4624 Success events.
</p>
<p>After running one more Full Crawl I confirmed that the ULS errors were also gone. It&#8217;s reasonable to infer from these new ULS events that when <em>PluggableSecurityTrimmerManager</em> is selecting, &#8220;workid from scope()&#8221;, it needs these <em>Pre-Windows 2000 Compatibility Access</em> permissions in a Windows Server 2000 or Windows Server 2003 domain. Presumably if SIDs can&#8217;t be initialised, everything gets security trimmed.
</p>
<p><p><a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/032911_2346_SharePointS21.png"><img class="alignnone size-full wp-image-1179" title="ConfickerPr1" src="http://tristanwatkins.com/wp-content/uploads/032911_2346_SharePointS21.png" alt="032911 2346 SharePointS21 SharePoint Server 2010 Search Scopes and Pre Windows 2000 Compatibility Access" width="500" /></a>
</p>
<h3>How to use these findings<br />
</h3>
<p>I&#8217;d recommend adding this to the list of permissions you <em>may</em> need to grant in a Windows Server 2000 or Windows Server 2003 domain. This is basically what Russ Maxwell was saying initially, as I read it. In this scenario, I&#8217;ve merely spotted a scenario where different rights are required and I can&#8217;t shed any light on why this hasn&#8217;t been required in every Windows 2000 or Windows 2003 domain I&#8217;ve worked in.
</p>
<p>If working from a principle of least privileged access, I&#8217;d suggest granting these rights as needed during deployment. They shouldn&#8217;t need to be granted particularly broadly (unless you&#8217;re working with a 1-way trust from a resource domain, which is another story &#8211; see the comments in the Russ Maxwell post for an introduction). Alternately, it&#8217;s arguable that granting read access to this <em>tokenGroupsGlobalAndUniversal</em> (TGGAU) attribute isn&#8217;t opening an enormous hole, but that&#8217;s a question for each organisation to answer based on their security models.
</p>
<h3>A Note on User Profile Pre-Windows 2000 Compatibility Access Rights<br />
</h3>
<p>While I&#8217;m speaking of variance in these permission requirements, I should note that I&#8217;ve seen a number of sources including Spencer Harbar, <a href="http://technet.microsoft.com/en-us/library/ee721049.aspx">TechNet</a> and this Russ Maxwell article mentioning the need to grant these same <em>Pre-Windows 2000 Compatibility Access</em> rights to the User Profile Synchronisation account, but I haven&#8217;t had any problems running without these rights in two different Windows 2000 or 2003 domains.
</p>
<blockquote><p>If the domain controller is running Windows Server 2003, the synchronization account must be a member of the Pre-Windows 2000 Compatible Access built-in group. See <a href="http://technet.microsoft.com/en-us/library/ee721049.aspx">Add an account to the Pre-Windows 2000 Compatible Access group</a> for instructions to grant this permission.
</p>
</blockquote>
<p>Given those sources, I&#8217;d suggest you&#8217;re probably best off granting the rights, but I haven&#8217;t yet been able to validate the need myself. I&#8217;d definitely be interested if anyone can shed more light on that topic. </p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/sharepoint-server-2010-search-scopes-and-pre-windows-2000-compatibility-access/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Amazon VPC and VM Import Updates</title>
		<link>http://tristanwatkins.com/index.php/amazon-vpc-and-vm-import-updates/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=amazon-vpc-and-vm-import-updates</link>
		<comments>http://tristanwatkins.com/index.php/amazon-vpc-and-vm-import-updates/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 00:04:00 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Consultancy and Design]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[IaaS]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[VMWare]]></category>
		<category><![CDATA[VPC]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1845</guid>
		<description><![CDATA[In the last couple of weeks I&#8217;ve received notification of two important updates regarding Amazon Web Services. I thought I&#8217;d share them here, as they are both relevant to use of SharePoint 2010 on EC2 and I&#8217;ve seen no mention of them elsewhere. If you&#8217;re interested in this broader topic, I&#8217;ve covered it in detail [...]]]></description>
			<content:encoded><![CDATA[<p>In the last couple of weeks I&#8217;ve received notification of two important updates regarding Amazon Web Services. I thought I&#8217;d share them here, as they are both relevant to use of SharePoint 2010 on EC2 and I&#8217;ve seen no mention of them elsewhere. If you&#8217;re interested in this broader topic, I&#8217;ve covered it in detail here:</p>
<p>&nbsp;</p>
<ul>
<li><a title="Permalink to SharePoint 2010 Infrastructure for Amazon EC2 Part I: Storage and Provisioning" href="http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-storage-provisioning/">SharePoint 2010 Infrastructure for Amazon EC2 Part I: Storage and Provisioning</a></li>
<li><a title="Permalink to SharePoint 2010 Infrastructure for Amazon EC2 Part II: Cloning and Networking" href="http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-cloning-networking/">SharePoint 2010 Infrastructure for Amazon EC2 Part II: Cloning and Networking</a></li>
<li><a title="Permalink to SharePoint 2010 Infrastructure for Amazon EC2 Part III: Administration, Delegation and Licensing" href="http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-administration-delegation-licensing/">SharePoint 2010 Infrastructure for Amazon EC2 Part III: Administration, Delegation and Licensing</a></li>
<li><a title="Permalink to SharePoint 2010 Infrastructure for Amazon EC2 Part IV: Cost Analysis" href="http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-cost-analysis/">SharePoint 2010 Infrastructure for Amazon EC2 Part IV: Cost Analysis</a></li>
</ul>
<p>My commentary here assumes some familiarity with these earlier posts. This is new functionality that enables new design options. These options should make SharePoint 2010 on EC2 more appealing for a few specific uses.</p>
<p><span id="more-1845"></span></p>
<h3>VM Import for VMware vCenter</h3>
<p>While this first update is quite eye-catching, and will be brilliant for some scenarios, I don&#8217;t see it as massively game-changing. I first noticed it in <a href="http://aws.amazon.com/about-aws/newsletters/2011/03/09/march-2011---new-tokyo-region-static-websites-on-s3-cloudformation/?ref_=pe_8050_19125370">the March 2011 AWS Newsletter</a>, so this is pretty new stuff. I think the blurb speaks for itself:</p>
<blockquote><p><strong>Amazon EC2 VM Import Adds Connector for VMware vCenter</strong><br />
<a href="http://www.amazon.com/gp/r.html?R=1363OD149M8JD&amp;C=1DW7QTEPH85CB&amp;H=I7ZNQJOAMI5KACAAMKINZH1XAKGA&amp;T=C&amp;U=http%3A%2F%2Faws.amazon.com%2Fec2%2Fvmimport%2F%3Fref_%3Dpe_8050_19125370">Amazon EC2 VM Import</a> has released Connector vApp, a virtual appliance that works with VMware vCenter making it easier to import your preexisting virtual machines (VMs) to Amazon EC2. Amazon EC2 customers can use a familiar graphical user interface to select a virtual machine (VM) and specify the AWS Region, Availability Zone, operating system, instance size, security group, and VPC details (if desired) into which the VM should be imported. Once the VM has been imported, you can launch it as an instance from the AWS Management Console. For more information about this feature, see the <a href="http://www.amazon.com/gp/r.html?R=1363OD149M8JD&amp;C=1DW7QTEPH85CB&amp;H=RAATR2YNGQ0SX1FFMOFTFLFVV0CA&amp;T=C&amp;U=http%3A%2F%2Fdocs.amazonwebservices.com%2FAWSEC2%2Flatest%2FUserGuide%2Findex.html%3FUsingVirtualMachinesinAmazonEC2.html">Amazon EC2 User Guide</a>.</p></blockquote>
<p>I have yet to put this to the test. There may be big issues with this for all I know, but I figured it was worth spreading the word, as many people seem to be evaluating SharePoint 2010 in the cloud at the moment.</p>
<p>One of the &#8220;common uses&#8221; listed on the Amazon VM Import page linked above is quite clever I think:</p>
<blockquote><p><strong>Create a Disaster Recovery Repository for your VM images</strong><br />
Import your on-premise VM images to Amazon EC2 for backup and disaster recovery contingencies. Store the imported images as Elastic Block Store-backed AMIs so they&#8217;re ready to launch in Amazon EC2 when you need them. You pay no Amazon EC2 usage charges until you need to launch the instances.</p></blockquote>
<p>This is probably the most compelling reason to consider this new functionality.</p>
<h3>Public Addressing and the Virtual Private Cloud</h3>
<p>The next update addresses what I saw as the major problem with Amazon EC2 for SharePoint 2010. Namely, that the Virtual Private Cloud only worked with stretched VPNs to it. There was no public addressing. This is no longer the case, as detailed in another AWS mail-out from a couple of days ago (my bold below):</p>
<blockquote><p>We are excited to announce greatly expanded functionality of Amazon Virtual Private Cloud (Amazon VPC) that opens up the virtual networking capabilities of Amazon VPC to a much broader set of use cases. Before today, you could provision a private, isolated section of the AWS cloud and launch AWS resources into that VPC that were only accessible via an IPsec Virtual Private Network (VPN) connection to your corporate datacenter. <strong>With today&#8217;s announcement, you no longer need a VPN or existing infrastructure resources in order to leverage Amazon VPC, but can also connect to your VPC directly through the Internet &#8211; you define the virtual network that you wish to use.</strong></p>
<p>With this release, you can now define a virtual network topology in the Amazon VPC that closely resembles a traditional network that you might operate in your own datacenter. <strong>You have complete control over the virtual networking environment, including selection of IP address range, creation of subnets, and configuration of route tables and network gateways. You can easily customize the network configuration for Amazon VPC, for example creating a public-facing subnet for web servers that has access to the Internet, and placing backend systems such as databases or application servers in a private-facing subnet with no Internet access.</strong></p>
<p>Amazon VPC enables you to leverage multiple layers of security for access to Amazon EC2 instances, including security groups and network access control lists. Additionally, with the expanded Amazon VPC features, you can:</p>
<p>Divide Amazon VPC&#8217;s private IP address range into one or more public or private subnets to facilitate running applications and services in Amazon VPC.</p>
<p>Control inbound and outbound access to and from individual subnets using network access control lists.</p>
<p><strong>Attach an Amazon Elastic IP Address to any Amazon VPC instance so it can be reached directly from the Internet.</strong></p>
<p>Store data in Amazon S3 and set permissions so the data can only be accessed from within Amazon VPC.</p>
<p>For more information on Amazon Virtual Private Cloud, visit <a href="http://www.amazon.com/gp/r.html?R=1363OD149M8JD&amp;C=277FY5ZMVRE0K&amp;H=0D9R9PXRSQJDG3AI2DLACVVKALOA&amp;T=C&amp;U=http%3A%2F%2Faws.amazon.com%2Fvpc%3Fref_%3Dpe_2170_19234450">aws.amazon.com/vpc</a>.</p></blockquote>
<p>The earlier design of the VPC (or more precisely, the lack of user-controlled NAT) was the major technical shortfall in the Amazon IaaS offering relative to a traditional datacentre. I haven&#8217;t yet looked at this in enough detail, as I&#8217;m not actively using EC2, so no doubt there are design nuances that will obtain. Also, the VPC and Elastic IP addresses have associated costs and this will add considerable (likely prohibitive) complexity for the network-untrained. Alternately it may require proper administration, and those associated costs.</p>
<p>For my personal use, I see this as a decisive improvement that will make me reconsider EC2 much more closely for testing cross-farm scenarios, perimeter security, proxies and anything that requires a full infrastructure. While much of this may have been achievable without these VPC changes, it would have been massively complex, more costly and less robust.</p>
<p><strong>17-03-2011 update</strong>: as my former colleague <a href="http://www.glynblogs.com/">Glyn Clough</a> rightly points out in the comments here, I forgot to mention that EC2 also supports Windows Server 2008 R2 now, which is sweet!</p>
<p><strong>15-04-2011 update</strong>: <a title="Tweet" href="http://twitter.com/#!/paulculmsee/status/58437284139249664" target="_blank">Paul Culmsee pointed out</a> today that <a title="VPC" href="http://aws.amazon.com/vpc/" target="_blank">the VPC</a> is still in Beta, which I&#8217;ve somehow managed to forget between December and March. This could mean pricing or other changes before RTM. Also note: Paul pointed out that the VPC does not span availability zones, which could be an issue for global organisations.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/amazon-vpc-and-vm-import-updates/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>People Search Result Organisation Browser Link Doesn&#8217;t Respect Alternate Access Mappings</title>
		<link>http://tristanwatkins.com/index.php/people-search-result-organisation-browser-link-doesnt-respect-alternate-access-mappings/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=people-search-result-organisation-browser-link-doesnt-respect-alternate-access-mappings</link>
		<comments>http://tristanwatkins.com/index.php/people-search-result-organisation-browser-link-doesnt-respect-alternate-access-mappings/#comments</comments>
		<pubDate>Wed, 16 Mar 2011 07:00:49 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Consultancy and Design]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Alternate Access Mappings]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[Server Name Mappings]]></category>
		<category><![CDATA[Service Applications]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[User Profiles]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1688</guid>
		<description><![CDATA[My colleague Anthony Clegg and I have recently been working on a project together, for which I&#8217;ve designed and delivered the infrastructure, while he&#8217;s been delivering the solution. As part of my design, I extended the SharePoint Web Applications from the default HTTPS zones to new HTTP zones, exclusively for crawling. This approach has been [...]]]></description>
			<content:encoded><![CDATA[<p>My colleague <a href="http://www.antblogs.com/">Anthony Clegg</a> and I have recently been working on a project together, for which I&#8217;ve designed and delivered the infrastructure, while he&#8217;s been delivering the solution. As part of my design, I extended the SharePoint Web Applications from the default HTTPS zones to new HTTP zones, exclusively for crawling. This approach has been around for some time, but there&#8217;s a new wrinkle on the SharePoint 2010 Enterprise Search Centre People Search results page, which I&#8217;ll discuss here:
</p>
<p><span id="more-1688"></span></p>
<ul>
<li>I have an intranet and a MySite, each with a default zone used by all users to access the application, in this example <a href="https://sp">https://sp</a> and <a href="https://my">https://my</a>.
</li>
<li>I want to optimise my crawl performance by crawling over HTTP, in order to remove the encryption/decryption load for each request, so I create a new Alternate Access Mapping zone on HTTP, for each of these web applications. These new URLs are <a href="http://s">http://s</a> and <a href="http://m">http://m</a>.
</li>
<li>I also set up HOSTS file entries on my Crawl Component servers so they will be able to crawl these applications locally. I don&#8217;t want my crawls to add load to the WFE servers.
</li>
<li>If I don&#8217;t want real people to access the site on this zone (and I probably don&#8217;t), I don&#8217;t set up DNS entries for it. Only Search will be using this zone.
</li>
<li>(Optionally) I create a Web Application User Policy that restricts access to this zone, since it is not running under SSL.
</li>
<li>
<div>I reconfigure my Content Sources in the Search Service Application to crawl the new zones, <a href="http://s">http://s</a>, <a href="http://m">http://m</a> and sps3://s
</div>
<ul>
<li>Note, for an SSL-secured site, the final People Search Connector, &#8220;sps3://s&#8221; will actually be &#8220;sps3<strong>s</strong>://s&#8221; by default, so make sure to get rid of that last &#8220;s&#8221;.
</li>
</ul>
</li>
<li>I run a full crawl and verify that it completes much faster than it did when I was crawling the site over HTTPS/SPS3S.
</li>
<li>Once my full crawl completes successfully, I verify that All Sites and People search results are returning as <a href="https://sp">https://sp</a> and <a href="https://my">https://my</a> (the default zones).
</li>
</ul>
<p>This was all working as expected &#8211; until Anthony noticed that the Org Browser web part appeared to be broken. On further inspection, we identified that:
</p>
<ul>
<li>Alternate Access Mappings didn&#8217;t appear to be working on this link (it displayed the crawled address).
</li>
<li>All other links on the People Search Results tab pointed at the default zone; they accurately respected Alternate Access Mappings.
</li>
<li>All results for the All Sites tab/scope successfully respected Alternate Access Mappings.
</li>
</ul>
<p>So we have one link to the wrong zone on the Enterprise Search Centre&#8217;s out-of-the-box People Search results page (or tab, if you prefer). I took this scenario to my development environment to confirm. Indeed, the behaviour was the same. I&#8217;ll illustrate below.
</p>
<p><span style="text-decoration:underline">Alternate Access Mappings for my Blank Site</span><br/><a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/PeopleSearch_AAM_SP.png"><img class="alignnone size-full wp-image-1052" title="AAM SP" src="http://tristanwatkins.com/wp-content/uploads/PeopleSearch_AAM_SP.png" alt="PeopleSearch AAM SP People Search Result Organisation Browser Link Doesnt Respect Alternate Access Mappings" width="500" /></a>
	</p>
<p><span style="text-decoration:underline">Alternate Access Mappings for my My Site</span><br/><a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/PeopleSearch_AAM_My.png"><img class="alignnone size-full wp-image-1054" title="AAM My" src="http://tristanwatkins.com/wp-content/uploads/PeopleSearch_AAM_My.png" alt="PeopleSearch AAM My People Search Result Organisation Browser Link Doesnt Respect Alternate Access Mappings" width="500" /></a>
	</p>
<p><span style="text-decoration:underline">The updated Content Sources page</span><br /><a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/PeopleSearch_ContentSources.png"><img class="alignnone size-full wp-image-1052" title="Content Sources" src="http://tristanwatkins.com/wp-content/uploads/PeopleSearch_ContentSources.png" alt="PeopleSearch ContentSources People Search Result Organisation Browser Link Doesnt Respect Alternate Access Mappings" width="500" /></a>
	</p>
<p><span style="text-decoration:underline">The &#8220;All Sites&#8221; Search Results Page With All Links Mapped</span><br /><a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/PeopleSearch_AllSites.png"><img class="alignnone size-full wp-image-1036" title="All Sites" src="http://tristanwatkins.com/wp-content/uploads/PeopleSearch_AllSites.png" alt="PeopleSearch AllSites People Search Result Organisation Browser Link Doesnt Respect Alternate Access Mappings" width="500" /></a>
	</p>
<p>In the following four screen shots of the same People Search results, notice the status bar as I hover over various links on this page (see: bottom left of the browser).
</p>
<p><span style="text-decoration:underline">The Correct Link to Me</span><br/><a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/PeopleSearch_Link1.png"><img class="alignnone size-full wp-image-1051" title="Link to My Site" src="http://tristanwatkins.com/wp-content/uploads/PeopleSearch_Link1.png" alt="PeopleSearch Link1 People Search Result Organisation Browser Link Doesnt Respect Alternate Access Mappings" width="500" /></a>
	</p>
<p><span style="text-decoration:underline">The Correct Link to &#8220;Add as Colleague&#8221;</span><br/><a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/PeopleSearch_Link2.png"><img class="alignnone size-full wp-image-1051" title="Link to Add as Colleague" src="http://tristanwatkins.com/wp-content/uploads/PeopleSearch_Link2.png" alt="PeopleSearch Link2 People Search Result Organisation Browser Link Doesnt Respect Alternate Access Mappings" width="500" /></a>
	</p>
<p><span style="text-decoration:underline">The Correct Refinement Link to &#8220;All Matches&#8221;</span><br/><a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/PeopleSearch_Link3.png"><img class="alignnone size-full wp-image-1051" title="Link to All Matches" src="http://tristanwatkins.com/wp-content/uploads/PeopleSearch_Link3.png" alt="PeopleSearch Link3 People Search Result Organisation Browser Link Doesnt Respect Alternate Access Mappings" width="500" /></a>
	</p>
<p><span style="text-decoration:underline">The Incorrect Organisation Chart Link (http://m)</span><br/><a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/PeopleSearch_Link4.png"><img class="alignnone size-full wp-image-1051" title="Broken Link to Organisation Chart" src="http://tristanwatkins.com/wp-content/uploads/PeopleSearch_Link4.png" alt="PeopleSearch Link4 People Search Result Organisation Browser Link Doesnt Respect Alternate Access Mappings" width="500" /></a>
	</p>
<p>It would be incorrect to say that this link is broken. It works, so long as you have name resolution for it. The link is just pointing at the wrong zone, which may not be in DNS. Further, clicking that link may not be desirable or could disrupt the user experience, if the zone is locked down. In short, we explicitly want to avoid edits from that zone in this case, for a number of reasons, all of which I will gloss over here as my preference for a single zone.
	</p>
<p>Long story short: this looks like a bug to me. I&#8217;ll call it a bug. These links are new to User Profiles in SharePoint 2010, so there&#8217;s a likelihood that Alternate Access Mappings were overlooked here.
</p>
<h3>What to do?<br />
</h3>
<p>I still want to use Alternate Access Mappings, because the performance overhead of crawling encrypted data is not unsubstantial. This leaves me with an option to escalate this issue through Microsoft Support, which I really don&#8217;t have the time to do, or we could probably whip up some script quickly to update the results page and fix these two links up, but that&#8217;s not a very elegant solution. This is no longer a pressing need in my case, because this client has opted to delay launch of MySites and People Search for reasons completely off this map, but the bug remains and pertains elsewhere (like in my development environment). I will take this to Microsoft when I can find the time, but that&#8217;s not going to happen in the near future. Until then, any other ideas? </p>
<p><strong>17-03-2011 update</strong>: David noted in the comments that he&#8217;s worked around this by running his sps3:// crawl on a different web application &#8211; even creating one with no real content, specifically for this purpose. <del datetime="2011-03-18T15:37:40+00:00">I haven&#8217;t had a chance to test it out yet but it sounds like a great idea to me. See the comment for more detail.</del> Anthony has put this to the test for our client and all is working now. Hooray!</p>
<h3>Afterword: Server Name Mappings</h3>
<p>Somewhere along the line I&#8217;ve got myself in a muddle regarding Server Name Mappings. When we first encountered this problem, I configured both Alternate Access Mappings and Server Name Mappings (with the same mappings). In this case, I don&#8217;t believe this has caused any problems, but it&#8217;s not necessary and isn&#8217;t correct. Alternate Access Mappings should translate search results to the same zone that you&#8217;re browsing from, without doing any extra work. Server Name Mappings translate crawled data like file shares to other links <em>that don&#8217;t already exist as Alternate Access Mappings</em>. As <a href="http://blogs.msdn.com/b/enterprisesearch/archive/2010/05/28/server-name-mapping-and-alternate-access-mapping-aam.aspx">this Enterprise Search blog post</a> explains, &#8220;Although Server Name Mapping and Alternate Access Mapping achieve seemingly similar results, they work independently, addressing different problems, and should not be used together&#8221;. This is perhaps the only content I&#8217;ve found that clearly explains how to use Server Name Mappings correctly, and is well worth a read.
</p>
<p>It&#8217;s worth noting that the Server Name Mappings had no impact on the Organisation Browser link either.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/people-search-result-organisation-browser-link-doesnt-respect-alternate-access-mappings/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Exams 70-667 and 70-668</title>
		<link>http://tristanwatkins.com/index.php/exams-70-667-and-70-668/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=exams-70-667-and-70-668</link>
		<comments>http://tristanwatkins.com/index.php/exams-70-667-and-70-668/#comments</comments>
		<pubDate>Tue, 15 Mar 2011 18:03:09 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[70-667]]></category>
		<category><![CDATA[70-668]]></category>
		<category><![CDATA[Exam]]></category>
		<category><![CDATA[MCITP]]></category>
		<category><![CDATA[MCTS]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[TechNet]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1829</guid>
		<description><![CDATA[I&#8217;ve just completed exams 70-667 and 70-668 yesterday and today, making me an MCITP: SharePoint Administrator 2010. Woohoo! But this is not an own-horn-tooting exercise; I have a tip to offer on sitting these exams. As I started preparing for these exams last week, I was under the misapprehension that there was very little in [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just completed exams 70-667 and 70-668 yesterday and today, making me an MCITP: SharePoint Administrator 2010. Woohoo! But this is not an own-horn-tooting exercise; I have a tip to offer on sitting these exams.
</p>
<p>As I started preparing for these exams last week, I was under the misapprehension that there was very little in the way of guidance on the Microsoft Learning site. I think I perceived things this way because there wasn&#8217;t much to go on when the exams were first launched. But when I checked again last week I was happy to find a link to a <a href="http://learning.microsoft.com/manager/LearningPlanV2.aspx?resourceId=9173b319-2607-4954-9418-010059016602&amp;clang=en-US&amp;cats=d4e8e42c-3d5a-4a6e-915d-d99556a49bd7">learning plan</a> from the <a href="http://www.microsoft.com/learning/en/us/Exam.aspx?ID=70-667&amp;Locale=en-us">Preparation Materials tab of the 70-667 page</a>. Unfortunately, <a href="http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-668">the 70-668 page</a> does not contain a link to a learning plan (it&#8217;s listed but unlinked), but <a href="http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-668">it does exist</a>! I just searched for it on the Training Catalogue.
</p>
<p><span id="more-1829"></span></p>
<p>I also had a look at other resources, such as the <a href="http://www.accelerated-ideas.com/free-70667-practice-exam.aspx">Accelerated Ideas free practice tests</a>, <a href="http://www.paulgrimley.com/2010/09/sharepoint-2010-configuring-70-667-exam.html">Paul Grimley&#8217;s post</a> and <a href="http://www.benjaminathawes.com/blog/Lists/Posts/Post.aspx?ID=17">Benjamin Athawes&#8217; very thorough review</a>. While I found each of these resources helpful in different ways, I opted to stick strictly to the learning plan, focusing purely on TechNet for the remainder of my study time. I basically clicked through to every link from the Learning Plans – many of which contain many more links. I&#8217;ve just looked at my browser history for the last week. There&#8217;s 267 TechNet pages in there. Obviously, this is a huge amount of information to take in (my brain really hurts), but the quality is great and it&#8217;s very well targeted for a crash course/review like this.
</p>
<p>Probably most importantly, I learned loads! A lot of this content didn&#8217;t exist when I was focused on learning SharePoint 2010, so I (re)acquainted myself with lots of topics that I really should have known more about before starting this process. While there are other more exam-specific approaches to preparation, I feel like I got a great tuition out of this process. I&#8217;ve been marking many links to revisit when I have more time, I&#8217;ve validated some things I was unsure of and I&#8217;ve corrected some misunderstandings. All of this is really valuable for improving quality and for gauging what we do and don&#8217;t know.
</p>
<p>I managed to pull this off with a little over three days of study (for both exams, in total). About a day of that time was spent figuring out where to start, getting distracted, etc., but I was also able to skip quickly through some content that I was already familiar with, so I reckon 3-5 days is probably a decent estimate of how long it will take to prepare from these learning plans. Keep in mind: I&#8217;ve been working with SharePoint for seven years, and I&#8217;ve been on the Ignite training for SharePoint 2010, so I may be taking some things for granted.
</p>
<p>How did I do? I got a 950/1000 on 70-667 and a 930/1000 on 70-668. 700 is required to pass. In retrospect, this may be over-preparation, but I neither know where else I might draw the line of sufficient preparation, nor do I have any regrets about the additional knowledge I&#8217;ve acquired. SharePoint is a complicated beast. Exams like these are sometimes the only catalysts for learning broader/deeper than our daily duties allow. </p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/exams-70-667-and-70-668/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Conficker Protection Breaks Search</title>
		<link>http://tristanwatkins.com/index.php/conficker-protection-breaks-search/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=conficker-protection-breaks-search</link>
		<comments>http://tristanwatkins.com/index.php/conficker-protection-breaks-search/#comments</comments>
		<pubDate>Thu, 03 Mar 2011 01:08:38 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[IT Management]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Conficker]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[Service Application]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[Tasks]]></category>
		<category><![CDATA[Virus]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1667</guid>
		<description><![CDATA[A couple of months ago I was happily building a client&#8217;s SharePoint Server 2010 farm when I stumbled at Search. The Service Application provisioned fine, but when I pushed out topology changes I started to have problems. Later, these problems returned in different forms, but the root cause appears to have been consistent. In this [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of months ago I was happily building a client&#8217;s SharePoint Server 2010 farm when I stumbled at Search. The Service Application provisioned fine, but when I pushed out topology changes I started to have problems. Later, these problems returned in different forms, but the root cause appears to have been consistent. In this post I will review the symptoms, the single fix and the reason why this issue emerged in this environment. I&#8217;ll also look at some unexpected permission changes that occur when new servers receive Search Service Instances.</p>
<p><span id="more-1667"></span></p>
<h3>Round I</h3>
<p>My difficulties started when I attempted to move a newly-provisioned Query Component to a web front end server. When it failed, I tracked the problem down to missing permissions on <em>C:\Windows\Tasks</em>. At this point I didn&#8217;t know why the permissions had been removed and this was actually the first time I&#8217;d noted these permission requirements. <a  href="http://technet.microsoft.com/en-us/library/cc678863.aspx" title="Account permissions and security settings (SharePoint Server 2010)" target="_blank">TechNet suggests</a> WSS_ADMIN_WPG needs Full Control of <em>%WINDIR%\Tasks</em>, but the description of this requirement is &#8220;N/A&#8221;. Oddly, according to this TechNet article, the WSS_WPG group does not appear to need these same rights, although they are assigned by the SharePoint installation/configuration processes &#8211; or at least they are in the environments that I&#8217;ve built.
</p>
<p>Adding to this confusion, I found this strange ULS event, in which the provisioning process tries to <strong>remove</strong> WSS_WPG access to <em>%WINDIR%\Tasks</em> and grant R/W access to the Search service account. This is pretty weird! It might explain why the WSS_ADMIN_WPG group needs Full Control rather than just R/W access, but I wouldn&#8217;t typically expect SharePoint to be modifying ACLs in the Windows directory.
</p>
<p><span style="text-decoration:underline">&#8220;Modifying ACL to allow <SearchAccount> R/W access to &#8216;C:\Windows\Tasks&#8217; and to remove access for WSS_WPG.&#8221;</span><br/><a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/022811_2352_ConfickerPr1.png"><img class="alignnone size-full wp-image-1381" title="ConfickerPr1" src="http://tristanwatkins.com/wp-content/uploads/022811_2352_ConfickerPr1.png" alt="022811 2352 ConfickerPr1 Conficker Protection Breaks Search" width="500" /></a>
</p>
<p>Back to the provisioning problem at hand, once I added the missing permissions for both the WSS_WPG and WSS_ADMIN_WPG local groups on <em>%WINDIR%\Tasks</em> the provisioning process completed successfully. You can also see that the &#8220;Modifying ACL&#8221; event directly precedes the failure to start the new Service Instance. While this event helped me track down the problem, and is clearly related to it, unfortunately I need to leave that mystery behind for now, as there are bigger issues to address in this post.
</p>
<h3>Round II</h3>
<p>Later, this client got back in touch and mentioned that their Search Service Application wasn&#8217;t working. In this case the Search Administration page was available but all Content Sources, Scopes, Crawl Logs, etc. pages failed with errors on the Admin Component.
</p>
<blockquote><p style="margin-left: 36pt">Crawl status: The search service is not able to connect to the machine that hosts the administration component. Verify that the administration component &lt;GUID&gt; in search application &#8216;&lt;Search Service Application name&gt;&#8217; is in a good state and try again.
</p>
</blockquote>
<p>To cut a long story short, my initial troubleshooting didn&#8217;t immediately lead me back to these missing permissions due to a number of other concurrent infrastructure changes which lead me astray. Additionally, when we tried to delete the Search Service Application to recreate it, the deletion failed after removing just one of the Search databases. Eventually we managed to re-provision the Service Application but the topology changes failed again, at which point we identified the missing <em>%WINDIR%\Tasks</em> permissions (again) and granting the missing permissions fixed these problems (almost).</p>
<p>In fact, we also needed to grant missing permissions on <em>\Program Files\Microsoft Office Servers\14.0\Data\Office Server</em>, but I believe that was a one-off related to the failed Search Service Application deletion earlier. One way or the other it doesn&#8217;t appear to be a core issue here. However, I should also mention that I suspect the Search Service Application <strong>deletion</strong> failed because of the missing <em>%WINDIR%\Tasks</em> permissions &#8211; although I&#8217;m basing this entirely on the fact that the ULS events above suggests that a similar process takes place for deletion, by virtue of the &#8220;(<strong>un</strong>)provisioning&#8221; job.
</p>
<h3>Round III</h3>
<p>With Search back up and running, we moved on to other things, but eventually Search started acting up again. Unfortunately I&#8217;ve lost track of the visible failure, but the application logs were full of 6398 and 6482 errors (which typically indicate the unavailability of the service rather than the cause). I vaguely recall that we had items in the index but that new crawls were failing to run. At the time, I was most focused on Gatherer <em>Access Denied</em> messages on the <em>Portal_Content Catalog</em>.</p>
<p>Again, to abbreviate other misguided efforts related to on-going infrastructure work, we eventually found out that the permissions on <em>%WINDIR%\Tasks</em> were missing. Obviously, at this point the most reasonable explanation for the change was a Group Policy setting, so we reviewed the event logs in between the last known good crawl and the first crawl failure. I quickly spotted a Group Policy change message. I recommended that we review the Resultant Set of Policy on this server, just to be absolutely certain the Group Policy wasn&#8217;t applying permission changes in this location. The client assured me this was very unlikely, because they don&#8217;t have an overly restrictive culture, but it turned out this was the one and only file system permission change and it was applied to the Default Domain Security Policy. Presumably the previous Search failures occurred after reboots or some other event that would re-apply this group policy. And presumably all of this strange behaviour can be accounted for by these missing permissions, given that we know they were getting removed and we know that adding them back in fixed the problem.
</p>
<h3>Conficker</h3>
<p>Later that night, curiosity got the better of me. I dug a bit deeper to see if I could identify anything that recommends these permission changes. I found Microsoft Support KB article KB962007, <a href="http://support.microsoft.com/kb/962007">Virus alert about the Win32/Conficker worm</a>. In this article, Microsoft recommends the following mitigation steps to prevent the virus from spreading:
</p>
<blockquote><p style="margin-left: 36pt">Set the policy to remove write permissions to the %windir%\Tasks folder. This prevents the Conficker malware from creating the Scheduled Tasks that can reinfect the system.To do this, follow these steps:
</p>
<ol style="margin-left: 72pt">
<li>
<div>In the same GPO that you created earlier, move to the following folder:
</div>
<p>Computer Configuration\Windows Settings\Security Settings\File System
</p>
</li>
<li>Right-click <strong>File System</strong>, and then click <strong>Add File</strong>.
</li>
<li>In the <strong>Add a file or folder</strong> dialog box, browse to the %windir%\Tasks folder. Make sure that <strong>Tasks</strong> is highlighted and listed in the <strong>Folder</strong> dialog box.
</li>
<li>Click <strong>OK</strong>.
</li>
<li>In the dialog box that opens, click to clear the check boxes for <strong>Full Control</strong>, <strong>Modify</strong>, and <strong>Write</strong> for both <strong>Administrators</strong> and <strong>System</strong>.
</li>
<li>Click <strong>OK</strong>.
</li>
<li>In the <strong>Add Object</strong> dialog box, click <strong>Replace existing permissions on all subkeys with inheritable permissions</strong>.
</li>
<li>Click <strong>OK</strong>.
</li>
</ol>
</blockquote>
<p>In effect, this Group Policy removes the special Read/Write permissions assigned to <em>Authenticated Users</em> on the <em>%WINDIR%\Tasks</em> folder by default. Note: it <strong>replaces</strong> all permissions with those defined in the Group Policy. I suppose the moral of this story is not to apply security settings like this to the Default Domain Security Policy. But fair play to my client for the security diligence in the first place.
</p>
<p><span style="text-decoration:underline">Default <em>%WINDIR%\Tasks</em> permissions for Authenticated Users, without the group policy</span><br/><a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/030111_0031_ConfickerPr11.png"><img class="alignnone size-full wp-image-1028" title="ConfickerPr11" src="http://tristanwatkins.com/wp-content/uploads/030111_0031_ConfickerPr11.png" alt="030111 0031 ConfickerPr11 Conficker Protection Breaks Search" width="500" /></a>
</p>
<p>This issue raises a couple of other questions. What is the best way to handle this for SharePoint servers, given that there are legitimate reasons harden this location? I suppose the best option would be to create another Group Policy for the SharePoint servers OU which will add the local WSS_WPG and WSS_ADMIN_WPG group permissions back on the <em>%WINDIR%\Tasks</em> folder. There will be other options, depending on how your domain/Group Policies are structured, but this illustrates an approach. It would be helpful to understand if the Search account should be added as well, but for now I&#8217;m going on what the installer/configuration wizard does rather than what TechNet fails to describe fully.</p>
<p>Next question: why isn&#8217;t this issue more common, given that the virus first emerged over two years ago? I suppose the group policy might not have been taken up by many organisations, but it&#8217;s more likely that there are further wrinkles I&#8217;ve not uncovered. I tried to replicate the problem in my single server + DC development environment, but frustratingly, everything worked fine after applying this group policy. I rebooted and confirmed the permission changes, ran a full crawl, ran a query and reviewed event logs, but all seemed fine. I even re-provisioned my Search Service Application and that succeeded. To be perfectly honest I&#8217;m not sure what to make of this. Perhaps this is only an issue once the search topology takes a specific shape? That feels like the most likely explanation. I hope to do more testing on this in future, but for now I wanted to identify a fix that worked for me and which aligns with the settings applied by the SharePoint installer/configuration wizard, should this problem arise for others. I&#8217;m not the first person to discover this problem. I think it&#8217;s actually been around since MOSS 2007, based on some forum posts, but I haven&#8217;t seen it described in relation to this Conficker protection, which hopefully helps make the Group Policy modelling decisions a bit less obscure.</p>
<p>More broadly, I&#8217;d be really curious to hear if anyone has information about the mismatch between TechNet and SharePoint default permissions on <em>%WINDIR%\Tasks</em>, and the further mismatch between the &#8220;Modify ACL&#8221; event, TechNet and the default settings. It may turn out that the WSS_WPG permissions are unnecessary or even undesirable, but given that SharePoint puts them there in the first place, I&#8217;m uncomfortable removing them until there&#8217;s better information to rely on.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/conficker-protection-breaks-search/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Testing Manage Patch Status</title>
		<link>http://tristanwatkins.com/index.php/testing-manage-patch-status/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=testing-manage-patch-status</link>
		<comments>http://tristanwatkins.com/index.php/testing-manage-patch-status/#comments</comments>
		<pubDate>Sat, 19 Feb 2011 20:45:30 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[IT Management]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Cumulative Updates]]></category>
		<category><![CDATA[DCOM]]></category>
		<category><![CDATA[GAC]]></category>
		<category><![CDATA[Manage Patch Status]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[Timer Job]]></category>
		<category><![CDATA[Windows Installer]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1726</guid>
		<description><![CDATA[In my last post I discussed how the Product Version Job timer job uses the Windows Installer Service to query the installed state of SharePoint 2010 servers and how the Manage Patch Status page in Central Administration displays this information. I also touched on my reservations about what we can infer from this data. In [...]]]></description>
			<content:encoded><![CDATA[<p>In my last post I discussed how the Product Version Job timer job uses the Windows Installer Service to query the installed state of SharePoint 2010 servers and how <a title="Inside Manage Patch Status" href="http://tristanwatkins.com/index.php/inside-manage-patch-status/" target="_blank">the Manage Patch Status page in Central Administration displays this information</a>. I also touched on my reservations about what we can infer from this data. In this post, I&#8217;m diving a bit deeper in to that question.<br />
<span id="more-1726"></span></p>
<h3>A quick word about the DCOM Permissions</h3>
<p>In my last post, I put off a discussion of the security implications of granting the Farm account DCOM Local Activation rights to the Windows Installer Service (in order to clear the DCOM 10016 event log errors). I was worried about this approach, since this DCOM Component opens up the Windows Installer, which represents a different type of security risk than say&#8230; IIS WAMREG. Following my last post, <a title="Hosed anyway" href="http://twitter.com/harbars/status/37915583504842752" target="_blank">Spencer Harbar suggested</a> that these worries were unfounded, or rather, that the risks are acceptable, since it&#8217;s only a risk if the Farm account gets compromised. He rightly pointed out that you&#8217;d be pretty stuffed at that point anyway. Fair enough. To this end, I&#8217;ll join him in not worrying about it.</p>
<p style="padding-left: 30px;"><span style="text-decoration: underline;">How to fix it</span><br />
If you want to clear the DCOM 10016 errors by granting these rights, you need to assign ownership of <em>HKCR\AppId\{000C101C-0000-0000-C000-000000000046}</em> to Administrators, then grant Local Administrators Full Control. Now you&#8217;ll be able to grant the DCOM Local Activation rights to the Farm Account on this same <em>{000C101C-0000-0000-C000-000000000046} </em>component.</p>
<p>Despite carrying a lighter weight on my shoulders, I think it might be helpful to review what came out of my testing, as the job may not be detecting everything we&#8217;d expect at face value. I&#8217;ve also poked a few more holes in the <a title="a Sharepoint Timer Job called “Product Version Job”" href="http://social.technet.microsoft.com/Forums/en-US/sharepoint2010setup/thread/350f0758-6446-4dc9-b029-519852d16b72" target="_blank">Support response</a>, which was the whole reason I started working on this in the first place.</p>
<h3>Testing the Job</h3>
<p>In these tests, I&#8217;m wilfully trying to do stuff you would never want to do in any farm – just to find out what the job &#8220;knows&#8221; about. To this end, I&#8217;ve tried some pretty foolhardy things like:</p>
<ul>
<li>Manually updating DLLs in the GAC.</li>
<li>Manually updating DLLs in the Program Files directories.</li>
<li>Manually killing a Cumulative Update installation while it was half-way complete.</li>
<li>Deleting DLLs from the GAC and the Program Files directories.</li>
<li>Manually updating registry keys.</li>
</ul>
<p>Are these the right tests? They certainly aren&#8217;t comprehensive. Suffice it to say I&#8217;m not the right person to comment on what the Windows Installer might be able to detect. In the process of researching this I&#8217;ve already become far more acquainted with Reflector and the Windows Installer than I ever hoped to be. I&#8217;ve even found out that there&#8217;s a Windows Installer blog and Windows Installer MVPs. Who knew? But are these changes the types of things that could cause disruption in a farm? Probably. And should we understand if the <em>Manage Patch Status</em> page in Central Admin accounts for problems like these? I think so. Thus, this imperfect testing by the wrong person.</p>
<h4>Replacing DLLs</h4>
<p>In the first two tests below, I copied DLLs out of an installed instance of the December Cumulative Update and replaced the installed June Cumulative Update versions of these DLLs in another machine with these newer copies. The DLLs I was looking at were for <em>Microsoft Excel Services Components</em> and <em>Microsoft InfoPath Forms Services</em> (this is how they are listed on the <em>Manage Patch Status</em> page).</p>
<h5>Manually replacing a DLL in the GAC</h5>
<p>When I manually deleted my June CU <em>Microsoft.Office.Excel.Server</em> DLL from the GAC using <em>GACUtil</em> (as you shouldn&#8217;t do), and replaced it with a newer version from the December CU, I broke my Excel Services Service Application. When I ran the Product Version Job timer job it failed to detect the change (the new version was never reflected in Manage Patch Status). Everything looked exactly as it normally would in the application event log, except for this message immediately after the normal 1015/1035 entries:</p>
<p style="margin-left: 36pt;"><span style="font-family: Segoe UI; font-size: 9pt;"><em>The Execute method of job definition Microsoft.SharePoint.Administration.<strong>SPProductVersionJobDefinition</strong> (ID 9bb9d31b-7c8b-4fd7-b52d-5fec40aa3607) threw an exception. More information is included below.<br />
</em></span></p>
<p style="background: white; margin-left: 36pt;"><em><span style="font-family: Segoe UI; font-size: 9pt;">Failed to call GetTypes on assembly Microsoft.Office.Excel.Server.MossHost, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c. Method &#8216;IsEditEnabledForCurrentUser&#8217; in type &#8216;Microsoft.Office.Excel.Server.MossHost.MossHost&#8217; from assembly &#8216;Microsoft.Office.Excel.Server.MossHost, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c&#8217; does not have an implementation.</span><span style="color: black; font-family: Georgia; font-size: 10pt;"><br />
</span></em></p>
<p style="padding-left: 60px;"><a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/TestingManagedPatchStatus3.png"><img class="alignnone size-full wp-image-1728" title="TestingManagedPatchStatus3" src="http://tristanwatkins.com/wp-content/uploads/TestingManagedPatchStatus3.png" alt="TestingManagedPatchStatus3 Testing Manage Patch Status" width="500" /></a></p>
<p>This error is informative, and would probably help me track down the issue in due course, so the Product Version Job is earning its keep, but it&#8217;s unfortunate that this version change is not displayed in <em>Manage Patch Status</em> in any way. In short: this is a good reason to run the job but it&#8217;s also good to know this kind of problem won&#8217;t appear in <em>Manage Patch Status</em>.</p>
<h5>Manually Replacing a DLL version in the Program Files directories</h5>
<p>Next, I tried to manually replace DLLs in the Program Files directories with newer versions. I searched throughout the Hive and the <em>C:\Program Files\Microsoft Office Servers\14.0\</em> directories for other versions of these files. I was working on the assumption that the version in the GAC would be in use (thanks to <a title="SharePoint Nuts and Bolts" href="http://www.sharepointnutsandbolts.com/" target="_blank">Chris O&#8217;Brien</a> for this advice), but I wanted to see if the job would successfully spot changes in these Program Files locations, since this is what the <a title="a Sharepoint Timer Job called “Product Version Job”" href="http://social.technet.microsoft.com/Forums/en-US/sharepoint2010setup/thread/350f0758-6446-4dc9-b029-519852d16b72" target="_blank">Microsoft Support response</a> suggested.</p>
<p>I found the same InfoPath DLL and a differently-named Excel Services DLL in these locations:</p>
<ul>
<li><em>C:\Program Files\Microsoft Office Servers\14.0\Bin\Microsoft.Office.InfoPath.Server.dll</em></li>
<li><em>C:\Program Files\Microsoft Office Servers\14.0\Bin\xlsrv.dll</em></li>
</ul>
<p>I ran the Product Version Job after deleting these files and rebooting. Again, the job failed to detect the changes.</p>
<h5>What happens with added DCOM Local Activation rights?</h5>
<p>If the farm account has DCOM Local Activation rights on the Windows Installer Service, it resolves the DCOM error event log clutter, but these rights don&#8217;t impact whether the job can detect these changed DLLs.</p>
<h4>Killing an installation part-way through</h4>
<p>Next, I rolled back to a stable state and ran the December Cumulative Update against a June Cumulative Update installation. At a random point during the installation I killed the installer (not the Products Configuration Wizard). While the installer was running I wasn&#8217;t able to monitor activity in ULS Viewer because SharePoint was being patched. However, I was looking at the <em>dbo.ServerVersionInformation</em> table in SQL Management Studio and I could see new rows with updated versions appearing as it progressed. <strong>The Cumulative Update installer was writing to the same table that the Product Version Job updates</strong><em>.</em></p>
<h5>Running the Products Configuration Wizard after fixing the failed installation</h5>
<p>Later, I fixed up my December CU installation and ran the Products Configuration Wizard. When it was running, I could see that something very similar to the Product Version Job was logged. The same informational events (1035) appeared successfully in the application event logs, without any DCOM errors or &#8220;Failed to Connect to Server&#8221; (1015) application event log warnings. Presumably this succeeds (with or without the DCOM rights) because the Setup account that&#8217;s running the wizard is a local admin and therefor already has the DCOM Local Activation rights. However, I&#8217;m not sure what&#8217;s gained by updating <em>Manage Patch Status</em> at this point, since the <em>dbo.ServerVersionInformation</em> table was already updated by the installer. I won&#8217;t dwell on that thought too much though, since there may be a very good reason for the update at this time.</p>
<p>For those who are interested in the workings of this update, it&#8217;s worth noting that the Products Configuration Wizard appears to use the <span style="font-family: Microsoft Sans Serif; font-size: 8pt;">Microsoft.SharePoint.Administration.SPServerProductInfo.UpdateProductInfoInDatabase(Guid serverGuid) </span>method. <strong>It effectively calls the same thing as the Product Version Job timer job</strong>, if I&#8217;m reading all of this right. A fuller glimpse of the ULS logs looks like this:</p>
<p style="padding-left: 30px;"><span style="font-family: Microsoft Sans Serif; font-size: 8pt;">Updating SPPersistedObject SPServer Name=SPSQL. Version: 120278 Ensure: False, HashCode: 2459215, Id: 20c667df-1bc3-486b-869c-a3ba40f83af5, Stack:<br />
at Microsoft.SharePoint.Administration.SPPersistedObject.BaseUpdate()<br />
at Microsoft.SharePoint.Administration.SPServerProductInfo.UpdateProductInfoInDatabase(Guid serverGuid)<br />
at Microsoft.SharePoint.PostSetupConfiguration.FinalizeTask.Run()<br />
at Microsoft.SharePoint.PostSetupConfiguration.TaskThread.ExecuteTask()<br />
at System.Threading.ExecutionContext.runTryCode(Object userData)<br />
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)<br />
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()</span></p>
<p style="padding-left: 30px;"><a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/TestingManagedPatchStatus2.png"><img class="alignnone size-full wp-image-1729" title="TestingManagedPatchStatus2" src="http://tristanwatkins.com/wp-content/uploads/TestingManagedPatchStatus2.png" alt="TestingManagedPatchStatus2 Testing Manage Patch Status" width="500" /></a></p>
<p>It&#8217;s also worth noting that this log entry correlates with the <em>MsiInstaller</em> 1035 success events in the application event logs that I mentioned above.</p>
<h4>What about deleting DLLs?</h4>
<p>While investigating this, I ran all of this by my colleague <a title="Jalil Sear's [MCPD SharePoint 2010] Weblog" href="http://jasear.wordpress.com/" target="_blank">Jalil Sear</a>. He came up with an interesting idea: that I shouldn&#8217;t just update the DLLs, but I should try to delete them altogether. So I deleted <em>Microsoft.Office.Excel.Server</em> and <em>Microsoft.Office.Infopath.Server</em> <a href="http://support.microsoft.com/kb/873195">from the registry and the GAC</a> and reset IIS. I re-ran the Product Version Job and it completed normally, with and without DCOM Local Activation rights. Nothing was detected, although my entire Manage Service Applications page was annihilated. Again, we might have expected this to be reported in <em>Manage Patch Status</em>.</p>
<h3>Summary of Test Results</h3>
<ul>
<li>
<div style="background: white;"><span style="color: black;">The Product Version Job reports &#8220;Success&#8221; in the Timer Job Status, regardless of all of these considerations. It may fail for other reasons, but all of these issues obtain when the job reports a successful status. In other words, the job reports &#8220;success&#8221; with or without DCOM rights.<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: black;">It&#8217;s not clear to what extent the Product Version Job can account for problems while the installer runs, because the installer already makes updates to the <em>dbo.ServerVersionInformation</em> table as it goes.<br />
</span></div>
<ul>
<li>
<div style="background: white;"><span style="color: black;">One might reasonably wonder what would happen to whatever was being updated while the installer failed. Obviously it&#8217;s hard to make broad statements about that when we don&#8217;t know at which precise point it failed, but in any case the remedial action will be to run the installer again - potentially after fixing something else. One way or the other, if you have this problem, I don&#8217;t see how the timer job is going to help because it&#8217;s unlikely it will be able to run against this server until the installation is fixed.</span></div>
</li>
</ul>
</li>
<li>
<div style="background: white;"><span style="color: black;">It&#8217;s also not clear to what extent the Product Version Job can account for issues that occur while the Products Configuration Wizard is running – effectively for the same reasons as above. If you have a problem with that wizard, the remedial action will be to fix the problem and run the wizard again.</span></div>
</li>
<li>
<div style="background: white;"><span style="color: black;"><em>Manage Patch Status</em> doesn&#8217;t seem to account for other issues in the GAC or the Program Files directories, such as manual changes to DLLs. Presumably this is because these actions have been taken without using the Windows Installer Service.</span></div>
<ul>
<li>
<div style="background: white;"><span style="color: black;">Obviously, if you&#8217;re running an environment where these sorts of changes are routinely possible, then this job is a lesser concern than Change Management processes that might prevent these things from happening in the first place, but it&#8217;s worth knowing that the job did not detect these changes in my tests.</span></div>
</li>
</ul>
</li>
<li>
<div style="background: white;"><span style="color: black;">It&#8217;s not clear in which cases the Product Version Job is useful for recording the difference between product versions on different servers, since the installer should have already updated the <em>dbo.ServerVersionInformation</em> table</span><span style="color: black;">.<br />
</span></div>
<ul>
<li>
<div style="background: white;"><span style="color: black;">One example where the job might be useful is the case where a server is restored to a pre-upgrade state. However, it&#8217;s likely that this restore operation will prompt some other remedy, like reverting all of the other servers in the farm or upgrading this server again. So the usefulness feels limited to me. Still, this is probably sufficient reason to run the job absent any other considerations. </span></div>
</li>
</ul>
</li>
<li>
<div style="background: white;"><span style="color: black;">The <em>Manage Patch Status</em> page is still useful for tracking differences across servers where the servers are legitimately running at different patch levels, although typically that&#8217;s not a state you&#8217;d want to run in for long.<br />
</span></div>
</li>
</ul>
<h3 style="background: white;"><span style="color: black;">Putting this information to use</span></h3>
<p style="background: white;"><span style="color: black;">I wouldn&#8217;t suggest reading this as the full story, since I only ran these against a single SQL/SharePoint box. At a minimum the Product Version Job can detect product version mismatches when a server is restored, and servers in long-term mismatched states. As a plus, it will throw an error in your application logs to let you know if there&#8217;s something wrong with the DLL that it expects in the GAC. Unfortunately, that isn&#8217;t reported to <em>Manage Patch Status</em>. In any case, as teams/farms increase in size this job becomes more useful for shared understanding. </span></p>
<p style="background: white;"><span style="color: black;">At the end of this review, I think the important thing is to recognise the limits of the data in <em>Manage Patch Status</em>. It&#8217;s not going to be bullet-proof. For any actions taken with the Windows Installer, this data should be pretty reliable, since it&#8217;s updated during install, with the Products Configuration Wizard and with the Product Version Job. For anything else - who knows? It doesn&#8217;t appear to have been designed for that, and I have no idea what a SharePoint timer job would look like that could offer these kinds of assurances. Presumably it would have to be a management agent of some sort. At that point you&#8217;re in to Configuration or Operations Management territory and we already have different tools for that. Come to think of it, if you really want to know, &#8220;<em>the install state of the machine</em>&#8220;, that&#8217;s probably what you&#8217;re really looking for. But if you want to know the current versions of successfully-installed SharePoint Products on all servers in your farm, then <em>Manage Patch Status</em> should be accurate in most cases, because of the Product Version Job. </span></p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/testing-manage-patch-status/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Inside Manage Patch Status</title>
		<link>http://tristanwatkins.com/index.php/inside-manage-patch-status/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=inside-manage-patch-status</link>
		<comments>http://tristanwatkins.com/index.php/inside-manage-patch-status/#comments</comments>
		<pubDate>Tue, 15 Feb 2011 01:06:00 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[IT Management]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[DCOM]]></category>
		<category><![CDATA[Manage Patch Status]]></category>
		<category><![CDATA[Reflector]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[Timer Job]]></category>
		<category><![CDATA[Windows Installer]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1698</guid>
		<description><![CDATA[Back in August, I stumbled across a new type of DCOM 10016 error in SharePoint 2010, caused by the Product Version Job timer job. When I found the error, I was primarily concerned with keeping my event logs clean. Since then, the inelegance of my original work-around and the incomplete picture I contented myself with [...]]]></description>
			<content:encoded><![CDATA[<p>Back in August, I stumbled across <a href="http://tristanwatkins.com/index.php/product-version-job-dcom-10016-strikes-again/">a new type of DCOM 10016 error in SharePoint 2010, caused by the <em>Product Version Job</em> timer job</a>. When I found the error, I was primarily concerned with keeping my event logs clean. Since then, the inelegance of my original work-around and the incomplete picture I contented myself with at the time began to nag at me, but I only recently started digging deeper, prompted largely by the fact that this topic has generated more traffic to my blog in the last quarter than any other.</p>
<p><span id="more-1698"></span></p>
<p>This is a fairly lengthy consideration, but I think it&#8217;s necessary to cover these details because the information in the <em>Managed Patch Status</em> (AKA <em>Check Product and Patch Installation Status</em>) page in Central Administration may not be revealing what we&#8217;d reasonably infer.</p>
<p>In this post and the posts to follow, I&#8217;ll cover a few things:</p>
<ul>
<li>Why I think granting Local Activation rights to the Windows Installer Service puts a dent in the least-privileged model.</li>
<li>What this DCOM error means to the reliability of data displayed in the new <em>Manage Patch Status</em> page in SharePoint 2010 Central Administration.</li>
<li>What the job does and doesn&#8217;t do, with or without rights to launch the Windows Installer Service.</li>
<li>Considerations for disabling the Product Version Job timer job.</li>
</ul>
<h3>The Problems</h3>
<p>I believe most people will come to this problem in the way that I have, which I&#8217;ve seen repeated on many TechNet fora since then. People want to know why they are getting inundated with approximately 100 DCOM 10016 System event log errors and twice that many <em>MsiInstaller</em> Application event log warnings and informational events nightly, at around 00:52. The exact number of messages will vary based on the SharePoint products installed in the farm, including related products such as Project Server, Office Web Apps, FAST Search, etc. For a more detailed review of these events and how they can be identified, please refer to <a href="http://tristanwatkins.com/index.php/product-version-job-dcom-10016-strikes-again/">my original post</a>.</p>
<p>Additionally, we have a nightly timer job which seems to be failing, per these DCOM errors. The job itself claims to check, &#8220;<em>the install state of the machine and puts that data into the database&#8221;.</em> This is rather vague. As of August this is what I understood:</p>
<ul style="margin-left: 38pt;">
<li>The timer job appeared to fail to use the Windows Installer Service to perform a check of installed SharePoint products.</li>
<li>I didn&#8217;t know anything about how that check happened or how the data was used afterwards.</li>
<li>I didn&#8217;t know if the event log messages were ephemeral (annoying only because they generate clutter), as they are for the IIS WAMREG DCOM 10016 errors.</li>
<li>I felt it would be bad to grant rights to launch the Windows Installer Service to the farm account in an otherwise-least-privileged configuration (where the Farm account does not already have local administration rights).</li>
</ul>
<p>In this post I want to dwell on the inner workings of the  job itself, and then come back to the implications for our event logs, permissions and job scheduling.</p>
<h3>Inside the Job</h3>
<p>In order to find out how the job works, I had to crack it open in <a href="http://www.red-gate.com/products/dotnet-development/reflector/">.NET Reflector</a> and SQL Management Studio. I need to disclaim this post, because I&#8217;m not a developer, and to be perfectly honest I&#8217;m in a bit over my head with Reflector, but I was prompted to investigate in this way based on the apparent misinformation in <a href="http://social.technet.microsoft.com/Forums/en-US/sharepoint2010setup/thread/350f0758-6446-4dc9-b029-519852d16b72">one of the TechNet threads I mentioned above</a>. Geoff Belair went to considerable lengths to work through this topic with Microsoft support, but from what I can tell, there are a number of mistakes in the answer he received. It suggests the wrong database gets updated and is a fairly inaccurate description of what this job does, by my reading of the following clues.</p>
<h4>(In)validating the Microsoft Support Explanation</h4>
<p>It&#8217;s unfair to take a Microsoft Support e-mail which has been re-posted on the web as authoritative, but this was the closest thing to official information I&#8217;ve found, other than the brief words about this job on TechNet and MSDN. The key bit of that reply that I wanted to immediately verify was this:</p>
<p style="margin-left: 36pt;"><em><span style="font-size: 10pt;">The Timer Job &#8220;Product Version Job&#8221; runs every night at 12:52 A.M and analyze which are the dlls are updated, once it get the information then it&#8217;s put the updated version data on to Content Database &#8220;dbo.version&#8221; table.</span><br />
</em></p>
<p>So I took a look at the <em>dbo.Versions</em> table in the Central Admin Configuration database (never do this in production, of course).<br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/InsideManagedPatchStatus1.png"><img class="alignnone size-full wp-image-1706" title="InsideManagedPatchStatus1" src="http://tristanwatkins.com/wp-content/uploads/InsideManagedPatchStatus1.png" alt="InsideManagedPatchStatus1 Inside Manage Patch Status" width="500" /></a></p>
<p>What caught my eye was that there was no product information in this table whatsoever. I knew that the job was checking for the state of individual products based on the <em>MsiInstaller</em> informational events in the Application logs. So I poked around a little more and found what I was expecting in the <em>dbo.ServerVersionInformation</em> table:<br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/InsideManagedPatchStatus2.png"><img class="alignnone size-full wp-image-1707" title="InsideManagedPatchStatus2" src="http://tristanwatkins.com/wp-content/uploads/InsideManagedPatchStatus2.png" alt="InsideManagedPatchStatus2 Inside Manage Patch Status" width="500" /></a></p>
<p>Having looked at this data, I realised it was pretty familiar. I went back to Central Administration, looked in the <em>Upgrade and Migration</em> section and clicked on <em>Check Product and Patch Installation Status</em>, which took me to this <em>Manage Patch Status</em> page. The key thing to note is that the version numbers and the Patch Status columns match the data on the page below precisely. I&#8217;ve actually manually updated that data just to give it a sneaky check, and this page is definitely pulling it in from that source. You&#8217;d never do this on a real system, however. I wouldn&#8217;t even do it without having a recent snapshot for my development environment.<br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/InsideManagedPatchStatus3.png"><img class="alignnone size-full wp-image-1708" title="InsideManagedPatchStatus3" src="http://tristanwatkins.com/wp-content/uploads/InsideManagedPatchStatus3.png" alt="InsideManagedPatchStatus3 Inside Manage Patch Status" width="500" /></a></p>
<p>At this point I was pretty confident the timer job was trying to update this table, but I wanted to get a bit better assurance before testing the job in anger. I also wanted to understand how the Windows Installer Service gets involved, as this activity seems to take place outside the ULS logs.</p>
<h4>Analysing the job in .NET Reflector</h4>
<p>Cracking open ULS Viewer while running the timer job, you immediately see the fourth event in my screenshot below. <em>Job-admin-product-version</em> calls <em>SPProductVersionJobDefinition</em>.<br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/InsideManagedPatchStatus4.png"><img class="alignnone size-full wp-image-1709" title="InsideManagedPatchStatus4" src="http://tristanwatkins.com/wp-content/uploads/InsideManagedPatchStatus4.png" alt="InsideManagedPatchStatus4 Inside Manage Patch Status" width="500" /></a></p>
<p>This is where I opened Reflector. I started with <em>Microsoft.SharePoint.dll</em> and drilled down to <em>Microsoft.SharePoint.Administration.SPProductVersionJobDefinition</em>, which executes <em>SPServerProductInfo.UpdateProductInfoInDatabase(Server.Local.Id);<br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/InsideManagedPatchStatus8.png"></a><a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/InsideManagedPatchStatus5.png"><img class="alignnone size-full wp-image-1710" title="InsideManagedPatchStatus5" src="http://tristanwatkins.com/wp-content/uploads/InsideManagedPatchStatus5.png" alt="InsideManagedPatchStatus5 Inside Manage Patch Status" width="500" /></a><br />
</em></p>
<p><em>SPServerProductInfo</em> calls the <em>GetMsiData</em> method, which works with a number of <em>SPMsi</em> methods (<em>SPMsi.GetPropertyUsingProductCode</em>, <em>SPMsi.MsiEnumPatchesEx</em>, <em>SPMsi.MsiGetPatchInfoEx</em>, <em>SPMsi.SPMsiSafeHandle</em>, <em>SPMsi.MsiOpenDatabase</em>, <em>SPMsi.MsiDatabaseQuery</em>). Further down, <em>SPProductVersionRow</em> is clearly collecting the same data as the columns of the SQL <em>dbo.ServerVersionInfromation</em> table I examined earlier. If interested in these workings, I&#8217;d recommend perusing it with Reflector at a more leisurely pace than this.<br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/InsideManagedPatchStatus6.png"><img class="alignnone size-full wp-image-1711" title="InsideManagedPatchStatus6" src="http://tristanwatkins.com/wp-content/uploads/InsideManagedPatchStatus6.png" alt="InsideManagedPatchStatus6 Inside Manage Patch Status" width="500" /></a></p>
<p>Note: all of the <em>SPMsi.Msi* </em>methods are using <em>msi.dll</em>, which is the Windows Installer.<br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/InsideManagedPatchStatus71.png"><img class="alignnone size-full wp-image-1712" title="InsideManagedPatchStatus7" src="http://tristanwatkins.com/wp-content/uploads/InsideManagedPatchStatus71.png" alt="InsideManagedPatchStatus71 Inside Manage Patch Status" width="500" /></a></p>
<h3>The Product Version Job&#8217;s use of the Windows Installer</h3>
<p>From here, I could explore the workings of the Windows Installer in finer detail – but for the purposes of our SharePoint knowledge, all that&#8217;s really important to know is that the timer job is using the Windows Installer&#8217;s own methods to query the installed product versions on the servers. As I understand it, the Windows Installer typically stores this data in the registry, at <em>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\</em>. That&#8217;s an oversimplification, but stick with me for now.</p>
<p>We can see a number of SharePoint products in this location. They are all keys beginning with &#8220;90140000&#8243;. Taking a look at the data in these keys, it&#8217;s pretty clear that it aligns with the data that&#8217;s written to SQL&#8217;s <em>dbo.ServerVersionInformation</em> table (down to the registry key value in the &#8220;Patchable Unit&#8221; column). Additionally, these are all the same products that are identified in our Application event log messages. You can even see the patched products have a longer key, with a suffix that looks something like &#8220;_Office14.OSERVER_{48017E90-141F-4948-A576-F4B9B6284B70}&#8221;.<br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/InsideManagedPatchStatus81.png"><img class="alignnone size-full wp-image-1713" title="InsideManagedPatchStatus8" src="http://tristanwatkins.com/wp-content/uploads/InsideManagedPatchStatus81.png" alt="InsideManagedPatchStatus81 Inside Manage Patch Status" width="500" /></a></p>
<p>Perhaps most importantly, the <a href="http://msdn.microsoft.com/en-us/library/aa370859%28v=VS.85%29.aspx"><em>ProductVersion</em> Property of the Windows Installer</a> is what defines the four &#8220;version&#8221; values (including &#8220;DisplayVersion&#8221;) of the Uninstall keys above. This is the key information that the Product Version Job is after, and the name of this timer job feels like an even better fit in this context.</p>
<p>While unravelling the job in this way has given me a fair amount of confidence about how SharePoint retrieves this information, there are still a number of issues to consider. For starters, I suspect people look at <em>Manage Patch Status</em> data and feel pretty confident about that representation of the installation state of their servers. Being a fairly skeptical type, I suspected that the Windows Installer&#8217;s &#8220;record keeping&#8221; would be good up to a point, but no further, so I put on my demolition hat and started breaking stuff, in an effort to place that point. In <a href="http://tristanwatkins.com/index.php/testing-manage-patch-status/">my next post</a> I&#8217;ll review those test results, then consider the implications for DCOM rights to the Windows Installer Service and the timer job scheduling options.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/inside-manage-patch-status/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>User Profile Synchronisation and the SharePoint Server 2010 December 2010 Cumulative Update</title>
		<link>http://tristanwatkins.com/index.php/user-profile-synchronisation-sharepoint-server-december-2010-cumulative-update/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=user-profile-synchronisation-sharepoint-server-december-2010-cumulative-update</link>
		<comments>http://tristanwatkins.com/index.php/user-profile-synchronisation-sharepoint-server-december-2010-cumulative-update/#comments</comments>
		<pubDate>Fri, 04 Feb 2011 10:44:37 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[IT Management]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Cumulative Updates]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[User Profile Synchronisation Service]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1676</guid>
		<description><![CDATA[I finally tested the SharePoint Server 2010 December 2010 CU package over the last couple of nights. The good news is that it actually worked (I&#8217;ve had trouble with August and October) and it has a load of fixes, particularly for the User Profile Service Application. The bad news is that it&#8217;s known to require restarting the [...]]]></description>
			<content:encoded><![CDATA[<p>I finally tested the <a href="http://support.microsoft.com/kb/2459257">SharePoint Server 2010 December  2010 CU package</a> over the last couple of nights. The good news is that it  actually worked (I&#8217;ve had trouble with August and October) and it has a load of  fixes, particularly for the User Profile Service Application. The bad news is  that it&#8217;s known to require restarting the User Profile Synchronisation Service  after it completes. In my tests, I also had to temporarily <strong>re-add the  Farm account as Local Admin and reboot</strong> before re-starting the service,  after running the installer and the Products Configuration Wizard. It failed  when I just tried to temporarily add the Farm account as local admin and log  off/on again, so the reboot before re-starting the service is likely to be  necessary.</p>
<p>UPDATE 19/2/2011: I got a comment from Spencer Harbar today (below) noting that restarting the SPTimer service is sufficient after temporarily adding the farm account as local admin. The reboot isn&#8217;t necessary to acquire the new rights although in my test I did need to reboot after running the installer.</p>
<p><span id="more-1676"></span></p>
<p>Other bad stuff about it:</p>
<ul>
<li>It took forever to install and it required a reboot afterwards.</li>
<li>The Products Configuration Wizard gets to step 9 of 9 quickly, then gives a  % complete status. Mine was running at 10% with no new updates for about 20  minutes before it failed. After it failed, all of the installation log errors were related to the  User Profile Service Application, so I rebooted and ran the Products  Configuration Wizard again. This time it completed successfully fairly quickly  but the Patch Status and Upgrade page in Central Admin didn&#8217;t get updated for  this next run. Not sure what to make of that, but everything seemed fine except  for the User Profile Service Application when I logged back on.</li>
<li>I have some new FIM-related application event log errors regarding FIM  workflows that I haven&#8217;t had a chance to look in to, but a Full Sync seemed to  be working so they may not be important.</li>
</ul>
<p>What I&#8217;d recommend:</p>
<ul>
<li>Run the installer and <strong>add the Farm account as local admin before  rebooting</strong>.
<ul>
<li>Note: per Spence&#8217;s comment, this isn&#8217;t necessary. Restarting the SPTimer service is sufficient. The installer may prompt for a reboot though.</li>
</ul>
</li>
<li>Run the Products Configuration Wizard, restart the User Profile  Synchronisation Service (wait for it) and then remove the Farm account as local  admin after it restarts successfully.</li>
<li>It&#8217;s probably still not worth installing this unless you know you need it.</li>
</ul>
<p>Update: for a more detailed consideration of these topics, check <a title="SharePoint Server Updates for SP2010 aka Cumulative Updates–Should I apply them?" href="http://www.chandima.net/Blog/archive/2011/01/21/sharepoint-server-updates-for-sp2010-aka-cumulative-updates%E2%80%93should-i-apply-them.aspx" target="_blank">Chandima&#8217;s post</a>, which walks through all of this step-by-step and links to much of the supporting guidance than I&#8217;ve trampled over here. <img src='http://tristanwatkins.com/wp-includes/images/smilies/icon_smile.gif' alt="icon smile User Profile Synchronisation and the SharePoint Server 2010 December 2010 Cumulative Update" class='wp-smiley' title="User Profile Synchronisation and the SharePoint Server 2010 December 2010 Cumulative Update" /> </p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/user-profile-synchronisation-sharepoint-server-december-2010-cumulative-update/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Office Web Apps Infrastructure Considerations</title>
		<link>http://tristanwatkins.com/index.php/office-web-apps-infrastructure-considerations/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=office-web-apps-infrastructure-considerations</link>
		<comments>http://tristanwatkins.com/index.php/office-web-apps-infrastructure-considerations/#comments</comments>
		<pubDate>Mon, 06 Dec 2010 19:17:08 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Client applications]]></category>
		<category><![CDATA[Consultancy and Design]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Licenses]]></category>
		<category><![CDATA[Office 2010]]></category>
		<category><![CDATA[Office Web Apps]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[WAN]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1622</guid>
		<description><![CDATA[I&#8217;ve recently been involved in a somewhat unusual client engagement, in that I was designing and delivering the infrastructure without knowing the shape of the IA or solution architecture. Obviously, this imposed some restrictions on what we could define, but it also meant that I had to handle some aspects of the engagement that would [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently been involved in a somewhat unusual client engagement, in that I was designing and delivering the infrastructure without knowing the shape of the IA or solution architecture. Obviously, this imposed some restrictions on what we could define, but it also meant that I had to handle some aspects of the engagement that would normally be taken care of by other colleagues. To that end, I suppose some of these considerations aren&#8217;t purely infrastructure-specific, but they could be in an engagement like this one and they&#8217;re things that infrastructure people should understand. Hopefully it&#8217;ll be useful for solutions people as well.</p>
<p><span id="more-1622"></span></p>
<p>As you will have surmised from the title, we were deploying the Office Web Apps. In this case they were being installed with a new SharePoint Server 2010 Standard farm. This is a list of considerations that cropped up during the engagement and a few other bits I&#8217;ve picked up since RTM:</p>
<ul>
<li><strong>WAN Acceleration</strong>: The Office Web Apps help performance over the WAN. This hadn&#8217;t occurred to me until I read the recently-released TechNet guidance on <a title="Client solutions for WAN environments (SharePoint Server 2010)" href="http://technet.microsoft.com/en-gb/library/gg441256.aspx#section2" target="_blank">geographically-dispersed environments</a>, but this all makes sense, because the documents load progressively. This is explained in more detail in the article. It&#8217;s worth keeping this in mind as an aid for global deployments and worth further taking note of the licensing concerns below if the Office Web Apps will be deployed for this reason.</li>
<li><strong>Licensing</strong>: The Office Web Apps license model is based on the <em>volume license for the Office 2010 client</em>. These licenses are supplementary to any SharePoint license concerns, although you might choose to install both in the same farm. This <a title="The twists and turns of Office Web Apps' software license" href="http://www.infoworld.com/d/developer-world/twists-and-turns-office-web-apps-software-license-895" target="_blank">Infoworld article</a> explains it better than anything else I&#8217;ve read. The major implications of this are:
<ul>
<li>Assuming this Infoworld article is right, and if the farm will be accessed by external users, they will not be covered by a SharePoint FIS license. All of those users will need to have an Office 2010 volume license (not a home license) in order to access these documents in the browser.
<ul>
<li>This license could be provided by the consuming business or whoever, but it would need to be in place. How this would be monitored, what is and isn&#8217;t acceptable use and how licensing audits would work in this scenario are all issues that would need to be inspected in some detail with a licensing specialist.</li>
<li>Presumably you could deploy a web application that&#8217;s disconnected from the Office Web Apps service applications in order to maintain compliance, but then you negate the WAN optimisation benefits mentioned above, and this clearly has broad IA implications. I&#8217;d also recommend confirming the legitimacy of this approach for compliance.</li>
</ul>
</li>
<li>On the other hand, internal users are covered by an Office 2010 volume license if it has been purchased, even if the software isn&#8217;t installed on their machines. You might find this is the case with enterprise agreements. This means internal users can start to take advantage of the Office Web Apps even if an Office 2010 upgrade is months or years in the future.</li>
<li>Talk to a licensing specialist to confirm all of this as it pertains to your deployments, as there are surely other wrinkles I&#8217;m not covering and I&#8217;m basing this on an article written by a journalist rather than Microsoft or a licensing specialist. The only reason I&#8217;m referencing that article is that it&#8217;s the clearest explanation I can find.</li>
</ul>
</li>
<li><strong>Install Media</strong>: Once you&#8217;ve got the licenses in place, you may have some trouble finding the install media. Even though the media is for 64-bit systems, it&#8217;s downloaded from 32-bit downloads on the volume license site.</li>
<li><strong>Caching</strong>: The Office Web Apps Cache is a site collection that should be <a title="Manage the Office Web Apps cache" href="http://technet.microsoft.com/en-us/library/ee837422.aspx#bkmk_move_cache" target="_blank">moved to it&#8217;s own database</a> for each web application (in most cases), as <a title="Office Web App default cache size is 100 GB" href="http://tristanwatkins.com/index.php/office-web-app-default-cache-size-is-100-gb/" target="_blank">the default cache size is 100GB</a>. One way or the other, it&#8217;s a different type of content and it makes sense not to clutter actual content databases with this cache data. There are probably different database backup/restore requirements as well. If the existence of this site collection is news to you, read those links above before going any further.</li>
<li><strong>Topology</strong>: Make sure to plan your <a title="Planning Office Web Apps (Installed on SharePoint 2010 Products)" href="http://technet.microsoft.com/en-us/library/ff431682.aspx#bkmk_server_dist" target="_blank">topology</a> for the Office Web Apps. You will be adding three new service applications and they will tax your system differently based on how they are used. This is a big topic and the planning guidance is fantastic, so I&#8217;ll merely point out the <a title="Estimate performance and capacity requirements for Office Web Apps" href="http://download.microsoft.com/download/7/F/0/7F069D0B-B6BD-4692-868B-E8555BB72445/OfficeWebAppsCapacityPlanningDoc.docx" target="_blank">Estimate performance and capacity requirements for Office Web Apps</a> document and leave it at that.</li>
<li><strong>Database Permissions and Application Pools</strong>: The Office Web Apps have some quite unexpected database permission requirements. From the <a title="Deploy Office Web Apps (Installed on SharePoint 2010 Products)" href="http://technet.microsoft.com/en-us/library/ff431687.aspx" target="_blank">Deploy Office Web Apps</a> TechNet guidance:
<p><em><img src="http://i.technet.microsoft.com/Ff431687.note%28en-us,office.14%29.gif" alt="Ff431687.note%28en us,office.14%29 Office Web Apps Infrastructure Considerations"  title="Office Web Apps Infrastructure Considerations" /><strong>Note: </strong> You can choose to create a new application pool to  be used with a  service application. When creating a new application  pool, you can  specify the security account used by the application pool  to be a  predefined Network Service account, or you can specify a managed   account. <strong>The account must have read\write privileges for the SPContent   database and SPConfig database</strong>. For more information about services   account permissions in SharePoint, see <a id="ctl00_MTCS_main_ctl12" href="http://technet.microsoft.com/en-us/library/cc678863.aspx">Account permissions and security settings (SharePoint Server 2010)</a>.<br />
</em><br />
This blows a few holes in the least-privileged model. In this case, we  chose to create a new application pool for the Office Web Apps service  applications and ran it under the farm account, since the permission requirements are so pervasive. This could be its own separate identity, but the important thing for me is that using the farm account  for these services contains the extensive privileges more than granting  these wider permissions to the Service Applications application pool  would. One way or the other, we&#8217;re looking at a different application  pool for security reasons. And if anyone&#8217;s curious if this is really  necessary, it is. You will be unable to actually use the Office Web Apps  without these database permissions in an otherwise-least-privileged configuration.</li>
</ul>
<p>There are a number of other topics to consider before deploying the Office Web Apps, such as the default open behaviour, Office version requirements, browser support and other topics from the solutions world that I daren&#8217;t venture in to, but hopefully these infrastructure considerations won&#8217;t be overlooked when focusing on those issues.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/office-web-apps-infrastructure-considerations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint 2010 Development Environment Performance Test Results</title>
		<link>http://tristanwatkins.com/index.php/sharepoint-2010-development-environment-performance-test-results/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sharepoint-2010-development-environment-performance-test-results</link>
		<comments>http://tristanwatkins.com/index.php/sharepoint-2010-development-environment-performance-test-results/#comments</comments>
		<pubDate>Thu, 02 Dec 2010 00:09:23 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[ASUS]]></category>
		<category><![CDATA[Dell]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[VMWare]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1542</guid>
		<description><![CDATA[Drum roll please! At long last, I bring you the results of a great deal of testing. Here&#8217;s the background: SharePoint Development Productivity and Virtualisation Technologies SharePoint 2010 Development Environment Performance Tests I&#8217;ve said my preamble in those posts, so I&#8217;ll cut to the chase here. High-Level Summary of Findings Disk performance and bus speed [...]]]></description>
			<content:encoded><![CDATA[<p>Drum roll please! At long last, I bring you the results of a great deal of testing. Here&#8217;s the background:</p>
<ul>
<li><a title="SharePoint Development Productivity and Virtualisation Technologies" href="http://tristanwatkins.com/index.php/sharepoint-development-productivity-and-virtualisation-technologies/">SharePoint Development Productivity and Virtualisation Technologies</a></li>
<li><a title="SharePoint 2010 Development Environment Performance Tests" href="http://tristanwatkins.com/index.php/sharepoint-2010-development-environment-performance-tests/">SharePoint 2010 Development Environment Performance Tests</a></li>
</ul>
<p>I&#8217;ve said my preamble in those posts, so I&#8217;ll cut to the chase here.</p>
<p><span id="more-1542"></span></p>
<h3>High-Level Summary of Findings</h3>
<ul>
<li>
<div><em>Disk performance and bus speed did not prove to be significant factors</em> in these results (except for virtual machine start-up times). Obviously there are fundamental differences about SSD (yet untested) that may skew this picture, but I will be surprised to see big differences. If we&#8217;ve got these tests right, and they are actually representative of the tasks that slow down development, then we would expect to see wider variance across bus or disk speeds. We don&#8217;t.</div>
<ul>
<li>
<div>This assumes the disk is relatively uncontended. Virtual machine performance degrades in every type of test while large file operations are running concurrently on the same disk. This could be copying an ISO, importing or exporting a virtual machine or any other sustained large file operations.</div>
<ul>
<li>
<div>At a minimum, this is certainly an argument for running VMs on their own spindle, whether it&#8217;s over USB, eSATA or SATA. This may be an area where SSD shines.</div>
</li>
</ul>
</li>
<li>These disk performance figures can be found towards the bottom of this post. Desktop performance was nearly identical running on USB2 at 5400 RPM versus a RAID0 stripe or a RAID1 array on 7200 RPM disks. Laptop performance was also nearly identical over USB2 5400 RPM versus eSATA 7200 RPM.</li>
</ul>
</li>
<li><em>Hyper-V performance has been poor on all laptops</em> with i-Series CPUs. This is more pronounced in some areas than others. Our three-year-old model with a Core 2 Duo actually outperforms the new i7 in some cases. When these results are added to known driver issues with Hyper-V on many newer laptop GPUs, we&#8217;re looking at a configuration that&#8217;s unfit for SharePoint 2010 development.</li>
<li>
<div><em>VMWare Workstation outperforms Hyper-V on laptops</em> by significant margins in most areas. The exceptions to this are start-up time and performance during the first 10-30 minutes of use (I believe VMWare is ballooning during this time). After that, VMWare Workstation is faster than Hyper-V in every type of test.</div>
<ul>
<li>As a long-time advocate of Hyper-V despite usability deficiencies, I was probably more surprised by the significance of these differences than anyone. I wrongly assumed that Type-I hypervisors would outperform Type-II in nearly every way. While that may hold true on server class hardware, it doesn&#8217;t hold true here. I&#8217;m a convert.</li>
</ul>
</li>
<li>
<div>While less pronounced, <em>these same findings hold true on the desktop</em>.</div>
<ul>
<li>Desktop performance is very quick on VMWare Workstation, considerably out-performing even Amazon EC2.</li>
<li>We can realise significant productivity gains by moving all users who are primarily office-based to a desktop + VMWare Workstation configuration from laptop + Hyper-V, at a fairly small cost (probably half the cost of EC2 over three years – see <a href="http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-cost-analysis/">my recent posts on EC2</a> for more information).</li>
<li>Desktop performance on Hyper-V, while notably slower than VMWare Workstation, is generally faster than VMWare Workstation on the i7 laptop.</li>
</ul>
</li>
<li>
<div>Laptop performance is significantly improved on our current model with VMWare Workstation. These improvements are also realised on the newer model laptop, but the performance delta between the two physical systems is not so significant that it&#8217;s compelling to move to a low speed i7 from a reasonable speed Core 2 Duo.</div>
<ul>
<li>The total times for the &#8220;End-to-end site creation to debugging tests&#8221; were <em>two and a half minutes faster</em> with VMWare Workstation compared to Hyper-V on the Dell XPS M1330. Moving from Hyper-V to VMWare Workstation for laptop users is now an obvious choice.</li>
<li>
<div><em>The benefit of spending on i7 processors is in doubt</em>. We are seeing very minor performance <em>penalties</em> when adding more than two CPUs in both VMWare Workstation and Hyper-V for most tests. There were also very minor improvements for some tasks, but on the whole there does not appear to be a measurable benefit. This might vary if the host OS is doing a great deal with the CPU, but that is liable to cause other contention issues than just in the CPU (on a laptop).</div>
</li>
<li>
<div>The only tasks that appeared to use all 8 cores in a SharePoint VM were:</div>
<ul>
<li>Retract/Deploy of a solution (but only very briefly)</li>
<li>Create web app, or Create site collection (but at low percentages)</li>
<li>Rebuild with Code Analysis (but not fully)</li>
</ul>
</li>
<li>We will be running future tests on i5 processors at higher clock speeds to see how these models perform relative to the 1.6 GHz i7.</li>
</ul>
</li>
<li>The User Profile Service Connection doubles first page load times after an IISRESET in all test cases. I consider this a full validation of <a href="http://tristanwatkins.com/index.php/user-profile-service-connection-slow-first-page-load/">these preliminary findings</a>.</li>
</ul>
<h3>Snapshot of key data</h3>
<p><a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint216.png"><img src="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint216.png" alt="120210 0009 SharePoint216 SharePoint 2010 Development Environment Performance Test Results" width="500" title="SharePoint 2010 Development Environment Performance Test Results" /></a></p>
<h3>The Data</h3>
<p>How to read the data:</p>
<ul>
<li><strong>Hardware</strong>: the physical laptop or desktop model (or Amazon&#8217;s EC2)</li>
<li><strong>Virtualisation</strong>: &#8220;Hyper-V&#8221; is short-hand for the Hyper-V role in Windows Server 2008 R2. &#8220;VMWare 7.1.2&#8243; is short-hand for VMWare Workstation.</li>
<li><strong>#CPU</strong>: the number of physical CPU presented to the guest operating systems. Multiple logical cores were only tested in the 4&#215;2 results below.</li>
<li><strong>Disk</strong>: the physical disk configuration where the virtual hard drives are running.</li>
<li><strong>RAM</strong>: the amount of RAM running inside the SharePoint Server 2010 VM. The Amazon EC2 instances were &#8220;large instances&#8221; but the domain controller was running locally.</li>
<li><strong>Test: </strong>The tests have been described in more detail in my last post.</li>
<li><strong>Result 1, 2, 3:</strong> Each test was carried out three times. The far-right column, <strong>Average Result</strong>, is an average of the three.</li>
<li>The Two &#8220;<span style="color: #a6a6a6;"><strong>Average Load…</strong></span>&#8221; rows are an average per-result of the three rows above them. These are tests built on SharePoint 2010 default site templates, which anyone should be able to replicate.</li>
<li>The &#8220;<span style="color: #a6a6a6;"><strong>Total create to debug time</strong></span>&#8221; row is a sum of the five rows above it.</li>
<li>All results are in seconds. In cell G21 below, 524 seconds = 9 minutes and 2 seconds.</li>
<li>For more information on the tests and the testing methodology, see <a href="http://tristanwatkins.com/index.php/sharepoint-2010-development-environment-performance-tests/">my last post</a>.</li>
</ul>
<h3>Hyper-V versus VMWare tests, all other things being equal</h3>
<p><span style="text-decoration: underline;">Dell XPS M1330, running Hyper-V<br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint224.png"><img src="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint224.png" alt="120210 0009 SharePoint224 SharePoint 2010 Development Environment Performance Test Results" width="500" title="SharePoint 2010 Development Environment Performance Test Results" /></a><br />
</span></p>
<p><span style="text-decoration: underline;">Dell Studio XPS 1645 laptop, running Hyper-V<br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint234.png"><img src="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint234.png" alt="120210 0009 SharePoint234 SharePoint 2010 Development Environment Performance Test Results" width="500" title="SharePoint 2010 Development Environment Performance Test Results" /></a><br />
</span></p>
<p><span style="text-decoration: underline;">ASUS V7-P7H55E desktop, running Hyper-V<br />
</span>Note: these Hyper-V tests were accidentally carried out while the VM was running on a RAID 0 stripe rather than on the System disk, so this is not apples and apples, but later disk tests on VMWare Workstation indicated that this shouldn&#8217;t make much of a difference, so I&#8217;ve left these results in, with this comment. <span style="text-decoration: underline;"><br />
</span></p>
<p><a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint242.png"><img src="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint242.png" alt="120210 0009 SharePoint242 SharePoint 2010 Development Environment Performance Test Results" width="500" title="SharePoint 2010 Development Environment Performance Test Results" /></a></p>
<p><span style="text-decoration: underline;">Dell XPS M1330, running VMWare Workstation<br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint252.png"><img src="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint252.png" alt="120210 0009 SharePoint252 SharePoint 2010 Development Environment Performance Test Results" width="500" title="SharePoint 2010 Development Environment Performance Test Results" /></a><br />
</span></p>
<p><span style="text-decoration: underline;">Dell Studio XPS 1645 laptop, running VMWare Workstation<br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint272.png"><img src="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint272.png" alt="120210 0009 SharePoint272 SharePoint 2010 Development Environment Performance Test Results" width="500" title="SharePoint 2010 Development Environment Performance Test Results" /></a><br />
</span></p>
<p><span style="text-decoration: underline;">ASUS V7-P7H55E desktop, running VMWare Workstation<br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint262.png"><img src="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint262.png" alt="120210 0009 SharePoint262 SharePoint 2010 Development Environment Performance Test Results" width="500" title="SharePoint 2010 Development Environment Performance Test Results" /></a></span></p>
<h3>VMWare Workstation i7 tests with 4 or 8 cores</h3>
<p><span style="text-decoration: underline;">Dell Studio XPS 1645 laptop, running VMWare Workstation with 4 CPU<br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint292.png"><img src="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint292.png" alt="120210 0009 SharePoint292 SharePoint 2010 Development Environment Performance Test Results" width="500" title="SharePoint 2010 Development Environment Performance Test Results" /></a></span></p>
<p><span style="text-decoration: underline;">ASUS V7-P7H55E desktop, running VMWare Workstation with 4 CPU<br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint282.png"><img src="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint282.png" alt="120210 0009 SharePoint282 SharePoint 2010 Development Environment Performance Test Results" width="500" title="SharePoint 2010 Development Environment Performance Test Results" /></a></span></p>
<p><span style="text-decoration: underline;">Dell Studio XPS 1645 laptop, running VMWare Workstation with 4 CPU, 2 Cores Each<br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint2113.png"><img src="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint2113.png" alt="120210 0009 SharePoint2113 SharePoint 2010 Development Environment Performance Test Results" width="500" title="SharePoint 2010 Development Environment Performance Test Results" /></a><br />
</span></p>
<p><span style="text-decoration: underline;">ASUS V7-P7H55E desktop, running VMWare Workstation with 4 CPU, 2 Cores Each<br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint2102.png"><img src="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint2102.png" alt="120210 0009 SharePoint2102 SharePoint 2010 Development Environment Performance Test Results" width="500" title="SharePoint 2010 Development Environment Performance Test Results" /></a></span></p>
<h3>Amazon EC2 Results</h3>
<p>Notes:</p>
<ul>
<li>Times were much slower one day than others. This hasn&#8217;t been measured over time, but it&#8217;s worth keeping in mind. Other EC2 users reported similar problems on the same day.</li>
<li>Also note: a couple of rows of test data (245 and 248) have been accidentally deleted, but the results were not unexpected in any way.</li>
<li>Row 263 has no data because measuring time to desktop with EC2 would be too imprecise. It would normally be available within five minutes from start, for reference.</li>
</ul>
<p><a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint2122.png"><img src="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint2122.png" alt="120210 0009 SharePoint2122 SharePoint 2010 Development Environment Performance Test Results" width="500" title="SharePoint 2010 Development Environment Performance Test Results" /></a></p>
<h3>Disk Tests on VMWare Workstation with two cores</h3>
<p>The format of these tests change slightly, as I am grouping all disk permutations for the Dell Studio XPS 1645 together, then moving on to the ASUS V7-P7H55E desktop. I grouped them this way because the tests were fundamentally different for laptops and desktops. I did not get the time to repeat the laptop tests on the Dell XPS M1330.</p>
<p><span style="text-decoration: underline;">Dell Studio XPS 1645 laptop with VM running on 5400 RPM USB2<br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint2161.png"><img src="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint2161.png" alt="120210 0009 SharePoint2161 SharePoint 2010 Development Environment Performance Test Results" width="500" title="SharePoint 2010 Development Environment Performance Test Results" /></a><br />
</span></p>
<p><span style="text-decoration: underline;">Dell Studio XPS 1645 laptop with VM running on 7200 RPM eSATA<br />
</span><a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint217.png"><img src="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint217.png" alt="120210 0009 SharePoint217 SharePoint 2010 Development Environment Performance Test Results" width="500" title="SharePoint 2010 Development Environment Performance Test Results" /></a></p>
<p><span style="text-decoration: underline;">ASUS V7-P7H55E desktop with VM running on 5400 RPM USB2<br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint2131.png"><img src="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint2131.png" alt="120210 0009 SharePoint2131 SharePoint 2010 Development Environment Performance Test Results" width="500" title="SharePoint 2010 Development Environment Performance Test Results" /></a></span></p>
<p><span style="text-decoration: underline;">ASUS V7-P7H55E desktop with VM running on a 2nd set of RAID 0 spindles<br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint2141.png"><img src="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint2141.png" alt="120210 0009 SharePoint2141 SharePoint 2010 Development Environment Performance Test Results" width="500" title="SharePoint 2010 Development Environment Performance Test Results" /></a></span></p>
<p><span style="text-decoration: underline;">ASUS V7-P7H55E desktop with VM running on a 2nd set of RAID 1 spindles<br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint2151.png"><img src="http://tristanwatkins.com/wp-content/uploads/120210_0009_SharePoint2151.png" alt="120210 0009 SharePoint2151 SharePoint 2010 Development Environment Performance Test Results" width="500" title="SharePoint 2010 Development Environment Performance Test Results" /></a></span></p>
<p>&#8230;and with that, I&#8217;ll let you draw your own conclusions. Should anyone want to contribute supplementary test data in the comments here, or carry out further tests (perhaps with SSD), I would love to see the results. As I mentioned in the last post, there&#8217;s still more testing to do.</p>
<p>Update 08 June 2011:<a title="SharePoint 2010 Development Environment Performance: SSD, i5 vs. i7, WEI and Sandy Bridge" href="http://tristanwatkins.com/index.php/sharepoint-2010-development-environment-performance-ssd-i5-i7-wei-sandy-bridge/">SharePoint 2010 Development Environment Performance: SSD, i5 vs. i7, WEI and Sandy Bridge</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/sharepoint-2010-development-environment-performance-test-results/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>SharePoint 2010 Development Environment Performance Tests</title>
		<link>http://tristanwatkins.com/index.php/sharepoint-2010-development-environment-performance-tests/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sharepoint-2010-development-environment-performance-tests</link>
		<comments>http://tristanwatkins.com/index.php/sharepoint-2010-development-environment-performance-tests/#comments</comments>
		<pubDate>Wed, 01 Dec 2010 06:30:35 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[ASUS]]></category>
		<category><![CDATA[Dell]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[VMWare]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1328</guid>
		<description><![CDATA[As I indicated in my last post, I&#8217;ve been plundering the depths of SharePoint development productivity in recent months. Understanding the context established in that post is pretty essential to understanding what follows here. In a nutshell, I&#8217;m trying to improve system performance for current users of our SharePoint development environment. This is not as [...]]]></description>
			<content:encoded><![CDATA[<p>As I indicated in <a title="SharePoint Development Productivity and Virtualisation Technologies" href="http://tristanwatkins.com/index.php/sharepoint-development-productivity-and-virtualisation-technologies/" target="_blank">my last post</a>, I&#8217;ve been plundering the depths of SharePoint development productivity in recent months. Understanding the context established in that post is pretty essential to understanding what follows here. In a nutshell, I&#8217;m trying to improve system performance for current users of our <a title="SharePoint Development Environment" href="http://tristanwatkins.com/index.php/building-a-sharepoint-20072010-development-environment/" target="_blank">SharePoint development environment</a>. This is not as simple as examining the <a title="Windows Experience Index" href="http://windows.microsoft.com/en-GB/windows7/products/features/windows-experience-index" target="_blank">Windows Experience Index</a> on a number of laptop models. I needed to consult with our users to identify which tasks are slow for them and devise tests that would allow me to measure system performance on different physical and virtual systems. In this post I will describe the systems, the tests and the testing process before reviewing the results.</p>
<h3>The Tests</h3>
<p>The 21 tests that we settled on were the result of discussions with a number of the core developers, consultants and architects at <a title="Content and Code" href="http://www.contentandcode.com/pages/default.aspx" target="_blank">Content and Code</a>, plus a few tests that I threw in to confirm/disconfirm some of my suppositions, such as <a title="ser Profile Service Connection and Slow First Page Load" href="http://tristanwatkins.com/index.php/user-profile-service-connection-slow-first-page-load/" target="_blank">the impact of the User Profile Service Connection on first page load time</a>. All 21 tests were run three times for each permutation of hardware candidate and virtualisation technology. We also tested on Amazon EC2. I will discuss the testing process in more detail in a moment.</p>
<p><span id="more-1328"></span></p>
<p>These tests have been selected for a few reasons:</p>
<ul>
<li>They are tests that anyone can run, including Visual-Studio-allergic types like myself.</li>
<li>They re-enact real-world productivity loss. All tests needed to be significant on our current system or they were thrown out.</li>
<li>They needed to account for tasks that impact non-developers as well as people that have their head down in code 40 hours/week.</li>
<li>They needed to be examples of tests that would stress systems in different ways.</li>
</ul>
<p><span style="text-decoration: underline;">First page load tests</span><br />
These tests were designed to examine what, if any impact different sets of features, functionality and structure might have on first page load times after the application pool is recycled or IIS is reset (while gathering a large set of data to make comparisons across systems). I also wanted to fully validate my preliminary findings about the User Profile Service Connection.</p>
<p>I ran these tests against NTLM-authenticated web applications with the following root site collections:</p>
<ul>
<li>Central Administration</li>
<li>Blank Site</li>
<li>MySite</li>
<li>Blank Site, with no User Profile Service Connection</li>
<li>The Content and Code website solution (structure, without content)</li>
<li>A custom intranet solution (structure, without content)</li>
</ul>
<p>All of these first page load tests were repeated for application pool recycles and IIS resets.</p>
<p><span style="text-decoration: underline;">End-to-end site creation to debugging tests<br />
</span>I hope these tests are fairly self-explanatory. I used the <a title="Content and Code" href="http://www.contentandcode.com/pages/default.aspx" target="_blank">Content and Code</a> website solution because it&#8217;s a public site that people can examine if they want to understand more about the structure of the solution and the scope of customisation tested here. <span style="text-decoration: underline;"><br />
</span></p>
<ol>
<li> Create new NTLM-authenticated web application from the GUI</li>
<li> Create new Publishing Portal Site Collection from the GUI, at the root of the new web application</li>
<li> Deploy Content and Code website solution from Visual Studio</li>
<li> <span style="text-decoration: line-through;">Delete the publishing site collection</span> (this was a necessary step, but not a test that I timed)</li>
<li>Create Content and Code website (structure, without content) from the GUI</li>
<li> Debug Content and Code website solution in Visual Studio</li>
</ol>
<p><span style="text-decoration: underline;">Core development tests</span><br />
These tests were added to account for pure development activity for large projects with lots of dependencies. We turned Code Analysis on for the first test because this is a feature that&#8217;s very useful but taxes systems pretty heavily. The code deployment times were all fairly small relative to other tests here, but we need to keep in mind that this could be repeated literally hundreds of times per-day. Note: full deployment is accounted for above in the end-to-end test.</p>
<ul>
<li> Rebuild Large Project w/Code Analysis</li>
<li> Deploy Large Project to GAC/BIN</li>
</ul>
<p><span style="text-decoration: underline;">Disk/IO tests</span><br />
These tests were thrown in because they have an impact on productivity even if they aren&#8217;t particularly routine. For the first test I measured the time from turning on the VM until the desktop rendered after logging on. The second test doesn&#8217;t really meet the &#8220;real world&#8221; criteria I name above, but it is a task that can be a productivity barrier in some cases.</p>
<ul>
<li> Time to desktop</li>
<li> Run full crawl (three web apps, no content)</li>
</ul>
<h3>The Testing</h3>
<p>The testing process was entirely subject to personal fallibility, as I carried these tests out myself using fairly imprecise methods like a browser-based stopwatch running on my host system (I made sure not to time things inside the guest, where time can slip occasionally). I also went to great lengths to carry out these tests when the systems were performing optimally; I would run through all of the tests once before recording the first set of results. I felt this approach was the best way to discount random variance. The test results were largely very consistent, so I believe these efforts paid off. Obviously the down-side to testing in this manner is that real work is not carried out in a vacuum, but I don&#8217;t see any other way to come up with repeatable tests aside from measures like these. It&#8217;s what works for science, after all.</p>
<h3>The Virtualisation Technologies</h3>
<p>As I mentioned in my last post, I chose to limit the virtualisation technologies to a single technology from each of the types I described. I had to postpone testing against &#8220;local systems&#8221; due to time pressures. It was the option that fell off because we are unlikely to ditch virtualisation any time soon. It works well for us.</p>
<p>To reiterate here, the candidate technologies were VMWare Workstation 7.1, the Hyper-V role in Windows Server 2008 R2 and Amazon&#8217; s EC2 IaaS offering (a Red Hat implementation of the Xen hypervisor). Again, there&#8217;s background for all of this in my last post.</p>
<h3>What About the Server Room?</h3>
<p>One thing I haven&#8217;t discussed in any detail so far is VDI or Remote Desktop services. I briefly touched on shared development environments, but I&#8217;ve not talked about hosted, individualised development environments. The reason we ruled this out is cost. While this would probably be the best-performing option, all other things being equal, the costs associated with providing this level of performance in the server room would be pretty enormous. For our purposes we might have exceeded power, cooling and weight limitations before we considered the costs of new blade centres and SANs. These costs would probably be even greater in the datacentre. In short, the same criticism applies to individualised hosted development environments as to shared environments: <em>redundancy and resilience at this level is overkill given the      associated costs</em>. The data is not critical and anything that needs to be backed up can be stored elsewhere (like TFS).</p>
<p>Basically, people opt for VDI or Remote Desktop services because a mass of underutilised desktop systems can be heavily consolidated. These systems are not underutilised.</p>
<h3>The Hardware Candidates</h3>
<p><a title="Dell Studio XPS M1330" href="http://www1.euro.dell.com/uk/en/home/ubuntu/xpsnb_m1330_ubuntu/pd.aspx?refid=xpsnb_m1330_ubuntu&amp;cs=ukdhs1&amp;s=dhs" target="_blank">Dell XPS M1330</a><br />
This is our current laptop model, upgraded with a 320GB 7200 RPM local hard drive and 8GB RAM. One of the serious options we&#8217;re considering is a laptop refresh, due to the age and fail rate of the graphics cards and motherboards on these models.</p>
<p><a title="Dell Studio XPS 16" href="http://www1.euro.dell.com/uk/en/business/Dell-Laptops/laptop-studio-xps-16/pd.aspx?refid=laptop-studio-xps-16&amp;s=bsd&amp;cs=ukbsdt1" target="_blank">Dell Studio XPS 1645</a><br />
This was the least expensive decent i7 laptop I could find for testing purposes, and a leading candidate as a replacement laptop. With an £833 (ex-VAT) starting price it could be bumped up to 8GB RAM for a little over £100 more via <a title="4GB, 204-pin SODIMM, DDR3 PC3-8500 memory module" href="http://www.crucial.com/uk/store/mpartspecs.aspx?mtbpoid=4499F2D6A5CA7304&amp;click=true" target="_blank">Crucial</a>. It&#8217;s a very heavy laptop and the glossy shell does it no favours, picking up fingerprints within seconds of use. However, it comes wth a 1.6 GHz i7 processor, 500GB 7200 RPM disk standard, eSATA port and HDMI. No USB3. Basically, nothing here was an absolute deal-breaker for us if performance was good.</p>
<p><a title="ASUS V6-P7H55E" href="http://www.scan.co.uk/products/asus-v6-p7h55e-s1156-intel-h55-express-ddr3-1066-1333-pci-e-%28x16%29-sata-3gb-s-vga" target="_blank">ASUS V6-P7H55E</a><br />
This is a barebones system with the following configuration/cost (as priced at scan.co.uk):</p>
<ul>
<li>ASUS V6-P7H55E barebones System = £121.67</li>
<li>Intel i7 870 (8M Cache, 2.93 GHz) = £217.57</li>
<li>4GB Corsair XMS3 DDR3 PC3-10666 (1333) Dual Channel &#8211; 4x£56.59 = £226.36</li>
<li>1TB Seagate Barracuda SATA 3Gb/s, 7200rpm, 32MB Cache,  8.5 ms, NCQ &#8211; 3x£41.94 = £125.82</li>
<li>Adaptec 1220SA PCI-E RAID Card = £46.40</li>
<li>ASUS 512MB GeForce G 210 DDR2 NVIDIA Graphics Card = £27.71</li>
<li>Total = £768.58 (VAT-inclusive)</li>
</ul>
<p>This system is configured with three internal 1TB hard drives and 16GB RAM. We needed to purchase the RAID card because the motherboard does not have an on-board RAID controller. The graphics card was necessary because there are no integrated graphics on <em>desktop</em> i7 processors (although there are for some i3 and i5 models). The disk configuration was variable, as this was one of the test scenarios. The assumption going in was that two disks would be configured in a RAID 0 stripe or a RAID 1 array, depending on performance outcomes. We would only stripe the disks if there was an obvious, significant performance gain. The third disk would be attached to the on-board SATA controller. I will discuss the recommended configuration in more detail later. Also note: the graphics card supports two monitors across any two of the three outputs, but not three concurrently. Finally, the ASUS V7-P7H55E is nearly identical in every respect. We went with the V6 based on availability.</p>
<p><span style="text-decoration: underline;">Other laptop models</span><br />
During preliminary testing we looked at the Lenovo W510, the Dell Precision 6500 and the Alienware M17x among others. All of these models were candidates that we never ruled out, but we didn&#8217;t have sufficient time with them to run the entire set of tests. However, these models had a reasonably similar configuration to the Dell Studio XPS 1645 and the Hyper-V tests we ran on these systems yielded similar results to our test model.</p>
<p><span style="text-decoration: underline;">Other desktop models<br />
</span>Obviously a barebones system won&#8217;t appeal to everyone as a business solution, and it took me some time to persuade myself that it might be suitable for these environments. It wasn&#8217;t until I actually priced up this model and compared it to the comparable Dell T1500 (+~£600) and HP Z200 (slower than either model, and pricier) that I considered how it might work for us more seriously.<span style="text-decoration: underline;"><br />
</span></p>
<h3>What am I examining, and not examining?</h3>
<p>We have an old laptop, a new laptop, a new desktop and the cloud. Excepting the cloud (which is fixed), we&#8217;re permuting each of these hardware options with VMWare Workstation and Hyper-V test results. We&#8217;re then adding tests to examine the impact of spindle/bus speeds and the impact of adding/removing cores to these VMs. Ultimately, I wanted to quantify the productivity impacts of a change to our hardware and/or virtualisation technology as opposed to a change <em>within</em> our virtualisation technology, insofar as these tests could be decoupled.</p>
<p>I am not examining every virtualisation solution nor every hardware permutation but I do try to account for a number of these variables with these tests. I would love it if people carried out similar tests on their environments to help build knowledge in an area that&#8217;s hugely uninspected today. These are some of the other tests that I hope to revisit next year:</p>
<ul>
<li>The impact of application pooling on first page load times. Preliminary tests suggested there might be a small impact, but nowhere near as significant as the User Profile Service Connection. This warrants further inspection.</li>
<li>The performance of &#8220;local systems&#8221; on this same hardware. As I mention above, these tests had to be de-prioritised, but I feel it would be worth identifying if there are any of these development-specific tasks where some, or all virtual technologies suffer.</li>
<li>While I am running tests against a number of disk buses and configurations, I did not get the opportunity to test SSD performance. Obviously a lot of people will want to know the impact of SSD on these timings, but unfortunately I won&#8217;t have an opportunity to inspect that until early next year at the earliest.</li>
<li>In some cases we work with deep snapshot trees. I want to gain an understanding of how differencing across ten or more files impacts performance for these tasks.</li>
<li>Compare performance of a higher-clocked i5 to a lower-clocked i7 at a similar price range and potentially explore over-clocking options.</li>
<li>Compare slower memory on an otherwise-identical system.</li>
<li>Run VirtualBox tests on an otherwise-identical system.</li>
<li>Assess the impact of virtualisation optimisations.</li>
</ul>
<p>Obviously these tests say nothing about the usability of the system, power costs, mobility and more. For the purposes of this post I&#8217;m only concerned with outlining how I tested system performance for these real world tasks. In <a title="SharePoint 2010 Development Environment Performance Test Results" href="http://tristanwatkins.com/index.php/sharepoint-2010-development-environment-performance-test-results/">the next post</a>, at long last, I will share the results.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/sharepoint-2010-development-environment-performance-tests/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>SharePoint Development Productivity and Virtualisation Technologies</title>
		<link>http://tristanwatkins.com/index.php/sharepoint-development-productivity-and-virtualisation-technologies/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sharepoint-development-productivity-and-virtualisation-technologies</link>
		<comments>http://tristanwatkins.com/index.php/sharepoint-development-productivity-and-virtualisation-technologies/#comments</comments>
		<pubDate>Tue, 30 Nov 2010 06:30:07 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[Virtual Machine]]></category>
		<category><![CDATA[VMWare]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1365</guid>
		<description><![CDATA[In the near future, I&#8217;ll be discussing the results of the SharePoint Development productivity testing that I&#8217;ve been working on for some time. A key part of the background to that story is a choice to virtualise SharePoint, and within that, a choice of virtualisation technology. In this post I&#8217;ll be reviewing the problem in [...]]]></description>
			<content:encoded><![CDATA[<p>In the near future, I&#8217;ll be discussing the results of the SharePoint Development productivity testing that I&#8217;ve been working on for some time. A key part of the background to that story is a choice to virtualise SharePoint, and within that, a choice of virtualisation technology. In this post I&#8217;ll be reviewing the problem in advance of a more detailed discussion of the productivity gains and losses with some of these technologies/approaches.</p>
<p>For clarity, I will quickly state the problem as I see it. <em>SharePoint 2010 system requirements and practitioner mobility requirements are inherently at odds</em>. What guidance exists for this unique problem space tends to regurgitate preferences/allegiances rather than comparing technologies and ratifying assumptions with real-world tests. At best, you get system performance indices for a single laptop model, but these results may vary when any hardware component is changed.</p>
<p><span id="more-1365"></span></p>
<h3>How can virtualisation improve system performance?</h3>
<p>It doesn&#8217;t. People look to virtualisation to solve other problems. However, SharePoint 2010 performs differently in different virtualisation technologies, and the margins of these differences vary by hardware configuration. By all means, the advantages of virtualisation often make it a desirable choice, but these performance characteristics need to be accounted for, lest system performance losses negate the productivity improvements that virtualisation can introduce.</p>
<h3>Why virtualise?</h3>
<p>There are a number of advantages to virtual systems over physical systems. Many of these benefits can also be obtained with sufficiently mature systems management technologies and physical systems, but these benefits are often easier, quicker or less costly to implement through virtualisation. Some of the benefits include:</p>
<ul>
<li>Provisioning times for new SharePoint environments.</li>
<li>Standardisation through cloned, network-isolated virtual machines.</li>
<li>Account for volatility with snapshots.</li>
<li>Standard builds per-project, to share with team      members, reducing project initiation costs.</li>
<li>Virtual appliances produced by Microsoft and third parties,      such as the Information Worker Demo VM.</li>
<li>Reduced hardware rebuilds by removing development tools and      SharePoint from the host.</li>
</ul>
<p>This list is by no means comprehensive. As I say, many of these benefits can be realised with scripting and/or management tools. This list is only intended to illustrate why it&#8217;s a powerful design option.</p>
<h3>An overview of virtualisation and related technologies</h3>
<p>Some example technologies by type:</p>
<ul>
<li>Type I      Hypervisors
<ul>
<li>VMWare       ESXi</li>
<li>Hyper-V</li>
</ul>
</li>
<li>Type II      Hypervisors
<ul>
<li>Oracle       VirtualBox</li>
<li>VMWare       Workstation</li>
</ul>
</li>
<li>Infrastructure      as a Service (IaaS)
<ul>
<li>Amazon       EC2</li>
<li>Azure       VM Role (forthcoming)</li>
</ul>
</li>
<li>Local      Systems
<ul>
<li>Native       Boot Windows 7 (virtual hard disk)</li>
<li>Citrix       XenDesktop (VDI)</li>
</ul>
</li>
</ul>
<p>Note: Virtual PC was not included because it doesn&#8217;t support 64-bit guest operating systems. SharePoint 2010 only runs on 64-bit systems.</p>
<p>Some of the <em>alleged</em> benefits of these approaches:</p>
<ul>
<li>Type I      Hypervisors
<ul>
<li>Better       performance**</li>
<li>Good       management options/tools</li>
</ul>
</li>
<li>Type II      Hypervisors
<ul>
<li>Host       Operating System</li>
<li>Easy       to use</li>
</ul>
</li>
<li>Infrastructure      as a Service (IaaS)
<ul>
<li>Pay       as you go</li>
<li>Scalability</li>
</ul>
</li>
<li>Local      Systems
<ul>
<li>Good       performance</li>
<li>Simple       to use</li>
</ul>
</li>
</ul>
<p>Some of the <em>alleged</em> drawbacks of these approaches:</p>
<ul>
<li>Type I      Hypervisors
<ul>
<li>No       Host Operating System***</li>
<li>Driver       issues*</li>
<li>Complicated</li>
</ul>
</li>
<li>Type II      Hypervisors
<ul>
<li>Historically       poor performance**</li>
<li>Historically,       less manageable (snapshots, import/export, etc)</li>
</ul>
</li>
<li>Infrastructure      as a Service (IaaS)
<ul>
<li>Requires       stable connectivity</li>
<li>Complicated</li>
<li>Pay-As-You-Go       requires diligence</li>
</ul>
</li>
<li>Local      Systems
<ul>
<li>Easy       to damage</li>
<li>Slow       to rebuild</li>
</ul>
</li>
</ul>
<p>*Hyper-V has driver issues on some newer laptops. These are most noticeable with graphics, although I have seen audio driver problems as well. Some of these driver issues may be fixed or <a title="Hyper-V video issues fixed by Windows Server 2008 R2 SP1 Beta?" href="../index.php/hyperv-video-issues-fixed-windows-server-2008-r2-sp1-beta/" target="_blank">alleviated in the SP1 Beta/RC for Windows Server 2008 R2</a>.</p>
<p>**This performance bias is one of the things I will be examining in more detail in later posts.</p>
<p>***This is only &#8220;sort of&#8221; true for Hyper-V, which invokes a &#8220;parent partition&#8221;. This is a special type of virtual machine that fulfils a similar role to a host operating system, and is often referred to as such.</p>
<h3>Why are &#8220;Local Systems&#8221; included?</h3>
<p>I&#8217;ve lumped these in for two reasons. 1) They share some characteristics with the other virtualisation technologies, like running from virtual hard drives. 2) By virtue of being local systems, they fundamentally negate some of the benefits that are obtained through virtualisation. Cloning these machines is not an option if SharePoint is installed and configured. It will be necessary to invest in scripting environment provision in order to retain those productivity benefits. It happens that many people choose to take this scripting approach, but it&#8217;s worth pointing out that network isolation and cloning can achieve similar results through virtualisation, and this does not obtain with Local Systems.</p>
<h3>What about shared, hosted development environments?</h3>
<p>In this scenario I&#8217;m thinking of hosted development farms, where some or all members of a team use a single environment. Based on my subjective reading of the community, this option seems to be fading away. I think there are three reasons why.</p>
<ol>
<li>Cost.      Running development environments on proper infrastructure is expensive.      Most components have been made redundant, the storage will be expensive if      it performs well, the power/cooling costs are considerably more expensive      than for laptops/desktops and you will need to pay people to      manage the systems. Even when these costs are split across multiple      developers, it&#8217;s still expensive unless resources are overcommitted, which negates productivity gains. It also      tends to be more expensive to provision new environments and this process      can often be an obstacle to business agility. In a nutshell, <em>these are      protections that are unnecessary for development environments.</em> Redundancy and resilience at this level is overkill given the      associated costs. The most important assets, such as code, standard images      and project-specific builds can be protected separately.</li>
<li>Hive      pollution. If these farms will support multiple projects, as they often do      per the previous comments about provisioning, then these systems will      inherently differ from the test/stage/UAT/production systems they should      resemble. Core files in the hive can be altered from project-to-project,      resulting in unexpected behaviour when moving code between these      environments. This can seriously complicate troubleshooting and should be      avoided.</li>
<li>Mobility.      These farms aren&#8217;t terribly useful to people who are travelling or who are      working on-site with restricted outbound connectivity.</li>
</ol>
<p>All of this said, there are times when project-specific requirements may make shared farms a good option. It may be sensible to take another look for:</p>
<ul>
<li>Integration      projects.</li>
<li>Developing      with large amounts of data.</li>
<li>Projects      with heavy infrastructure requirements, such as FAST.
<ul>
<li>Perhaps       individual development environments can consume a shared FAST Service       Application?</li>
</ul>
</li>
</ul>
<p>Generally speaking, I believe these resources should be provided only in these niche cases.</p>
<h3>How is this different from IaaS?</h3>
<p>The main differences are costs and capital. Cloud-based infrastructure services are fundamentally just virtualised hosting on an enormous scale. This scale lowers costs to a point where it may be affordable to deploy individual machines per-developer. Although in my analyses I found that IaaS would be more expensive than desktop workstations over three years, this still may be compelling when cash flow issues preclude significant one-time investment or credit flows are restricted. IaaS should also be kept in mind when specific projects require significant provisioning or investment for a short term, for instance testing in a large farm.</p>
<p>While providing a single cloud-based VM per-user solves the first two issues with shared development environments, mobility is still an issue. In many places, stable mobile broadband is flaky at best. Additionally, there are key architectural differences that need to be accounted for when working in the cloud, and on a Pay-As-You-Go basis. I address all of this in <a title="SharePoint 2010 Infrastructure for Amazon EC2 Part IV: Cost Analysis" href="../index.php/sharepoint-2010-infrastructure-amazon-ec2-cost-analysis/" target="_blank">my series on SharePoint 2010 Infrastructure for Amazon EC2</a>.</p>
<h3>Which approach is best?</h3>
<p>This is a high-level overview of the design constraints that limited my choices, before I plunged into a concrete performance review of the remaining technologies.</p>
<p><span style="text-decoration: underline;">Local Systems</span><br />
In my view, Local Systems are only a better choice if the supporting IT systems and processes are very mature and the performance benefits are clear and significant. For most development scenarios, that has yet to be proven. I&#8217;ve postponed this virtual to physical performance comparison for now, as the other benefits of virtualisation have ruled this approach out for us, but I hope to revisit it in the new year.</p>
<p><span style="text-decoration: underline;">IaaS</span><br />
IaaS has two key planning considerations. The first is fairly obvious. Outbound RDP Connectivity needs to be open whenever the systems are needed. I encourage people to consider this in some detail and pilot with many types of users before diving in. The second consideration is Pay-As-You-Go. While cloud providers often have an always-on option, it’s usually pretty pricey. The alternative is to find a mechanism to limit compute usage to when it is truly being used, without introducing usability problems. Management tools or scripting may be able to answer these problems, but no one should enter in to this process thinking it will be easy. <em>This is not an easy option</em>. For a more detailed consideration of these issues, refer to <a title="SharePoint 2010 Infrastructure for Amazon EC2 Part IV: Cost Analysis" href="../index.php/sharepoint-2010-infrastructure-amazon-ec2-cost-analysis/" target="_blank">my series on EC2</a>.</p>
<p><span style="text-decoration: underline;">Type II Hypervisors</span><br />
VMWare Workstation is the most mature desktop virtualisation product on the market, although in recent years VirtualBox has been gaining share. Choosing between these technologies for my tests was never going to be easy, but I reduced it to a few factors:</p>
<ul>
<li>I’ve      never met a VirtualBox user that would complain about using VMWare but I      can’t say that proposition is reversible. There are a lot      of SharePoint practitioners with a strong preference for VMWare.</li>
<li>VMWare      Workstation has native interoperability with other VMWare assets. While VirtualBox      supports the VMDK file format, it’s not quite the same thing.</li>
<li>Both      products are fairly inexpensive in the grand scheme of things.</li>
<li>I had      stability issues with VirtualBox circa version 3.14 that left a bad taste      in my mouth.</li>
</ul>
<p>Perhaps most importantly, I felt that the performance comparison of VMWare Workstation to Hyper-V would be the most valuable decision-making information.</p>
<p><span style="text-decoration: underline;">Type I Hypervisors</span><br />
Most Type I Hypervisors would not be suitable for desktop virtualisation because they don’t have a host operating system. While it would be possible to boot a guest OS and remote in to other Virtual Machines over internal networks, this is a complicated approach and the networking requirements would be enough to put off most developers. However, as mentioned above, Hyper-V is a notable pseudo-exception to this with its parent partition.</p>
<p>We’ve been using the Hyper-V role in Windows Server 2008 R2 for development for a little over a year now. While we have successfully capitalised on many of the productivity benefits of virtualisation through this approach, there are a few issues that have never been entirely satisfactory:</p>
<ul>
<li>Despite      having the host OS, using Hyper-V is still complicated for      non-Systems people – particularly the networking.
<ul>
<li>Work-around       solutions for Wireless networking are fiddly.</li>
<li>Lack       of self-contained NAT requires the use of Internet Connection Sharing in       order to achieve network isolation, which some users struggle with.</li>
</ul>
</li>
<li>Lack of      Sleep/Hibernate is painful for many users.</li>
<li>Graphics      performance is poor – particularly with large PowerPoint/Visio files,      large images and video.</li>
<li>Audio      can also suffer during large file operations.</li>
<li>Hyper-V is not ready for laptop power schemes.</li>
</ul>
<p>Despite these niggles, we’ve continued to use Hyper-V while waiting for the <a title="Hyper-V video issues fixed by Windows Server 2008 R2 SP1 Beta?" href="../index.php/hyperv-video-issues-fixed-windows-server-2008-r2-sp1-beta/" target="_blank">forthcoming graphics/memory improvements in Windows Server 2008 R2 SP1</a>. I would class these usability problems as significant inconveniences that sometimes manifest themselves in lost productivity – particularly with new users learning our approach.</p>
<h3>New Problems in SharePoint 2010</h3>
<p>Since we properly immersed ourselves in SharePoint 2010 development, negative reports about performance started to roll in. These proved hard to validate until a few months ago when my colleagues showed me first page load times after an IISRESET in excess of one minute. This was concrete and repeatable. The problem was more severe on some systems than others, but it was clearly a problem.</p>
<p>The performance tests I’ve been conducting have been an effort to pick apart these results in Hyper-V. Was this new in SharePoint 2010 or did it amplify something that was minor before? Do we get the same problems on different virtualisation technologies, in the cloud or is this a symptom of virtualisation itself? In my next post I’ll discuss the environments, the tests and the testing process.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/sharepoint-development-productivity-and-virtualisation-technologies/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>SharePoint 2010 Infrastructure for Amazon EC2 Part IV: Cost Analysis</title>
		<link>http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-cost-analysis/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sharepoint-2010-infrastructure-amazon-ec2-cost-analysis</link>
		<comments>http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-cost-analysis/#comments</comments>
		<pubDate>Mon, 29 Nov 2010 06:30:10 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Consultancy and Design]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[IaaS]]></category>
		<category><![CDATA[SharePoint 2010]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1456</guid>
		<description><![CDATA[In the previous posts in this series I&#8217;ve discussed the AWS platform and took a closer look at storage, snapshots and provisioning, looked at networking and cloning and then reviewed administration, delegation and licensing. In this post I will analyse cost, which is probably the most important factor when considering a move to the cloud. [...]]]></description>
			<content:encoded><![CDATA[<p>In the previous posts in this series I&#8217;ve discussed <a title="SharePoint 2010 Infrastructure for Amazon EC2 Part I: Storage and Provisioning" href="http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-storage-provisioning/" target="_blank">the AWS platform and took a closer look at storage, snapshots and   provisioning</a>, looked at <a title="SharePoint 2010 Infrastructure for Amazon EC2 Part II: Cloning and Networking" href="http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-cloning-networking/" target="_blank">networking and cloning</a> and then reviewed <a title="SharePoint 2010 Infrastructure for Amazon EC2 Part III: Administration, Delegation and Licensing" href="http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-administration-delegation-licensing/" target="_blank">administration, delegation and licensing</a>. In this post I will analyse cost, which is probably the most important factor when considering a move to the cloud.</p>
<p><span id="more-1456"></span></p>
<p><span style="text-decoration: underline;">Other posts in this series </span></p>
<ul>
<li><a title="SharePoint 2010 Infrastructure for Amazon EC2 Part I: Storage and Provisioning" href="http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-storage-provisioning/">SharePoint 2010 Infrastructure for Amazon EC2 Part I: Storage and Provisioning</a></li>
<li><a title="SharePoint 2010 Infrastructure for Amazon EC2 Part II: Cloning and Networking" href="http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-cloning-networking/">SharePoint 2010 Infrastructure for Amazon EC2 Part II: Cloning and Networking</a></li>
<li><a title="SharePoint 2010 Infrastructure for Amazon EC2 Part III: Administration, Delegation and Licensing" href="http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-administration-delegation-licensing/">SharePoint 2010 Infrastructure for Amazon EC2 Part III: Administration, Delegation and Licensing</a></li>
<li>SharePoint 2010 Infrastructure for Amazon EC2 Part IV: Cost Analysis</li>
<li><a title="Amazon VPC and VM Import Updates" href="http://tristanwatkins.com/index.php/amazon-vpc-and-vm-import-updates/">Amazon VPC and VM Import Updates</a></li>
</ul>
<h3>When would AWS be compelling, despite the complexity?</h3>
<p>I&#8217;ve covered most of the design topics that I feel are relevant to SharePoint 2010 on EC2 now, so it&#8217;s time to talk about why we would use it, despite the obvious complexity that it introduces. The potential benefits included:</p>
<ul>
<li>Scalability. This is pretty hard to question. AWS definitely scales.</li>
<li>Cash flow: The On-Demand services are Pay-As-You-Go, so this clearly helps when cash is tight.</li>
<li>Infrastructure costs/support: This needs to be validated. See the <a title="AWS Premium Support Pricing" href="https://aws.amazon.com/premiumsupport/pricing/" target="_blank">AWS Premium Support Pricing</a> page for more information about the cost of platform support.</li>
<li>Performance: I will be <a title="SharePoint 2010 Development Environment Performance Test Results" href="http://tristanwatkins.com/index.php/sharepoint-2010-development-environment-performance-test-results/">diving much deeper in to performance</a> over the next week or two and will be analysing EC2 alongside laptops and desktops. For now I will say that it performs well, but it isn&#8217;t the best-performing solution that we reviewed. Subjectively I would say that I don&#8217;t think most developers would consider a large instance to be slow.</li>
<li>Availability anywhere (with an outbound RDP connection): Obviously the down side here is that this connection isn&#8217;t always available or reliable everywhere, for instance on a train.</li>
<li>Special scenarios: Some examples I can think of here would include  testing for large farms and office moves. I shan&#8217;t delve in to the  scenarios, but there are sure to be others.</li>
<li>Cost: This needs to be validated, and I will share an example analysis below.</li>
</ul>
<h3>Actual invoice data</h3>
<p>This screen shot of an Amazon invoice (tidied up in Excel a bit) is the real invoice I received for my testing time. I&#8217;ve included it here because I think it illustrates the impact of instance usage time on total costs really well. It&#8217;s by far the largest cost at ~90% of the bill for this testing time, and that included a couple of weeks when I wasn&#8217;t using the instances. During that &#8220;down time&#8221; I was still billed for storage use and Elastic IP address <em>disuse</em>. Keep that in mind, as you will continue to accrue charges even if you shut down your machines.</p>
<p><a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/AWSInvoiceData.png"><img class="alignnone size-full wp-image-1457" title="AWSInvoiceData" src="http://tristanwatkins.com/wp-content/uploads/AWSInvoiceData.png" alt="AWSInvoiceData SharePoint 2010 Infrastructure for Amazon EC2 Part IV: Cost Analysis" width="500" /></a></p>
<h3>Example of costs over three years</h3>
<p>I projected charges based on these figures over three years for a large number of users. There were two main objectives for these calculations:</p>
<ol>
<li>Gain an understanding of the impact of on-demand usage compared to reserved instance costs.</li>
<li>Assess these costs relative to hardware costs over an average lifetime of three years.</li>
</ol>
<p>This analysis was only intended to indicate ballpark costs and some of the figures are nothing more than educated guesses, but I think they should serve their purpose as indications. This analysis didn&#8217;t factor in costs for Amazon&#8217;s Cloud Watch (monitoring and reporting), Amazon Support, licenses (other than Windows) and probably some other factors I overlooked, but I&#8217;m publishing it here as it might be useful for other high-level assessments. But obviously everyone should work this out for their own usage patterns and obviously, all price information is subject to change.</p>
<p><strong>Summary</strong><br />
For seventy users, costs could break down as follows:</p>
<ul>
<li>8 hours/day on-demand = <strong>$1950</strong>/instance over three years.</li>
<li>24 hours/day on-demand = <strong>$5295</strong>/instance over three years.</li>
<li>Mixture of 50 reserved instances running 24 hours/day and 20 On-Demand  Instances running 8 hours day = <strong>$3779</strong>/instance over three years.</li>
<li>24 hours/day reserved instances = <strong>$4511</strong>/instance over three years.</li>
</ul>
<p>The difference in cost between on-demand usage 8 hours/day vs. 24  hours/day is enormous. Even the difference between 70 on-demand instances at an average of 8 hours/day compared to 70 reserved instances is huge: reserved instances are more than twice the cost. A mixture of reserved instances and on-demand usage probably won&#8217;t help enough to make it compelling. The only way that EC2 appears to be cost  effective for large instances, used routinely, is to manage usage effectively. The detail for these calculations is provided below, with monthly costs. Those totals have been multiplied by 36 months and divided by 70 users for the cost summaries above.</p>
<p><span style="text-decoration: underline;">An important note regarding Reserved Instances and cash flow</span><br />
Reserved instances have an up-front cost of $910 per-instance per-year (or $1400 per-instance per-three-year-commitment) before usage charges are included (at a lower, reserved rate of $.24 per-instance per-hour). This means that <em>reserved instances are a lot less viable for organisations looking to EC2 for cash flow benefits</em>. The figures above were calculated using the $910 up-front cost, as I don&#8217;t believe most people will commit to three years of usage from the start. The reserved instance prices would clearly come down quite a bit with that three-year commitment, so feel free to recalculate as you like, but keep in mind that higher up-front cost is even worse for cash flow.</p>
<p><span style="text-decoration: underline;">Cost assumptions<br />
</span></p>
<ul>
<li> 70 instances x 8 hours = 560 instance hours</li>
<li>560 instance hours x 230 days = 128,800 instance hours/year</li>
<li>$0.48 per-hour per-instance</li>
<li>Unattached Elastic IP Charges = $.01/hour unattached = 16 hours unattached/day/instance</li>
<li>Elastic IP Address remap charges = first 100/month free, then $.10/remap</li>
<li>EBS Storage = $.11/GB/Month x 50GB average storage</li>
<li>Data Transfer In at $.10 per GB</li>
<li>Data Transfer Out at $.15 per GB (first GB/month free)</li>
<li>Reserved instance up-front costs of $910 for one year rather than the $1400 3 year commitment</li>
<li>Bandwidth charges have not been calculated for VPC connections</li>
</ul>
<p><strong>Calculation Detail</strong><strong><span style="text-decoration: underline;"><br />
On-Demand</span></strong><span style="text-decoration: underline;"> Costs at <strong>8 hours/day</strong> average instance usage</span></p>
<ul>
<li>Instance cost = $61,824</li>
<li>16 hours unused Elastic IP charges/day = $.16 x 70 users x 230 days = $2576</li>
<li>1 remap/day x 70 users x 230 days = 16,100 remaps -1200 free = 14,900 x $.10 = $1490</li>
<li>EBS costs:
<ul>
<li>Storage: $5.50/instance/month (assuming 50GB storage) = $840</li>
<li>IO: $5.50/instance/month (assuming roughly equivalent IO costs – perhaps 30-40 IOps) = $840</li>
<li>Snapshot Gets: costs should be negligible ~$100/year</li>
<li>Snapshot Puts: costs should be negligible ~$100/year</li>
</ul>
</li>
<li>Data transfer:
<ul>
<li>In: 20GB = $2.00/instance/month = $1680</li>
<li>Out: 20GB = $3.00/instance/month = $2520</li>
</ul>
</li>
</ul>
<p>Total = $71,970/year = $5997.50/month = <strong>£3793/month</strong>*<br />
*This total does not include any support costs and is based on un-validated assumptions.</p>
<p><strong><span style="text-decoration: underline;">On-Demand</span></strong><span style="text-decoration: underline;"> Costs at <strong>24 hours/day</strong> average instance usage<br />
</span></p>
<ul>
<li>Instance cost = $185,472</li>
<li>16 hours unused Elastic IP charges/day = $.16 x 70 users x 230 days = $2576</li>
<li>1 remap/day x 70 users x 230 days = 16,100 remaps -1200 free = 14,900 x $.10 = $1490</li>
<li>EBS costs:
<ul>
<li>Storage: $5.50/instance/month (assuming 50GB storage) = $840</li>
<li>IO: $5.50/instance/month (assuming roughly equivalent IO costs – perhaps 30-40 IOps) = $840</li>
<li>Snapshot Gets: costs should be negligible ~$100/year</li>
<li>Snapshot Puts: costs should be negligible ~$100/year</li>
</ul>
</li>
<li>Data transfer:
<ul>
<li>In: 20GB = $2.00/instance/month = $1680</li>
<li>Out: 20GB = $3.00/instance/month = $2520</li>
</ul>
</li>
</ul>
<p>Total = $195,618/year = $16,301.50/month = <strong>£10,295/month</strong>*<br />
*This total does not include any support costs and is based on un-validated assumptions.</p>
<p><strong><span style="text-decoration: underline;">Reserved Instances</span></strong><span style="text-decoration: underline;"> – Costs at <strong>24 hours/day</strong> instance usage<br />
</span></p>
<ul>
<li>Instance cost ($910 x 70) = $63,700 + (70 x 24 hours = $92736 full-time usage) = $156,436</li>
<li>16 hours unused Elastic IP charges/day = $.16 x 70 users x 230 days = $2576</li>
<li>1 remap/day x 70 users x 230 days = 16,100 remaps -1200 free = 14,900 x $.10 = $1490</li>
<li>EBS costs:
<ul>
<li>Storage: $5.50/instance/month (assuming 50GB storage) = $840</li>
<li>IO: $5.50/instance/month (assuming roughly equivalent IO costs – perhaps 30-40 IOps) = $840</li>
<li>Snapshot Gets: costs should be negligible ~$100/year</li>
<li>Snapshot Puts: costs should be negligible ~$100/year</li>
</ul>
</li>
<li>Data transfer:
<ul>
<li>In: 20GB = $2.00/instance/month = $1680</li>
<li>Out: 20GB = $3.00/instance/month = $2520</li>
</ul>
</li>
</ul>
<p>Total = $165,582/year = $13,882/month = <strong>£8771/month</strong>*<br />
*This total does not include any support costs and is based on un-validated assumptions.</p>
<p><strong><span style="text-decoration: underline;">Mixture of On-demand and Reserved</span></strong><span style="text-decoration: underline;"> Instances – Costs at <strong>24 hours/day</strong> instance usage</span><br />
Mixture of 50 Reserved Instances and 20 On-Demand Instances.</p>
<ul>
<li>Reserved Instance cost ($910 x 50) = $45,500 + (50 x 24 hours = $66,240 full-time usage) = $111,740</li>
<li>On-Demand Instance cost at 8 hours/day average instance usage = 20 instances x 8 hours x $.48 x 230 days = $17,664</li>
<li>16 hours unused Elastic IP charges/day = $.16 x 70 users x 230 days = $2576</li>
<li>1 remap/day x 70 users x 230 days = 16,100 remaps -1200 free = 14,900 x $.10 = $1490</li>
<li>EBS costs:
<ul>
<li>Storage: $5.50/instance/month (assuming 50GB storage) = $840</li>
<li>IO: $5.50/instance/month (assuming roughly equivalent IO costs – perhaps 30-40 IOps) = $840</li>
<li>Snapshot Gets: costs should be negligible ~$100/year</li>
<li>Snapshot Puts: costs should be negligible ~$100/year</li>
</ul>
</li>
<li>Data transfer:
<ul>
<li>In: 20GB = $2.00/instance/month = $1680</li>
<li>Out: 20GB = $3.00/instance/month = $2520</li>
</ul>
</li>
</ul>
<p>Total = $139,550/year = $11,629.17/month = <strong>£7348/month</strong>*<br />
*This total does not include any support costs and is based on un-validated assumptions.</p>
<h3>Findings</h3>
<p>Amazon Web Services can be quite expensive if usage is not controlled effectively. Based on these calculation, I don&#8217;t feel that $1950/instance over three years is bad value. These environments perform well and provisioning is very quick. There are no underlying virtualisation support costs or power costs. The scalability is inherently appealing and the Pay-As-You-Go model might be compelling for some businesses or independent users, despite all other considerations. In our case, we dove deeper in to the productivity question, attempting to get a handle on how the performance of server-class hardware in the cloud stacks up relative to laptops and desktop workstations. <em>We wanted to understand if the complexity, potential remote worker issues and cost might be justified based on productivity gains.</em> Some of these findings were surprising, as I will reveal in my next series of posts on <a title="SharePoint 2010 Development Environment Performance Tests" href="http://tristanwatkins.com/index.php/sharepoint-2010-development-environment-performance-tests/">SharePoint development environment performance</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-cost-analysis/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>SharePoint 2010 Infrastructure for Amazon EC2 Part III: Administration, Delegation and Licensing</title>
		<link>http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-administration-delegation-licensing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sharepoint-2010-infrastructure-amazon-ec2-administration-delegation-licensing</link>
		<comments>http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-administration-delegation-licensing/#comments</comments>
		<pubDate>Fri, 26 Nov 2010 06:30:44 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Consultancy and Design]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[IaaS]]></category>
		<category><![CDATA[SharePoint 2010]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1434</guid>
		<description><![CDATA[In the first part of this series on SharePoint 2010 infrastructure considerations for Amazon EC2, I introduced the AWS platform and took a closer look at storage, snapshots and provisioning. In the second post I moved on to networking and cloning. In this third post I will discuss administration, delegation and licensing. Other posts in [...]]]></description>
			<content:encoded><![CDATA[<p>In <a title="SharePoint 2010 Infrastructure for Amazon EC2 Part I: Storage and Provisioning" href="../index.php/sharepoint-2010-infrastructure-amazon-ec2-storage-provisioning/" target="_blank">the first part of this series</a> on SharePoint 2010 infrastructure considerations for Amazon EC2, I  introduced the AWS platform and took a closer look at storage, snapshots and  provisioning. In <a title="SharePoint 2010 Infrastructure for Amazon EC2 Part II: Cloning and Networking" href="../index.php/sharepoint-2010-infrastructure-amazon-ec2-cloning-networking/" target="_blank">the second post</a> I moved on to networking and cloning. In this third post I will discuss administration, delegation and licensing.</p>
<p><span id="more-1434"></span></p>
<p><span style="text-decoration: underline;">Other posts in this series</span></p>
<ul>
<li><a title="SharePoint 2010 Infrastructure for Amazon EC2 Part I: Storage and Provisioning" href="http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-storage-provisioning/">SharePoint 2010 Infrastructure for Amazon EC2 Part I: Storage and Provisioning</a></li>
<li><a title="SharePoint 2010 Infrastructure for Amazon EC2 Part II: Cloning and Networking" href="http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-cloning-networking/">SharePoint 2010 Infrastructure for Amazon EC2 Part II: Cloning and Networking</a></li>
<li>SharePoint 2010 Infrastructure for Amazon EC2 Part III: Administration, Delegation and Licensing</li>
<li><a title="SharePoint 2010 Infrastructure for Amazon EC2 Part IV: Cost Analysis" href="http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-cost-analysis/">SharePoint 2010 Infrastructure for Amazon EC2 Part IV: Cost Analysis</a></li>
<li><a title="Amazon VPC and VM Import Updates" href="http://tristanwatkins.com/index.php/amazon-vpc-and-vm-import-updates/">Amazon VPC and VM Import Updates</a></li>
</ul>
<h3>Administration, Delegation and Usage Costs</h3>
<p><strong>The Tools</strong></p>
<p>Unfortunately, the AWS Management Console user  experience is fairly hideous. It doesn&#8217;t size properly in the browser  and it has annoying synchronous post-back behaviours. It generally feels  like an enormous Java app. I&#8217;m reminded of Cisco  administration consoles circa the early part of this century. However,  there is an Add-on for Firefox called <a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=609">ElasticFox</a> which improves things a bit, but I wouldn’t say I’m thrilled with it  either. I would classify it as less clunky, but I&#8217;d hesitate to go much  further.</p>
<p><span style="text-decoration: underline;">The AWS Management Console<br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/AWSManagementConsole2.png"><img class="alignnone size-full wp-image-1447" title="AWSManagementConsole2" src="http://tristanwatkins.com/wp-content/uploads/AWSManagementConsole2.png" alt="AWSManagementConsole2 SharePoint 2010 Infrastructure for Amazon EC2 Part III: Administration, Delegation and Licensing" width="500" /></a></span></p>
<p><span style="text-decoration: underline;">ElasticFox</span><br />
<a class="lightbox" href="http://tristanwatkins.com/wp-content/uploads/ElasticFox2.png"><img class="alignnone size-full wp-image-1448" title="ElasticFox2" src="http://tristanwatkins.com/wp-content/uploads/ElasticFox2.png" alt="ElasticFox2 SharePoint 2010 Infrastructure for Amazon EC2 Part III: Administration, Delegation and Licensing" width="500" /></a></p>
<p>My colleague <a href="http://brendannewell.com/musings/">Brendan Newell</a> co-evaluated Amazon Web Services with me. He identified we would need a  more sophisticated management tool very early on. He found <a href="http://labslice.com/">LabSlice</a> and we looked at that for a bit. It&#8217;s fairly basic, but it adds  some functionality that makes it compelling by comparison: policies,  delegation and reporting. Those features provide administrative controls  for smart delegation, or at least a start towards that control. It is a  new product, so it&#8217;s reasonable to expect that it will improve. If we  ever use AWS  in anger, LabSlice or a tool like it will almost certainly  form a part  of the picture unless the Amazon administrative tools  improve by then.</p>
<p><strong>Why are these added features so important? </strong></p>
<p>The underlying issue is that <em>it&#8217;s more than twice as expensive to run an instance 24/7 than at 40 hours/week</em> (at on-demand prices). Amazon provide <a title="Amazon Reserved Instances" href="http://aws.amazon.com/ec2/reserved-instances/" target="_blank">Reserved Instances</a> to try to  address this always-on option, but the cost savings of  “nearly 50%”  assume the instance would always be running at On-Demand  costs – so  you’re paying for 50% of four times as many hours at  On-Demand prices. This doesn&#8217;t really compute.</p>
<p>In reality, it may  not be possible to run instances for only 40 hours/week, but it should  be possible to run them for less than 50 hours/week for most users, with  the right controls in place, and this figure could be a lot less if  instances aren&#8217;t used every day.</p>
<p>So the question becomes how usage can  be controlled without  disrupting the value of the service. Too much  control and the service  becomes an obstacle to delivery. Too little  control and the accounting  department will be most displeased.</p>
<p>At a high  level, these are the options we considered (with some bad options thrown in to illustrate the point):</p>
<ul>
<li>Get a reporting tool that will expose usage patterns on an individual and team level.</li>
<li>Potentially bill teams for usage.</li>
<li>Potentially bill clients for usage (trickier).</li>
<li>Potentially  set up a scheduled task that will automatically shut  down an instance  eight (or nine, or ten) hours after it is launched.  Train users how to  cancel the shutdown when they will be working late.  While this solution is quite inelegant, it might work &#8211; depending on the  users and their usage patterns.</li>
<li>Use  LabSlice (or a similar tool) to allow users to turn machines on  and  off, but not to create images or provision new machines. Set up  policies to automatically shut down machines after a specific amount of  running time.</li>
<li>Get Draconian and have managers/administrators enforce shut down at  the end of the day. Keep in mind, this is likely to taint any positives  associated with this service and could prove very difficult to implement  if users have valid reasons to leave machines on periodically. Is the  enforcer really going to understand these nuances? In short, I suspect  this won&#8217;t fit the culture of most businesses.</li>
</ul>
<p>Remember, the point of all of this is to achieve the lowest cost, as  the service will probably only be affordable with these controls in  place. Without a mechanism to ensure machines are turned off, the  business is exposed to 24-hour usage costs. I will give examples of  projected costs without these controls later.</p>
<p><strong>Back to the Public IP Addresses</strong></p>
<p style="padding-left: 30px;"><em>Update 17 March 2011</em>: the information regarding the public IP addresses and the VPC below is now out of date. Please see my follow-up post on <a title="Amazon VPC and VM Import Updates" href="../index.php/amazon-vpc-and-vm-import-updates/">Amazon VPC and VM Import Updates</a> for more information.</p>
<p>If  you recall from the last post, I mentioned that new public IP addresses  are generated for instances whenever they are started up (unless the VPC is being used, in  which case there is no public IP address).  One of the features that you&#8217;ll want to find in your management tool is  the ability to connect to instances after users have started them up. This environment isn&#8217;t going to work very well unless users  can find out their new IP address every morning. As I mentioned before,  this could also probably be scripted and is likely to form a part of  other tools besides LabSlice. The point of reiterating this now is that  it&#8217;s key functionality in a management tool and it will probably be  very messy getting by without it.</p>
<p><strong>Reporting</strong></p>
<p>The last benefit of a good administration tool is reporting. If  users are routinely forgetting to turn machines off, you want to know  about it. If users aren&#8217;t using this system you probably want to know  about it too. How are they circumventing this approach, and why?</p>
<p>I  don&#8217;t think delegation can work without the reporting element, unless  shut down policies are very effective and don&#8217;t cause disruption by  terminating active sessions. Keep in mind that accountability is much less of a problem when clear, quantifiable costs can be attributed to actions. I  think the ideal balance is probably high visibility of reports  and  delegation of start/stop functionality, potentially coupled with liberal shut down policies &#8211; perhaps at 12 hours of usage. Lastly, it should be clear that any of these   approaches would need to be piloted.</p>
<h3>Licensing</h3>
<p>As mentioned in the first post in this series, Windows license costs are built in to instances and Amazon charges for instances based on the type of license they provide. The only license that must be paid for from Amazon is this Windows license and it is built in to the Pay-As-You-Go instance costs. If the instances are used for development then MSDN/Technet or other purchased licenses can be used in these environments for all licenses other than Windows, so long as the type of use is compliant.</p>
<p>Amazon offer an image with SQL built in to it. You will probably want to avoid use of this instance if you already have a SQL license, as it is considerably more expensive to run. The cost of a large Windows Server 2008 instance increases from $.48/hour to $1.08/hour accordingly. This is huge even if these numbers look small. There are 26,280 hours in three years. That&#8217;s more than $5,000 more expensive per-year (per-instance).</p>
<p>One thing that looked promising (until we realised it was only open to users in America) was the <a title="Announcing the Windows Server 'Bring Your Own License' Pilot Program" href="http://aws.amazon.com/about-aws/whats-new/2010/03/24/announcing-the-windows-server-bring-your-own-license-pilot-program/" target="_blank">&#8220;Bring Your Own License&#8221; pilot</a>. The program seems to be closed now, but I imagine this option would be interesting for readers of this  blog, should that program ever form a core part of the offering,  internationally. This of course assumes that subtracting Windows license costs from the instance charges results in a significant saving.</p>
<h3>Recommendations</h3>
<p>The main contentious issues for which there is no clear, one-size fits all guidance are topology, network configuration and management. We were looking at an all-in-one server, including the DC/DNS roles, on private and public dynamic IP addresses with considerable piloting in this configuration, supported by LabSlice. The costs of the management tool are going to be insignificant relative to what it saves you, even if you write it yourself. I consider it to be fairly indispensable, with the possible exception of Reserved Instances at the three-years up-front cost of $1400/instance (plus usage). I will explore these cost specifics in greater detail in my next post.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-administration-delegation-licensing/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>SharePoint 2010 Infrastructure for Amazon EC2 Part II: Cloning and Networking</title>
		<link>http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-cloning-networking/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sharepoint-2010-infrastructure-amazon-ec2-cloning-networking</link>
		<comments>http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-cloning-networking/#comments</comments>
		<pubDate>Thu, 25 Nov 2010 06:30:17 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Consultancy and Design]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[IaaS]]></category>
		<category><![CDATA[SharePoint 2010]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1433</guid>
		<description><![CDATA[In my previous post I introduced some of the peculiarities of designing SharePoint 2010 environments for Amazon&#8217;s EC2, specifically focused on the AWS platform, storage, snapshots and provisioning. In this post I continue this exploration, moving on to cloning and networking considerations. Other posts in this series SharePoint 2010 Infrastructure for Amazon EC2 Part I: [...]]]></description>
			<content:encoded><![CDATA[<p>In my <a title="SharePoint 2010 Infrastructure for Amazon EC2 Part I: Storage and Provisioning" href="http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-storage-provisioning/" target="_blank">previous post</a> I introduced some of the peculiarities of designing SharePoint 2010 environments for Amazon&#8217;s EC2, specifically focused on the AWS platform, storage, snapshots and provisioning. In this post I continue this exploration, moving on to cloning and networking considerations.</p>
<p><span id="more-1433"></span><span style="text-decoration: underline;">Other posts in this series</span></p>
<ul>
<li><a title="SharePoint 2010 Infrastructure for Amazon EC2 Part I: Storage and Provisioning" href="http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-storage-provisioning/">SharePoint 2010 Infrastructure for Amazon EC2 Part I: Storage and Provisioning</a></li>
<li>SharePoint 2010 Infrastructure for Amazon EC2 Part II: Cloning and Networking</li>
<li><a title="SharePoint 2010 Infrastructure for Amazon EC2 Part III: Administration, Delegation and Licensing" href="http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-administration-delegation-licensing/">SharePoint 2010 Infrastructure for Amazon EC2 Part III: Administration, Delegation and Licensing</a></li>
<li><a title="SharePoint 2010 Infrastructure for Amazon EC2 Part IV: Cost Analysis" href="http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-cost-analysis/">SharePoint 2010 Infrastructure for Amazon EC2 Part IV: Cost Analysis</a></li>
<li><a title="Amazon VPC and VM Import Updates" href="http://tristanwatkins.com/index.php/amazon-vpc-and-vm-import-updates/">Amazon VPC and VM Import Updates</a></li>
</ul>
<h3>Machine names, Domain SIDs and Cloning</h3>
<p>In our testing, we were able to run multiple instances of the same AMI concurrently, which can be desirable if you have a team of developers with similar or identical requirements. We could run these instances beside each other without conflicts because we had all roles (including the DC/DNS) on one machine and we locked down the firewall, which is advisable anyway in the cloud. We only allowed the RDP port inbound to start with, and opened HTTP/HTTPS traffic where it was helpful to do so. This cloning story would get much more complicated with multiple servers, as I discuss in more detail in the networking section below.</p>
<p>One big “gotcha” in this area is the default settings of the <em>EC2 Service Properties</em> when Amazon’s Windows AMI is launched initially. This is one of the few additions that Amazon packages with their Windows image. In the EC2 Service Properties you should de-select the <em>Set Computer Name</em> and <em>Set Password</em> options. The <em>Set Computer Name</em> option seriously causes problems for SharePoint, as it changes the Machine Name whenever the instance is started up. The good news is that you only need to do this once if you will be creating a new base image. Just be careful not to change this setting back later on.</p>
<p><span style="text-decoration: underline;">The EC2Config Service<br />
<a href="http://tristanwatkins.com/wp-content/uploads/AmazonEC2ConfigService.png"><img class="alignnone size-full wp-image-1408" title="AmazonEC2ConfigService" src="http://tristanwatkins.com/wp-content/uploads/AmazonEC2ConfigService.png" alt="AmazonEC2ConfigService SharePoint 2010 Infrastructure for Amazon EC2 Part II: Cloning and Networking" width="483" height="572" /></a></span></p>
<h3>Networking</h3>
<p>By default, Amazon assigns a public IPv4 address to EC2 instances via DHCP. This IP address changes whenever an instance is launched, allowing Amazon to manage their pool of public IPv4 addresses effectively. Until IPv6 adoption ramps up, this is the only viable option for an offering of this scale, although Amazon are actively looking at IPv6 today. By default, Amazon also assigns a private IPv4 address to EC2 instances via DHCP. This internal IP address also changes whenever an instance is launched.</p>
<p>Internal and external <em>dynamic</em> IP addressing introduces considerable design complexity for SharePoint development environments. This complexity is heightened by the addition of <em>Elastic IP Addresses</em> and the <em>Virtual Private Cloud</em> options.</p>
<p><strong>Domain Controllers and Private DHCP</strong></p>
<p>As <a href="../index.php/sharepoint-2010-not-in-a-workgroup/">I’ve mentioned before</a>, SharePoint 2010 development environments need to be members of a domain in order to successfully deploy the Search or User Profile Service Applications, but unfortunately dynamically-assigned IP addresses and domain controllers don’t play nicely together. I shan’t delve in to those details much here, but this has been known to cause problems with start-up times for DCs, and member servers won’t know how to find the DCs once the DC’s IP address changes. Additionally, there are Firewall policy implications.</p>
<p>With the exception of the Virtual Private Cloud (discussed below), we had to rule out persistent multiple-server farms for these reasons. The complexities of managing this stuff on a daily basis would be beyond most users and would probably create system instability or at the very least, add cost (by leaving the DC on all the time). The option of adding a second DC for resilience and to possibly work around some of these issues would add further complexity and cost. Basically, this wasn’t working.</p>
<p><strong>Developing on Domain Controllers</strong></p>
<p>The only viable approach we could find for working with DCs on DHCP was to make the SharePoint development machine the domain controller. This is a step backwards in many ways, as this configuration has been known to cause issues. As I summarised in March 2010 (from the link above):</p>
<ul>
<li>Domain Controller security is bad for development. It means developers will be coding as Domain Admins and they will be doing so on a machine with Domain Controller security policies. This is just a mess. It’s tighter than it should be in some respects and looser in others.</li>
<li>SQL doesn’t like to run on a DC.</li>
<li>Running a DC, SQL and SharePoint on the same machine creates a massive load of service start-up contention and sometimes the environment will start from an unstable point because dependent services will not be ready when a depending service tries to start.
<ul>
<li>This also increases start-up time considerably.</li>
</ul>
</li>
<li>Adding Visual Studio to this mix causes known performance issues. The machine simply can’t keep up with doing all of this.</li>
</ul>
<p>Having said all of that a while ago, based on lesser-performing equipment, we didn’t actually find that performance or installation were particularly troublesome on EC2, although we did encounter a security policy issue or two. I still have reservations about the code quality that will emerge from development on a domain controller, but if this is acceptable for your requirements then I think this is the most significant Private DHCP issue conquered. If not, you will probably need to look at the Virtual Private Cloud. Other topologies are conceivable but with even more complexity than we&#8217;re already contending with. These are unlikely to be broadly usable.</p>
<p><strong>Public DHCP issues</strong></p>
<p>The primary issue with dynamic public IP addresses is finding out what the new address is. This is easy enough if you have access to the AWS console, as you can pull the new address directly from the instance description and even download a file to launch an RDP connection to the new IP address directly. However, it’s very unlikely that it will be acceptable to give access to the AWS Management Console to all users. This leaves three options, as I see it:</p>
<ul>
<li>Leave the machines running 24/7 (at a potentially massive increase in cost).</li>
<li>Have an administrator send/provide the addresses to users as the instances are started up.
<ul>
<li>This feels very clunky to me and untenable in the long term.</li>
</ul>
</li>
<li>Find a management tool (there are a few) or a scripted approach to handling this scenario.</li>
</ul>
<p>Whatever the solution, it’s likely to form part of the broader question of administration, management tools and delegation, which I’ll come back to in the next post. I believe this can be solved without too much difficulty, but it requires some thought along these lines in order to avoid a mess.</p>
<p><strong>Elastic IP Addresses</strong></p>
<p>One way that Amazon has tried to ease the pain of Public DHCP is the Elastic IP Address. By default, each customer is given five, although <a href="http://aws.amazon.com/contact-us/eip_limit_request/">you can request more</a>. Elastic IP addresses are applied to an instance while it’s running. A few minutes after it has been applied it takes over from the DHCP-assigned address and users can access the instance at their usual address. However, this requires intervention by an administrator to associate the Elastic IP Address with the instance after it&#8217;s been started. Alternately it can be scripted. Just keep in mind this is another option that probably isn’t best delegated to everyone by giving all users access to the AWS console.</p>
<p>One thing that’s particularly crafty about Elastic IP Addresses is that you are charged $.01 for each hour they are <em>not</em> in use. If you’re diligent about turning off your machines when you’re not using them, you will get nailed for <em>not</em> using the IP address. Granted, it’s a small charge and with <a title="Vint Cerf Predicts UK ISP Internet Trauma When IPv4 Addresses Run Out in 2011" href="http://www.ispreview.co.uk/story/2010/11/12/vint-cerf-predicts-uk-isp-internet-trauma-when-ipv4-addresses-run-out-in-2011.html" target="_blank">IPv4 address supplies dwindling very quickly</a>, perhaps not that unreasonable.</p>
<p>In my view, Elastic IP Addresses probably aren’t going to solve a lot of problems, but in some cases it may make things easier &#8211; particularly if pointing DNS at these addresses.</p>
<p><strong>Virtual Private Cloud</strong></p>
<p style="padding-left: 30px;"><em>Update 17 March 2011</em>: the information regarding the public IP addresses and the VPC below is now out of date. Please see my follow-up post on <a title="Amazon VPC and VM Import Updates" href="http://tristanwatkins.com/index.php/amazon-vpc-and-vm-import-updates/">Amazon VPC and VM Import Updates</a> for more information.</p>
<p>The Virtual Private Cloud (VPC) is effectively a VPN connection between your network and AWS. It allows fixed private IP addresses, DHCP options like DNS/WINS servers, and allows you to connect existing assets to the cloud, for instance management or backup servers. This may also help with SSO. I shan’t belabour the design options for the VPC, because at face value it should be pretty obvious if it’s the right fit for your uses. There are obvious security considerations about opening up this communication across the WAN to a third-party, but that’s not to say there aren’t ways it can be set up well – for instance creating a dedicated domain in the VPC.</p>
<p>The most important thing to know about the VPC is that when instances are launched they only get a NIC with an IP address on a VPC subnet. <em>There is no public IP address for the instance</em>. This means the only way you can access the instance is via the other end of the VPN (typically the corporate network). This may introduce some funky routing and potentially degrade speed/reliability for users working from home or on client sites. On the other hand, it may not. It’s critical that this option is thought through with a broad design team including internal network and systems teams. I would highly recommend testing/piloting this configuration as well (noting that the initial configuration may be expensive for a test, since it will integrate with production infrastructure).</p>
<p>I think the VPC can answer a lot of the shortcomings of the standard EC2 IP addressing approach <em>if public IP addressing is not a requirement</em>. I’m not sure why NAT couldn’t have been used to allocate fixed internal addresses by default, but it hasn’t been, so we&#8217;ve only got one way in to the VPC. Once in it, you can deploy single-server machines as we did without the VPC (assuming the firewall is locked down in the same way), or join SysPrep&#8217;d SharePoint servers to a shared domain infrastructure. This assumes SharePoint provisioning (scripting installation/configuration) is mature enough that manual configuration steps don&#8217;t impede productivity. Other topologies may be valid as well. In principal it shouldn&#8217;t be miles different from your LAN. The main things to understand is that the private IP addresses are assigned by Amazon and there is just the one way in. Note: there&#8217;s quite a bit to understand about planning the VPC itself, and pricing for that traffic, which is all outside of the scope of what I&#8217;m inspecting here, so please refer to the <a title="Amazon Virtual Private Cloud" href="http://aws.amazon.com/vpc/" target="_blank">Amazon VPC</a> resources for more information. Also be aware that it&#8217;s still in Beta.</p>
<p>Networking can be enough to melt anyone&#8217;s brain, so I&#8217;ll save administration, delegation and licensing until my next post.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-cloning-networking/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>SharePoint 2010 Infrastructure for Amazon EC2 Part I: Storage and Provisioning</title>
		<link>http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-storage-provisioning/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sharepoint-2010-infrastructure-amazon-ec2-storage-provisioning</link>
		<comments>http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-storage-provisioning/#comments</comments>
		<pubDate>Wed, 24 Nov 2010 19:40:01 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Consultancy and Design]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[IaaS]]></category>
		<category><![CDATA[SharePoint 2010]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1399</guid>
		<description><![CDATA[The Amazon Web Services (AWS) have been around for a while now but there’s been surprisingly little ­­use or abuse in the SharePoint community, from what I’ve seen. A notable exception to this is Andrew Woodward’s novel and interesting approach to Exchange BPOS migration via Amazon EC2. But that doesn’t talk much about SharePoint on [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://aws.amazon.com/">Amazon Web Services</a> (AWS) have been around for a while now but there’s been surprisingly  little ­­use or abuse in the SharePoint community, from what I’ve seen. A  notable exception to this is Andrew Woodward’s novel and interesting  approach to <a href="http://www.21apps.com/21apps/moving-to-bpos/">Exchange BPOS migration via Amazon EC2</a>.  But that doesn’t talk much about SharePoint on Amazon, so in these  posts I’ll give an introduction to the design constraints that pertain  to SharePoint 2010 development environments on EC2. Even if the Amazon  Web Services aren’t appealing, a lot of the issues discussed here will  apply to consumption of other Pay-As-You-Go infrastructure services,  presumably including the forthcoming Windows Azure VM role AKA <em>Hyper-V Cloud</em>. In this first post I focus on the platform, storage, snapshots and provisioning.</p>
<p><span id="more-1399"></span></p>
<p>Other posts in this series:</p>
<ul>
<li>SharePoint 2010 Infrastructure for Amazon EC2 Part I: Storage and Provisioning</li>
<li><a title="SharePoint 2010 Infrastructure for Amazon EC2 Part II: Cloning and Networking" href="http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-cloning-networking/">SharePoint 2010 Infrastructure for Amazon EC2 Part II: Cloning and Networking</a></li>
<li><a title="SharePoint 2010 Infrastructure for Amazon EC2 Part III: Administration, Delegation and Licensing" href="http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-administration-delegation-licensing/">SharePoint 2010 Infrastructure for Amazon EC2 Part III: Administration, Delegation and Licensing</a></li>
<li><a title="SharePoint 2010 Infrastructure for Amazon EC2 Part IV: Cost Analysis" href="http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-cost-analysis/">SharePoint 2010 Infrastructure for Amazon EC2 Part IV: Cost Analysis</a></li>
<li><a title="Amazon VPC and VM Import Updates" href="http://tristanwatkins.com/index.php/amazon-vpc-and-vm-import-updates/">Amazon VPC and VM Import Updates</a></li>
</ul>
<h3>What are the Amazon Web Services?</h3>
<p>AWS is a platform in the cloud, like Windows Azure in some respects.  While these web services are distinct from traditional hosting  offerings, Amazon also provides Infrastructure as a Service (IaaS) in  the form of <a title="Amazon Elastic Compute Cloud (Amazon EC2)" href="http://aws.amazon.com/ec2/" target="_blank">Elastic Cloud Compute</a> (EC2). This is a Red Hat implementation of the Xen hypervisor, from  which virtual machines (instances) can be launched.  For accuracy, I should note that <a href="http://cloudcomputing.info/en/news/2010/09/oracle-extends-virtualization-support-to-amazon-ec2.html">Amazon recently launched a second Oracle hypervisor within EC2,</a> but that’s a distraction from this discussion. Amazon have been  providing their web services since 2006. For the purposes of these posts  I am concerned with the EC2 offering as a cloud-based alternative to  desktop development workstations, although there are other scenarios  that may be suitable for deployment in EC2, such as demonstrations or large infrastructure tests. For more information on the  difference between traditional hosting and EC2, see <a href="http://aws.amazon.com/ec2/faqs/#How_is_this_service_different_than_a_plain_hosting_service">Amazon’s FAQ on the matter</a>.</p>
<h3>What is Elasticity?</h3>
<p>This term arises frequently in the Amazon vernacular. In its essence  this means that scalability is built in to the platform. Need more CPU  or memory? Just re-launch your instance as a larger size. Need more  instances? Create them in a few minutes. Need more storage? They got it and then some. IP  addresses? They even have <em>Elastic IP addresses</em>. Bandwidth? It’s the cloud, fool.</p>
<p>AWS largely deliver on these promises, although you’ll encounter some  provisioning fiddlery before realising it. More importantly,  increased size comes at a cost. Nearly all of the Amazon price points  are ridiculously low at their smallest, but these costs are not always  linear – particularly with CPU and memory. Additionally, cost  permeates nearly every design option, and these costs persist over time.  Infinitesimally small prices need to be considered over very long  periods if IaaS is to become an alternative to hardware. I will discuss  costs in more detail later, as this topic is fundamental to the  desirability of cloud computing. If it isn’t cost effective, it probably  won’t be the right option. But in a nut shell, Elasticity means that if  you need more of anything, you can pay for it for the duration that you  need it. They definitely intend to say that you can shrink as well.</p>
<h3>EC2 Design Complexity</h3>
<p>I couldn’t possibly hope to explain everything that’s important to  know about AWS in these blog posts and I won’t try. However, it’s  important to know that the design constraints that pricing and  scalability impose on AWS require a fresh perspective.  Infrastructure  Architecture for AWS will require time, testing, piloting and a good  understanding of end-user working patterns. Once this configuration and  these patterns are clearly understood, the costs need to be projected over  long periods. This is likely to be a deep consulting exercise, since so  few design options can be left to chance; this will hopefully become  clearer as I talk more about pricing later. For now, if you don’t believe this  is complicated, have a look at the 237 page <a href="http://awsdocs.s3.amazonaws.com/EC2/2010-06-15/ec2-ug-2010-06-15.pdf">User Guide</a>, which I would class as required reading for anyone serious about EC2. The topics covered below are a summary of the areas that I feel are most important to understand with SharePoint on EC2.</p>
<h3>Storage</h3>
<p>The first thing to understand about AWS is that there are two types of storage, the Simple Storage Service (S3) and the <a title="Amazon Elastic Block Store (EBS)" href="http://aws.amazon.com/ebs/" target="_blank">Elastic Block Store</a> (EBS). Some older documents and forum posts were written before EBS was  available as a root device, so watch out for potentially misleading  information.</p>
<p><em>All SharePoint 2010 environments need to run on EBS </em>because  Windows Server 2008 will chew up more than 10 GiB off the bat (this is  the maximum size of S3 volumes). EBS storage costs are more expensive  than S3 and you pay for the number of I/O requests, so projecting costs  is a fairly inexact science. However, in my brief testing time the I/O  charges were relatively small. It’s worth noting that for the extra  cost, EBS volumes also persist and they launch faster. I am only briefly  touching on this topic, so please review the User Guide if this is  insufficient detail. The key points for now are that you must use EBS  for SharePoint instances, and EBS is more expensive than S3.</p>
<p><strong>Provisioning</strong><br />
Taking snapshots and creating new images from them is quick and easy in  EC2, once you get your head around the key concepts: AMIs, Volumes and  Snapshots.</p>
<p><strong>AMIs</strong><br />
An AMI is an Amazon Machine Image. This will be the first design choice  you encounter when launching an Instance. Amazon provides a basic  Windows Image or you can use an Amazon image with SQL included (at a  cost). You can use your own licenses for everything but Windows.</p>
<p>Once an image is running you can modify it to your taste. Once you’ve  created a new standard baseline, you can create a new image from your  instance, and when you provision new instances you will be able to select this new image rather than the Amazon one you started with. Note:  the Amazon Windows license cost is built in to the billing process;  your instance costs include the license, even after you&#8217;ve created your own new image from the original. Also note: Windows Server 2008 R2 is not available yet.</p>
<p><strong>Volumes<br />
</strong>A volume is basically a virtual hard disk. When a new instance is  created, the selected AMI is deployed to a new volume – the same size as  the image it was created from. A volume can only be attached to one  instance at a time, but an instance can have many volumes attached to  it if you want to add storage capacity.</p>
<p>Remember that you pay for the storage you use, so size your volumes  wisely. 30 GiB is unlikely to last anyone very long with Windows Server  2008, so consider at least 40, if not 50 GiB for any new root volumes.  Keep in mind, you may find the less expensive  S3 volumes useful as secondary, disposable storage if that suits  temporary needs.</p>
<p><strong>Snapshots</strong><br />
A snapshot records the state of a volume at a point in time. Once a  snapshot has been taken, a new volume (of equal or greater size) can be  created from the snapshot and that new volume can be attached to a new  instance. That new instance can be used to create a new AMI at the new  size. Snapshots and new volumes together enable you to increase system disk size. Snapshots can also be used for backup.</p>
<p>An example workflow for getting your first image at the right size might go like this:</p>
<ul>
<li>Launch an instance from the default Windows Server 2008 image.</li>
<li>Install SQL and SharePoint (this should be possible at just under 30GiB).</li>
<li>Configure stuff and shut down the instance.</li>
<li>Take a snapshot.</li>
<li>Create a new volume at 50GiB based on the snapshot.</li>
<li>Detach the existing volume from the instance and attach the new volume.</li>
<li>Create an image from the instance.</li>
<li>Launch the existing instance and create additional instances from the new AMI as needed.</li>
</ul>
<p>Note: if you will be including Visual Studio or any other sizeable  software, you will need to go through a process like this before  installing it, as it will push you over the 30GiB initial size.</p>
<p>This process is oversimplified, but it hopefully illustrates the relationship between AMIs, snapshots and volumes as they relate to provisioning. All told, I think this way of working with images, volumes and  snapshots is sensible, not terribly complicated in the EC2 scheme of  things, and the choices should be pretty straight-forward once you  understand the options and costs. However, this could potentially get  more complicated as end-users engage with these decisions. How will they  know what to ask for? Will it be necessary to involve EC2 experts in  the approval of any new systems? Training, consultancy or winging it all  have associated costs and risks. Even though I’m only talking about  development environments here, there are still risks  in committing to a  Pay-As-You-Go platform where usage is unrestricted. Keep this in mind.</p>
<p>I&#8217;m aware this is lengthy already, so I&#8217;m going to split this up.  In my next post I&#8217;ll review Cloning and  Networking.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/sharepoint-2010-infrastructure-amazon-ec2-storage-provisioning/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>User Profile Service Connection and Slow First Page Load</title>
		<link>http://tristanwatkins.com/index.php/user-profile-service-connection-slow-first-page-load/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=user-profile-service-connection-slow-first-page-load</link>
		<comments>http://tristanwatkins.com/index.php/user-profile-service-connection-slow-first-page-load/#comments</comments>
		<pubDate>Thu, 04 Nov 2010 15:02:06 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Client applications]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[Application Pool]]></category>
		<category><![CDATA[First Page Load]]></category>
		<category><![CDATA[IIS Reset]]></category>
		<category><![CDATA[Service Application Proxy]]></category>
		<category><![CDATA[Service Connection]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[User Profiles]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1346</guid>
		<description><![CDATA[I&#8217;m presently running some quite methodical SharePoint 2010 development environment performance tests, as we&#8217;re finding that the Dell XPS M1330 we&#8217;ve been using for the last few years doesn&#8217;t really cut it in some scenarios. This has been an on-going issue for some time where I work, but it&#8217;s only recently been prioritised at the [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m presently running some quite methodical SharePoint 2010 development environment performance tests, as we&#8217;re finding that the Dell XPS M1330 we&#8217;ve been using for the last few years doesn&#8217;t really cut it in some scenarios. This has been an on-going issue for some time where I work, but it&#8217;s only recently been prioritised at the top of my workload. That it is now my top priority should give some indication how important these issues are for any company that spends significant time customising SharePoint. I&#8217;ll be discussing this wider project in more detail once I&#8217;ve finished my testing in the next couple of weeks, but for now I wanted to share a provisional finding about connecting Web Applications to the User Profile Service Application.</p>
<p><span id="more-1346"></span></p>
<h3>First Page Load After IIS Reset in SharePoint 2010</h3>
<p>One of the key performance indicators I&#8217;m measuring is first page load after an IIS reset.</p>
<p style="padding-left: 30px;"><span style="text-decoration: underline;">Why not just do an Application Pool Recycle?</span><br />
Before going any further, I acknowledge that most developers will be able to save a lot of time by recycling application pools rather than resetting IIS &#8211; but there are still scenarios when a full IIS reset is required and we&#8217;re finding that first page load after an IIS reset is a great deal slower in SharePoint 2010 than it was in 2007. First page load has always been notably slow and people have written warm-up scripts to address this scenario post-reboot, but in SharePoint 2010 I&#8217;m noticing speeds are two or three times slower.</p>
<p>I&#8217;d initially hoped that I could use this long first page load time to my advantage, which partially explains the time I&#8217;ve spent working on this issue here. I was thinking, surely if it takes so long, that extra time will give me a more accurate measure of these performance indicators across different systems. However, as I started to test on server class hardware I was finding that the performance gains were by no means linear and much less than I would have expected. This also held true with i7 laptops, i7 desktops and Amazon EC2. Interestingly, it appeared that the CPU was in no way fully utilised on any of these systems when loading the page for the first time, and these timings did not improve by adding additional CPUs. Earlier tests suggested that disk speed was not a significant factor in first page load times and memory is in no way constrained during these tests.</p>
<h3>The Speedy (but evil) White Wizard</h3>
<p>In the second instance, we noticed that not all farms were as slow as most of them seemed to be. We stumbled across this accidentally when testing performance in Amazon Web Services (AWS). A colleague did our initial AWS work and we were both very impressed by the initial performance results. A few days later I joined in the fun and built my first single-server instance. We immediately noticed that my first page load times were approximately double the times that my colleague was seeing. Eventually we identified that he used the Farm Configuration Wizard while I had manually created a separate Application Pool for each of my Service Applications. This warranted further investigation.</p>
<p style="padding-left: 30px;"><span style="text-decoration: underline;">A note about application pooling</span><br />
My approach to creating a separate Application Pool for each Service Application is to some extent a hang-over from SharePoint 2007 least-privileged thinking. I was aware that this approach exceeded recommended Application Pool capacity limits, but I didn&#8217;t let this trouble me too much based on the single-user load; I&#8217;ve always prioritised adherence to the least-privileged model over minor performance degradation. However, based on these seemingly significant performance results, emerging community consensus and the best guidance available today, I decided to reconsider this approach.</p>
<p style="padding-left: 30px;"><span style="text-decoration: underline;">A note about AWS</span><br />
There are a number of broader architectural challenges to conquer when designing a SharePoint 2010 development environment in AWS, which is a topic that I hope to return to in a later post.</p>
<p style="padding-left: 30px;"><span style="text-decoration: underline;">A note about the Farm Configuration Wizard</span><br />
This is the page that greets you immediately after installing SharePoint. It takes care of a lot of Services and Service Applications in one go, but it does some pretty undesirable things as well. In short, for all but the most playful of applications, it&#8217;s not appropriate. Build the Service Applications properly.</p>
<h3>Reconsidering Application Pooling</h3>
<p>As mentioned above, my next step was to quantify the improvements that can be gained through pooling applications. My first test was to delete all of my Service Applications and re-create them in a single application pool. I also deleted all of the web applications and created them in a single, separate Application Pool.</p>
<p>Following my normal development environment build process, I created all of the Service Applications and the Web Applications before tackling the User Profile Service Application. Out of curiosity, I quickly tested first page load times and was happily surprised to find that <strong>they had been cut in half</strong>. So I took a snapshot and created the User Profile Service Application.</p>
<h3>I Blame the User Profile Service Application</h3>
<p>After creating the new User Profile Service Application and running an IISRESET, <em>my first page load of Central Administration was almost exactly as slow as it had been with all the Service Applications in their own pools</em>. This was before creating a synchronisation or doing anything with the newly created Service Application. It was merely provisioned. At my wits end, I called it a night.</p>
<p>Having thought about it some the next morning, I decided to create a new web application with a Blank root Site Collection. I already had a similar web application in my farm but I made one key configuration change to the new one. When creating the web application I created a custom <strong>Application Proxy Group</strong> and removed the <strong>Service Connection</strong> to the User Profile Service Application. I then tested first page load times on my two blank sites. The new site without the Service Connection to the User Profile Service Application loaded as quickly as the sites did before I created the User Profile Service Application. The original site loaded in the same time as the old sites. <strong>The disconnected site was approximately twice as fast to load.</strong></p>
<h3>Validating the Results</h3>
<p>After reaching this provisional finding, I fired up the <a title="Microsoft Information Worker Demo VM" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=751fa0d1-356c-4002-9c60-d539896c66ce" target="_blank">Microsoft Information Worker Demo VM</a>. I wanted to test this on a completely different virtual machine (but on the same hardware). I created two new web applications with two new Blank root site collections. I ommitted the Service Connection to the User Profile Service Application on the second web application again. My timings were nearly identical to the timings on the first machines.</p>
<p>Next, I reverted to the earlier snapshot of my development environment &#8211; the one with each Service Application in a different Application Pool. I created a new web application with the Blank root Site Collection again and got nearly the same results. In this case, all of the results were slightly slower (a couple of seconds) than they were in my snapshot with all the Service Applications and Web Applications pooled together, but the Service Connection to the User Profile Service Application was a much bigger factor (~20 seconds).</p>
<p style="padding-left: 30px;"><span style="text-decoration: underline;">What about the Farm Configuration Wizard Results?</span><br />
You may be wondering why the sites on the Wizard-configured farm loaded quickly. While I&#8217;ve not spent any time revisiting that environment and I&#8217;ve never spent much time on servers configured by that wizard, I strongly suspect  this is because the User Profile Synchronisation Service had never been successfully provisioned.</p>
<p>I am still in the process of further validating these results across various hardware configurations and within various virtualisation technologies. My tests should provide better data on the benefits of pooling the Service Applications as well. All of these findings are somewhat provisional, but I&#8217;d say the Service Connection results so far are the clearest findings I&#8217;ve got to date, by a considerable margin. In short, I think <strong>you can expect first page load times to be at least twice as quick</strong> when the Web Application is disconnected from the User Profile Service Application.</p>
<h3>But I Kind of Need That Service Connection</h3>
<p>Touché! You often will. In fact, let me back-track and say that I haven&#8217;t really considered how these findings can be applied in the real world yet. In previous development environment iterations, we found that we needed to <a title="SharePoint 2010 (not) in a Workgroup" href="http://tristanwatkins.com/index.php/sharepoint-2010-not-in-a-workgroup/" target="_blank">abandon development in a Workgroup</a> so we could connect to the User Profile Service Application. It may be that some web applications can live without this connection (for instance, many WCM apps), but as I say, my head is deep in performance considerations at the moment and I really haven&#8217;t had time to consider these implications yet. However, I will try to revisit the topic reasonably soon and I welcome comments! One way or the other, it&#8217;s good to have a better understanding of why 2010 first page load times are so much slower than 2007.</p>
<h3>Does this slow anything else down?</h3>
<p>At this point, I haven&#8217;t had a chance to test much else, but I have tested creating a new web application with and without this Service Connection. No impact. I also tried creating a Publishing Portal within those web applications, and again, no impact.</p>
<p>If you&#8217;re curious about the actual performance figures, I hope to publish them in the next couple of weeks. To give a high-level indication, in one environment the connected First Page Load times were ~35 seconds and the disconnected times were ~17 seconds. In slower environments this difference may be even greater.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/user-profile-service-connection-slow-first-page-load/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Bit Rate Throttling Fix Released</title>
		<link>http://tristanwatkins.com/index.php/bit-rate-throttling-fix-released/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=bit-rate-throttling-fix-released</link>
		<comments>http://tristanwatkins.com/index.php/bit-rate-throttling-fix-released/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 02:11:37 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Bit Rate Throttling]]></category>
		<category><![CDATA[BLOB Caching]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Progressive Download]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[w3wp]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1339</guid>
		<description><![CDATA[A couple of weeks ago I posted information about a Fix For Bit Rate Throttling W3WP Crashes in SharePoint 2010. A few hours ago, Jack Freelander from IIS.NET announced that IIS Media Services 4.0 has been released, including this fix. This is just a quick post to update that the fix has passed Beta, in [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago I posted information about a <a title="Fix For Bit Rate Throttling W3WP Crashes" href="http://tristanwatkins.com/index.php/fix-for-bit-rate-throttling-w3wp-crashes/" target="_blank">Fix For Bit Rate Throttling W3WP Crashes</a> in SharePoint 2010. A few hours ago, Jack Freelander from IIS.NET announced that <a title="Bit rate throttling stopping W3WP process " href="http://forums.iis.net/p/1165057/1960939.aspx#1960939" target="_blank">IIS Media Services 4.0 has been released, including this fix</a>. This is just a quick post to update that the fix has passed Beta, in case anyone was waiting on the final release before diving in.</p>
<p>I still have yet to find the time to test this myself, but I&#8217;d be very keen to hear about your experiences &#8211; good or bad. Failing that, I hope to get back to this in the next couple of weeks.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/bit-rate-throttling-fix-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

