<?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; Hyper-V Archive</title>
	<atom:link href="http://tristanwatkins.com/index.php/tag/hyper-v/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 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>Hyper-V video issues fixed by Windows Server 2008 R2 SP1 Beta?</title>
		<link>http://tristanwatkins.com/index.php/hyperv-video-issues-fixed-windows-server-2008-r2-sp1-beta/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=hyperv-video-issues-fixed-windows-server-2008-r2-sp1-beta</link>
		<comments>http://tristanwatkins.com/index.php/hyperv-video-issues-fixed-windows-server-2008-r2-sp1-beta/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 06:30:36 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Dell]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[Intel]]></category>
		<category><![CDATA[NVIDIA]]></category>
		<category><![CDATA[RemoteFX]]></category>
		<category><![CDATA[SLAT]]></category>
		<category><![CDATA[Windows Server 2008 R2]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1127</guid>
		<description><![CDATA[Recently we&#8217;ve been considering a hardware refresh for our developer/consultant/architect laptop build (on Windows Server 2008 R2 Standard with Hyper-V). After a fair amount of deliberation we decided to pilot a new model but stumbled massively at the first hurdle: when we enabled the Hyper-V role on a new Dell Latitude E6410 we got a [...]]]></description>
			<content:encoded><![CDATA[<p>Recently we&#8217;ve been considering a hardware refresh for our developer/consultant/architect laptop build (on Windows Server 2008 R2 Standard with Hyper-V). After a fair amount of deliberation we decided to pilot a new model but stumbled massively at the first hurdle: when we enabled the Hyper-V role on a new Dell Latitude E6410 we got a blue screen. Further testing revealed that the graphics driver was at fault and the SVGA driver worked fine. However, the SVGA driver only has single monitor support. Back to the drawing board.</p>
<p><span id="more-1127"></span>I hit the search engines in earnest and found that these problems were prevalent across a fairly wide range of graphics cards. We enlisted Dell&#8217;s help and they told us that they do not certify that Hyper-V will work on any laptops. More precisely, they clarified the primary support concern is that future driver releases may not work with Hyper-V even if we find a model that works with today&#8217;s drivers. At this point we were considering a pricier Precision model and they put us in touch with their Precision product team in Texas. They were most helpful but we were told that Dell themselves do not use Hyper-V on laptops except for demonstration purposes and they simply use it as a server for connected workstations, so they would never experience the same graphics issues. Dell kindly offered to let us test our development build on various models at their campus if we agreed to share the results with them, but before we could arrange that visit, <a title="Windows Server 2008 R2 SP1 Beta" href="http://www.microsoft.com/windowsserver2008/en/us/sp1.aspx" target="_blank">Windows Server 2008 R2 SP1 Beta</a>* was released and I upgraded my machine in order to test out Dynamic Memory.</p>
<p>As I was installing it I had a chat with my colleague (and serial early adopter) <a title="Lambros Vasiliou" href="http://spandothers.spaces.live.com/default.aspx" target="_blank">Lambros Vasiliou</a> to gauge his impressions. He mentioned his favourite improvement is that the <a title="Hyper-V Graphics Performance Issues" href="../index.php/the-definitive-word-on-hyper-v-high-end-graphics-performance/" target="_blank">known Hyper-V host graphics performance issues</a> are either gone or greatly mitigated. This is an issue that&#8217;s been  repeatedly discussed in our organisation since we moved from a  hotchpotch of virtualisation technologies to Hyper-V as our <a title="SharePoint Develpoment Environment" href="../index.php/building-a-sharepoint-20072010-development-environment/" target="_blank">standard development build</a> last year. It&#8217;s probably the single thing that irritates our users of this system more than anything else.</p>
<p>I did some testing myself with videos playing and moving windows about with Windows Key + Arrow hot keys. The results were fairly impressive &#8211; without doubt a big improvement. One thing that still behaved poorly on my Dell XPS M1330 (with NVIDIA GeForce 8400GS) is full-screen YouTube, Vimeo, etc. The CTRL+ALT+DEL redraw operation seems a bit sluggish still as well. I noticed that my PowerPoint Presenter View was better, but still not 100% responsive.</p>
<p>I also tested on the Dell Latitude E6410 (with NVIDIA NVS 3100M). Not only is the previously-mentioned blue screen fixed and the graphics generally improved in the same ways as on the XPS, but the full-screen in-browser video and CTRL+ALT+DEL are instantaneous. One possible explanation for this different experience is that the Latitude has a processor with SLAT, but I can&#8217;t validate that at all yet&#8230; because I can&#8217;t find any information whatsoever about why/how this has changed!</p>
<p>I think it&#8217;s unlikely that these changes are related to RemoteFX (since the XPS M1330 does not have a processor with SLAT and I never enabled it on the Latitude E6410). I would expect RemoteFX to improve the experience connecting to the guests, not the Hyper-V root partition (although it&#8217;s possible that this improvement is somehow related). I&#8217;ve tried <a title="Understanding High-End Video Performance Issues with Hyper-V" href="http://blogs.msdn.com/b/virtual_pc_guy/archive/2009/11/16/understanding-high-end-video-performance-issues-with-hyper-v.aspx?PageIndex=2#comments" target="_blank">pinging Virtual PC Guy</a> and posted <a title="Does Service Pack 1 Beta resolve Hyper-V high-end video performance issues" href="http://social.technet.microsoft.com/Forums/en-US/w7itproSP/thread/806a9da6-1a5e-49c3-b650-fd31009f80d4" target="_blank">this query on the SP1 Beta TechNet forum</a> but so far the community can only confirm that this is indeed working on a number of different models including a Mac (drill down in the links on the TechNet thread for more information). One way or the other this is great news, but I&#8217;m finding the lack of information about these changes quite maddening given the amazing detail that&#8217;s been produced for the Dynamic Memory launch. I&#8217;d really appreciate further insights if anyone can reveal the internals.</p>
<p>* A few notes regarding the Service Pack 1 Beta installation process:</p>
<ol>
<li>The links on the SP1 Beta page are a bit confusing. You should be aware that if you click the &#8220;Evaluate Windows Server 2008 R2 and SP1 Beta&#8221; link you will be taken to a page with a &#8220;Download Windows Server 2008 R2 Trial Software&#8221; section at the top. &#8220;Download SP1 Beta Software&#8221; is beneath that section. This is what you want. If you click the first link you will initiate a download of the full Windows Server 2008 R2 (SP0) installer. If you &#8220;upgrade&#8221; your system using that installer you&#8217;ll wind up with a nice new trial version of SP0. AGH. Starting again from the links in the right section I was able to run a small installer that presents the updates to Windows Update and that has all worked fine, so I&#8217;d recommend that route. Alternately the Service Pack can be downloaded stand-alone. I did that for my second install and it worked fine too. Also note the <a title="Windows Server 2008 R2 SP1 Beta Reviewer’s Guide" href="http://download.microsoft.com/download/B/9/3/B9339F1F-DFE7-4AF7-8D20-38A0612D74AA/Windows_Server_2008_SP1_Beta_Reviewers_Guide.docx">Windows Server 2008 R2 SP1 Beta Reviewer’s Guide</a>, &#8220;to evaluate the core features of Windows Server 2008 R2 SP1 Beta release in your environment&#8221;.</li>
<li>If you use Forefront you will need to uninstall it in order to install SP1 Beta, so make sure to remember to reinstall it afterwards.</li>
<li>When I installed the Service Pack my screen went black for about ten minutes following the first reboot. Be prepared for this. You&#8217;ll see plenty of ongoing disk activity but nothing on the screen. Fairly disconcerting, but perhaps this is all a part of these same video changes.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/hyperv-video-issues-fixed-windows-server-2008-r2-sp1-beta/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Optimising the SharePoint 2010 IW Demo VM Part 2</title>
		<link>http://tristanwatkins.com/index.php/optimising-the-sharepoint-2010-iw-demo-vm-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=optimising-the-sharepoint-2010-iw-demo-vm-2</link>
		<comments>http://tristanwatkins.com/index.php/optimising-the-sharepoint-2010-iw-demo-vm-2/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 06:20:20 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Exchange 2010]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[Virtual Machine]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1114</guid>
		<description><![CDATA[Continuing on from Part 1, in this post I&#8217;ll discuss the Microsoft 2010 Information Worker Demo Exchange VM, the SahrePoint VM&#8217;s event logs and potential future improvements to the environment. Exchange Server Reconfiguration Tidying up the Exchange server is a much more straight-forward process. In fact, all of the changes that I made are network [...]]]></description>
			<content:encoded><![CDATA[<p>Continuing on from <a title="Optimising the SharePoint 2010 IW Demo VM Part 1" href="http://tristanwatkins.com/index.php/optimising-the-sharepoint-2010-iw-demo-vm-1/" target="_blank">Part 1</a>, in this post I&#8217;ll discuss the Microsoft 2010 Information Worker Demo Exchange VM, the SahrePoint VM&#8217;s event logs and potential future improvements to the environment.</p>
<h2>Exchange Server Reconfiguration</h2>
<p>Tidying up the Exchange server is a much more straight-forward process. In fact, all of the changes that I made are network orientated per the network changes from the first post, so if you are not adding a second NIC or a second fixed IP address on the original internal NIC, these steps aren’t necessary.<br />
<span id="more-1114"></span></p>
<ul>
<li>Import the virtual machine. Plug the Hyper-V Internal Network in to the first NIC and add a second NIC with the Hyper-V ICS Network plugged in to it.</li>
<li>
<div>The initial IP address is 192.168.150.2.</div>
</li>
<li>Rename the Local Area Connection NIC to <em>Hyper-V Internal Connection</em> (or your preference).</li>
<li>Rename the Local Area Connection 2 (or maybe 3) NIC to <em>Hyper-V ICS Connection</em> (or your preference).</li>
<li>In IPv4 properties on the <em>Hyper-V ICS Connection</em>, change the Advanced TCP/IP Settings to not &#8220;Register this connection&#8217;s addresses in DNS&#8221;, as it is dynamic.</li>
<li>I disabled IPv6 on both NICs as it is already disable on our host’s network connections.</li>
<li>
<div>Add a second IPv4 address to the <em>Hyper-V Internal Connection</em>:  192.168.200.151/255.255.255.0.</div>
<ul>
<li>
<div>Added the same address on the DNS tab for this NIC.</div>
</li>
</ul>
</li>
</ul>
<ul>
<li>Check DNS to make sure the new address was added.</li>
<li>Added a HOSTS file entry for <em>demo2010b</em> pointing at 192.168.200.151.</li>
<li>Tested logging on via Remote Desktop from the Host machine.</li>
</ul>
<p>Shutdown/snapshot and optionally export the VM if time/resources permit.</p>
<h2>Reviewing SharePoint Server event logs</h2>
<p>This section details my review of the event logs in the shipped state. I did not take any action except for the last two items regarding DCOM fixes and the SharePoint Health Logs. I believe that most of these errors are probably an effect of running so many things in one environment, but I’d welcome comments if you have any insight to share.</p>
<ul>
<li><strong>SetSPN for WSMAN warnings</strong>:<em> The WinRM service failed to create the following SPNs: WSMAN/demo2010a.contoso.com; WSMAN/demo2010a.<br />
Additional Data<br />
The error received was 8344: %%8344.<br />
User Action<br />
The SPNs can be created by an administrator using setspn.exe utility.</em><br />
Presumably these SPNs can be created manually or the rights to create the SPNs can be assigned to the WinRM service account if needed, but I am not making any changes here until I see that it is necessary to do so. There are some Kerberos Audit Failures in the security logs but since the SharePoint environment is self-contained and there are no secondary hops, I don&#8217;t think this is worthwhile.</li>
<li><strong>VSS Error 8320</strong>:<em> Volume Shadow Copy Service error: Failed resolving account Administrator with status 1376. Check connection to domain controller and VssAccessControl registry key.<br />
Operation:<br />
Initializing Writer<br />
Context:<br />
Writer Class Id: {a6ad56c2-b509-4e6c-bb19-49d8f43532f0}<br />
Writer Name: WMI Writer<br />
Error-specific details:<br />
Error: NetLocalGroupGetMemebers(Administrator), 0&#215;80070560, The specified local group does not exist.<br />
</em>There are a number of articles that discuss fixes for this Warning but since this is an unusual configuration (SharePoint/SQL on a DC) and the warning is about the &#8220;Administrator&#8221; account, I am hesitant to make this change, for fear of introducing instability. Further reading at <a href="http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/Server/Windows_Server_2008/Q_25455278.html" target="_blank">Experts Exchange</a>, <a href="http://technet.microsoft.com/en-us/library/cc787108(WS.10).aspx" target="_blank">Technet</a> and <a href="http://forums.anandtech.com/showthread.php?t=2085091" target="_blank">AnandTech</a>.</li>
<li>There are <strong>two errors regarding the ULS config file, 7105 and 7056</strong>. I&#8217;m honestly unsure what to make of these errors since they refer to <em>C:\Program Files\Common Files\Microsoft Shared\ULS\14\uls.config.xml</em> and I&#8217;m not certain how that is used in generating the ULS log files for SharePoint which are appearing normally at <em>C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\LOGS</em>. Not taking any action for now.</li>
<li><strong>Microsoft.ResourceManagement.ServiceHealthSource Error 22</strong>:<br />
<em>The Forefront Identity Manager Service cannot connect to the SQL Database Server.<br />
The SQL Server could not be contacted. The connection failure may be due to a network failure, firewall configuration error, or other connection issue. Additionally, the SQL Server connection information could be configured incorrectly.<br />
Verify that the SQL Server is reachable from the Forefront Identity Manager Service computer. Ensure that SQL Server is running, that the network connection is active, and that the firewall is configured properly. Last, verify the connection information has been configured properly. This configuration is stored in the Windows Registry.<br />
</em>This error seems to occurs before the FIM Sync service starts, which may or may not be a related issue. The User Profile Service Application is available though, so I believe this has something to do with this connection attempt occurring before the Service Application is able to connect with SQL.</li>
<li><strong>CAPI2 Error</strong>:<br />
<em>Failed extract of third-party root list from auto update cab at: &lt;<a href="http://www.download.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootstl.cab">http://www.download.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootstl.cab</a>&gt; with error: A required certificate is not within its validity period when verifying against the current system clock or the timestamp in the signed file.</em><br />
This issue <a href="http://social.technet.microsoft.com/Forums/en/w7itproinstall/thread/1e7d815a-4d31-44d1-8f1c-373a8d091582">seems to have emerged in July of this year on Windows 7 and Windows Server 2008 R2 machines</a>. Unfortunately there&#8217;s no clear resolution at this time, but also no clear negative impact on this system, so I’m not taking any action for now.</li>
<li><strong>DCOM 10016 error</strong>. A fix for this has been <a href="http://www.mattgrovesblog.com/2009/10/dcom-error-10016-with-sharepoint-2010.html">documented well by Matt Groves</a>.</li>
<li>
<div>SharePoint Health Reports:</div>
<ul>
<li>Almost all of the warnings and errors in the Health Report are either one-time issues that no longer exist or are symptoms of the single-server install on a DC.</li>
<li>An exception to this is the &#8220;Validate the My Site Host and individual My Sites are on a dedicated Web application and separate URL domain&#8221; message, which is accurate. The environment has not been configured with a dedicated MySite application.</li>
<li>The one other issue was &#8220;The Unattended Service Account Application ID is not specified or has an invalid value&#8221;. This has not been set up in the VM and will need to be configured in the Secure Store Service if it will be used.</li>
<li>I have chosen to disable all of these rules, as they are undesirable in a demo environment. I also deleted the existing alerts.</li>
</ul>
</li>
</ul>
<h2>Pending</h2>
<p>As I mentioned above, I hope to revisit this VM and create new snapshots that will reduce load by disabling bulky services. This snapshot branch might resemble something like this:</p>
<ul>
<li>Current state, as above
<ul>
<li>Most SharePoint Services turned off in Services on Server</li>
<li>BI Indexing Connector Service , FAST, OCS and Project Server removed. All SharePoint Services turned on</li>
<li>As above, but with FAST</li>
<li>As above, but with OCS</li>
<li>As above, but with Project Server</li>
<li>BI Indexing Connector Service , FAST, OCS and Project Server removed. All SharePoint Services turned off</li>
<li>As above, but with Search/FAST</li>
<li>As above, but with OCS</li>
<li>As above, but with Project Server</li>
</ul>
</li>
</ul>
<p>I really haven’t planned this yet or discussed these options with users of this environment, so it could wind up looking completely different. Also, this many snapshots would probably chew up too much disk space and get confusing for the users. But watch this space for updates as I hope to revisit the topic again. And please feel free to suggest other optimisations or additions that work well for you.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/optimising-the-sharepoint-2010-iw-demo-vm-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Optimising the SharePoint 2010 IW Demo VM Part 1</title>
		<link>http://tristanwatkins.com/index.php/optimising-the-sharepoint-2010-iw-demo-vm-1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=optimising-the-sharepoint-2010-iw-demo-vm-1</link>
		<comments>http://tristanwatkins.com/index.php/optimising-the-sharepoint-2010-iw-demo-vm-1/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 06:23:34 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[Virtual Machine]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1094</guid>
		<description><![CDATA[Around the time that Microsoft released the public beta of SharePoint 2010 they also released a demonstration virtual machine, known as the 2010 Information Worker Virtual Machine, which was updated to RTM in mid-June. This is a fantastic resource for demonstrating SharePoint 2010. The content and demonstration scenarios (including walk-throughs) represent a huge investment from [...]]]></description>
			<content:encoded><![CDATA[<p>Around the time that Microsoft released the public beta of SharePoint 2010 they also released a demonstration virtual machine, known as the 2010 Information Worker Virtual Machine, which was <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=751fa0d1-356c-4002-9c60-d539896c66ce&amp;displaylang=en">updated to RTM in mid-June</a>. This is a fantastic resource for demonstrating SharePoint 2010. The content and demonstration scenarios (including walk-throughs) represent a huge investment from Microsoft and it would be foolish not to at least evaluate these assets. Personally, I think it’s silly to reinvent this wheel.</p>
<p>Now the public beta trial is expiring and people are moving to the RTM build. It appears to be much improved, in that more of the product works in this version and a few niggles have been fixed now. However, it&#8217;s widely acknowledged that the resource requirements for this virtual machine are gargantuan due to the breadth of what it offers.<br />
<span id="more-1094"></span></p>
<h2>What you get</h2>
<p>The first of these VMs doesn&#8217;t just have SharePoint Server 2010 (Enterprise). It has:</p>
<ul>
<li>Active Directory Domain Services</li>
<li>DNS</li>
<li>SQL 2008 R2</li>
<li>Office Professional Plus 2010 (including Visio and Project)</li>
<li>SharePoint Designer 2010</li>
<li>Visual Studio 2010</li>
<li>Office Web Applications</li>
<li>FAST Search for SharePoint 2010</li>
<li>Project Server 2010</li>
<li>Office Communication Server 2007 R2</li>
</ul>
<p>There is a second VM with Exchange Server 2010 which you can use as needed. Note: when downloading the RAR files which self-extract to the VM export files, I highly recommend using the Akamai download links. They will save you time and frustration.</p>
<h2>Why I’m writing about it</h2>
<p>The first of these VMs does a lot, and will chew up more virtual resources than most physical demo machines have to provide. In this post I documented the tweaks I made to our copy of the Virtual Machines and I&#8217;ve reviewed the event logs to identify any other issues that are present in the shipped state. I also spent some time fixing the start-up of some services due to observed delays in network connectivity.</p>
<p>The optimisations achieved here are not immense but they establish a firmer baseline from which to carry out further improvements. Unfortunately I have not had the time to explore the best approach to taking these core assets and removing the bulky bits in order to provide snapshots that unleash bits of the functionality as needed. With time I hope to revisit this and potentially explore other uses for this environment.</p>
<h2>SharePoint Server Reconfiguration</h2>
<p>These are the steps I’ve taken to reconfigure the SharePoint Virtual Machine:</p>
<ul>
<li>Imported the virtual machine. Plugged the Hyper-V Internal Network in to the first NIC and added a second NIC with the Hyper-V ICS Network plugged in to it. To understand more about the NIC naming conventions I&#8217;m using here and how we use these Hyper-V networks, please refer to <a href="http://tristanwatkins.com/index.php/building-a-sharepoint-20072010-development-environment/">my series on SharePoint development environments</a>.
<ul>
<li>If you&#8217;re curious, we dual-boot our Sales laptops in to this development environment so our sales people can use Hyper-V as needed.</li>
</ul>
</li>
<li>The default SharePoint VM RAM is set to 5120MB (5GB) RAM. This could be increased up to ~6GB on a host with 8GB RAM, assuming the load on the root partition is minimal during demonstration and the Exchange VM is not being used concurrently.</li>
<li>If using a UK keyboard through the Hyper-V Virtual Machine Connection, the password will need to be entered as <em>pass<strong>&#8220;</strong>word1</em></li>
<li>Note: at login a warm-up script runs, which I will discuss more in a moment.</li>
<li>I changed the time zone to London.</li>
<li>I changed UAC to &#8220;Notify me only when programs try to make change to my computer (do not dim my desktop)&#8221;. I find that with <a title="Known Hyper-V graphics performance issues" href="http://tristanwatkins.com/index.php/the-definitive-word-on-hyper-v-high-end-graphics-performance/" target="_blank">Known Hyper-V graphics performance issues</a> this setting achieves the right balance between usability and security.</li>
</ul>
<h3>Service start-up</h3>
<ul>
<li>I reviewed the event logs to identify which Manual Services would start up at a delay. Approximately five minutes after the machine started the Virtual Disk Service started up. That was followed by the following services:
<ul>
<table border="2" cellspacing="0" cellpadding="2" width="400">
<tbody>
<tr>
<td width="239" valign="top"><strong>Service</strong></td>
<td width="161" valign="top"><strong>Startup Type</strong></td>
</tr>
<tr>
<td width="239" valign="top">Application Experience</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">BI Indexing Connector Service</td>
<td width="161" valign="top">Automatic (Delayed Start)</td>
</tr>
<tr>
<td width="239" valign="top">Certificate Propagation</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Diagnostic Policy Service</td>
<td width="161" valign="top">Automatic (Delayed Start)</td>
</tr>
<tr>
<td width="239" valign="top">Diagnostic System Host</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Distributed Transaction Coordinator</td>
<td width="161" valign="top">Automatic (Delayed Start)</td>
</tr>
<tr>
<td width="239" valign="top">FAST Search for SharePoint</td>
<td width="161" valign="top">Automatic</td>
</tr>
<tr>
<td width="239" valign="top">FAST Search for SharePoint Browser Engine</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">FAST Search for SharePoint QRProxy</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">FAST Search for SharePoint Sam Admin</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">FAST Search for SharePoint Sam Worker</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Function Discovery Provider Host</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">IPsec Policy Agent</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Microsoft .Net Framework NGEN v4.0.30319_X86</td>
<td width="161" valign="top">Automatic (Delayed Start)</td>
</tr>
<tr>
<td width="239" valign="top">Microsoft .Net Framework NGEN v4.0.30319_X64</td>
<td width="161" valign="top">Automatic (Delayed Start)</td>
</tr>
<tr>
<td width="239" valign="top">Network Connections</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Network List Service</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Office 64 Source Engine</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Office Software Protection Platform</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Portable Device Enumerator Service</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Remote Access Connection Manager</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Remote Desktop Services</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Remote Desktop Services Configuration</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Remote Desktop Services UserMode Port Redirector</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Secure Socket Tunneling Protocol Service</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">SPP Notification Service</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">SQL Full-Text Daemon Launcher</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Telephony</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Windows Defender</td>
<td width="161" valign="top">Automatic (Delayed Start)</td>
</tr>
<tr>
<td width="239" valign="top">Windows Module Installer</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Windows Remote Management</td>
<td width="161" valign="top">Automatic (Delayed Start)</td>
</tr>
<tr>
<td width="239" valign="top">Windows Search</td>
<td width="161" valign="top">Automatic (Delayed Start)</td>
</tr>
<tr>
<td width="239" valign="top">Windows Update</td>
<td width="161" valign="top">Automatic (Delayed Start)</td>
</tr>
<tr>
<td width="239" valign="top">WinHTTP Web Proxy Auto-Discovery Service</td>
<td width="161" valign="top">Manual</td>
</tr>
</tbody>
</table>
</ul>
</li>
<li>In my testing, switching the <em>Network Connections</em> and <em>WinHTTP Web Proxy Auto-Discovery Service</em> services to Automatic would reduce time to CTRL+ALT+DEL from five minutes to three minutes. It’s worth verifying these results in your environment.</li>
</ul>
<h3>Service Hardening</h3>
<p>I disable the following services, per my normal virtual machine hardening processes. I don’t believe that any of them are necessary in this environment:</p>
<ul>
<li>Certificate Propagation</li>
<li>Desktop Windows Manager Session Manager</li>
<li>Distributed Link Tracking Client</li>
<li>Encrypted File System</li>
<li>Function Discovery Provider Host</li>
<li>Function Discovery Resource Publication</li>
<li>IP Helper</li>
<li>Microsoft iSCSI Initiator Service</li>
<li>Multimedia Class Scheduler</li>
<li>Problem Reports and Solutions Control Panel Support</li>
<li>Remote Procedure Call (RPC) Locator</li>
<li>Smart Card</li>
<li>Smart Card Removal Policy</li>
<li>Special Administration Console Helper</li>
<li>Tablet PC Input Service</li>
<li>Windows Audio</li>
<li>Windows Audio Endpoint Builder</li>
<li>Windows Error Reporting Service</li>
<li>Windows Search</li>
<li>Wired AutoConfig</li>
</ul>
<p>I also disabled these services. I have no idea why they were ever enabled.</p>
<ul>
<li>Microsoft Fibre Channel Platform Registration Service</li>
<li>Microsoft FTP Service</li>
</ul>
<p>Following a reboot to assess boot times after hardening, I was prompted with a firewall exception warning for SharePoint Workspace. I allowed this exception.</p>
<h3>MSCONFIG</h3>
<p>I mentioned earlier that a warm-up script launched at login. I reviewed the contents of the script and identified that it enumerated all sites in the farm, so I browsed to each site that was getting warmed up to have a look at that content. Most of these sites pull up the “select a template” page, indicating that there is not content in the web application, so I have chosen to disable the script for now and will likely revisit the use of the <a title="IIS.NET application warm-up module" href="http://www.iis.net/download/applicationwarmup" target="_blank">IIS.NET application warm-up module</a> when it matures. In the mean time, I recommend that recipients of this build take a snapshot of the VM while the <a href="http://intranet">http://intranet</a> and Central Admin web applications are fully warmed up for their needs so they can roll back to that point as needed.</p>
<p>While in MCSONFIG, I turned off:</p>
<ul>
<li>Watson Subscriber for SENS Network Notifications</li>
<li>EcmCopyLinks</li>
<li>
<div>Warm Up</div>
</li>
<li>
<div>Optional:</div>
<ul>
<li>
<div>Microsoft Office 2010 (these are sync services – probably best to leave them running)</div>
</li>
<li>
<div>Microsoft Office Communicator 2007 R2 (this is preferential)</div>
</li>
</ul>
</li>
</ul>
<h3>Housekeeping and simple benchmarks</h3>
<p>At this point I wanted to take some basic start-up timings so I shut down the VM, but before starting back up I changed the Hyper-V VM’s BIOS settings to boot from IDE before CD. After that I took some pretty unscientific measurements of boot times and resource consumption on my Dell XPS M1330:</p>
<ul>
<li>CTRL+ALT+DEL: 2:56.</li>
<li>Desktop: 3:47.</li>
<li>Baseline RAM consumption down from &gt;4.5GB to ~3.65GB before hitting the intranet and Central Administration web apps (remember, they aren’t warmed up anymore).</li>
<li>RAM consumption at just under 4GB after hitting Central Administration.</li>
<li>RAM consumption at ~4.25GB after hitting <a href="http://intranet">http://intranet</a>.</li>
</ul>
<p>After taking these measurements I shut down the VM and took a snapshot.</p>
<h3>Network changes</h3>
<p>These changes are optional, depending on how you will use the VM in your environment. I opted to add a second IP address on our existing internal network range, as follows:</p>
<ul>
<li>The initial IP address is 192.168.150.1/255.255.255.0.</li>
<li>Rename the Local Area Connection NIC to <em>Hyper-V Internal Connection</em> (or your preference).</li>
<li>Rename the Local Area Connection 2 (or maybe 3) NIC to <em>Hyper-V ICS Connection</em> (or your preference).</li>
<li>In IPv4 properties on the <em>Hyper-V ICS Connection</em>, change the Advanced TCP/IP Settings to not &#8220;Register this connection&#8217;s addresses in DNS&#8221;, as it is dynamic.</li>
<li>I disabled IPv6 on both NICs as it is already disable on our host’s network connections.</li>
<li>
<div>Add a second IPv4 address to the <em>Hyper-V Internal Connection</em>: 192.168.200.150/255.255.255.0.</div>
<ul>
<li>I also added 192.168.200.150 on the DNS tab for this NIC.</li>
</ul>
</li>
<li>Check DNS to make sure the new address is added.</li>
<li>Add a HOSTS file entry in the root partition for <em>demo2010a</em> pointing at 192.168.200.150.
<ul>
<li>If desirable, add another entry pointing for intranet.contoso.com pointing at 192.168.200.150. This can be used for browsing from the root partition’s browser.</li>
</ul>
</li>
<li>Tested logging on via Remote Desktop and browsing to Central Admin from the Host machine.</li>
</ul>
<h3>Client tools and other changes</h3>
<p>Some final changes are optional, but I think generally desirable.</p>
<ul>
<li>Install Firefox, Opera, Safari, Chrome.</li>
<li>Install PDF Exchange Viewer or your choice of PDF viewer.</li>
<li>Update: As mentioned by Leon Zandman in the comments here, <a href="http://technet.microsoft.com/en-us/sysinternals/bb897434">the free SysInternals ZoomIt tool</a> is very useful for presentations. You may also want to consider adding it.</li>
<li>Add the environment variable path to the 14 hive’s BIN.</li>
</ul>
<p>And that’s it for the SharePoint VM. Shutdown and take a new snapshot, optionally deleting the first one. I would suggest exporting the VM if time/resources permit, noting that export operations can be time-consuming and disk intensive.</p>
<p>In <a title="Optimising the SharePoint 2010 IW Demo VM Part 2" href="http://tristanwatkins.com/index.php/optimising-the-sharepoint-2010-iw-demo-vm-2/" target="_blank">part two</a> I&#8217;ll discuss the Exchange VM, event logs and potential future improvements.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/optimising-the-sharepoint-2010-iw-demo-vm-1/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Dynamic Memory for Hyper-V in Windows Server 2008 R2 SP1</title>
		<link>http://tristanwatkins.com/index.php/dynamic-memory-for-hyper-v-in-windows-server-2008-r2-sp1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dynamic-memory-for-hyper-v-in-windows-server-2008-r2-sp1</link>
		<comments>http://tristanwatkins.com/index.php/dynamic-memory-for-hyper-v-in-windows-server-2008-r2-sp1/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 11:19:58 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Dynamic Memory]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[NUMA]]></category>
		<category><![CDATA[Overcommit]]></category>
		<category><![CDATA[SLAT]]></category>
		<category><![CDATA[SP1]]></category>
		<category><![CDATA[VMWare]]></category>
		<category><![CDATA[Windows Server 2008 R2]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=978</guid>
		<description><![CDATA[I&#8217;ve just finished watching Virtual PC Guy&#8217;s TechEd video on the forthcoming Dynamic Memory update for Hyper-V in Windows Server 2008 R2 SP1. The beta release of the service pack is due in July. The video is fairly lengthy, at around 80 minutes, but is well worth a watch if you&#8217;re interested and find the [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just finished watching <a href="http://blogs.msdn.com/b/virtual_pc_guy/archive/2010/06/10/talking-about-dynamic-memory-the-movie.aspx">Virtual PC Guy&#8217;s TechEd video</a> on the forthcoming Dynamic Memory update for Hyper-V in Windows Server 2008 R2 SP1. The beta release of the service pack is due in July. The video is fairly lengthy, at around 80 minutes, but is well worth a watch if you&#8217;re interested and find the time. If not, here&#8217;s a round-up:<span id="more-978"></span></p>
<ul>
<li>Microsoft&#8217;s approach to Dynamic Memory is fundamentally different than VMWare&#8217;s overcommitment, in that VMWare doesn&#8217;t trust information about memory usage from within the guest, whereas Microsoft&#8217;s implementation is based around an awareness of the amount and type of memory that&#8217;s being used at all times.</li>
<li>Dynamic Memory will work by Adding/Removing memory.
<ul>
<li>Adding memory is enabled through a new synthetic memory driver.</li>
<li>Removing memory that&#8217;s not being used is done with ballooning.</li>
<li>Memory is now assigned with a few new values:
<ul>
<li>Startup memory is the amount of memory assigned to a VM, which is also the minimum memory the VM will consume (default value is 512 MB).</li>
<li>Maximum memory limits how much memory a VM can consume.</li>
<li>Priority can be assigned to specific VMs in order to make sure that they receive available memory before other lower-priority VMs.</li>
<li>A Memory Buffer can be set to reserve memory for specific VMs, for instance if they need extra memory for file caching.</li>
</ul>
</li>
</ul>
</li>
<li>Hyper-V Manager adds two new columns.
<ul>
<li>Current Memory identifies how much memory the VM is consuming.</li>
<li>Memory Availability identifies the difference between how much memory a VM has vs. wants in a +/-% figure.
<ul>
<li>When the availability goes negative, the Windows guest will start to work with the lesser amount of memory that&#8217;s now available to it (via paging, etc).</li>
<li>Negative availability will result in reduced performance, but the systems will continue to function.</li>
</ul>
</li>
</ul>
</li>
<li>Memory is now reserved for the root partition in a different way, so that dynamic memory won&#8217;t bring down the host.
<ul>
<li>This amount can be configured with a new registry key based on how the root partition is being used, for instance if it&#8217;s your desktop OS.</li>
</ul>
</li>
<li>As Dynamic Memory is used more, the chances of spanning NUMA nodes increases (on NUMA systems).
<ul>
<li>He points out that different systems have vastly different Back Channel performance, so the impact of NUMA Spanning can be negligible or drastic.</li>
<li>In SP1, NUMA Spanning can be disabled (if desired).</li>
</ul>
</li>
<li>Dynamic Memory also supports Large Pages, which are likely to become more common with virtualised Exchange/SQL.
<ul>
<li>VMWare cannot overcommit these pages.</li>
</ul>
</li>
<li>I&#8217;ve asked if there are specific processor requirements. I&#8217;ll be interested to see how/if this supports processors that don&#8217;t have SLAT.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/dynamic-memory-for-hyper-v-in-windows-server-2008-r2-sp1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Recovering from Hyper-V Virtual Machine corruption</title>
		<link>http://tristanwatkins.com/index.php/recovering-from-virtual-machine-corruption/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=recovering-from-virtual-machine-corruption</link>
		<comments>http://tristanwatkins.com/index.php/recovering-from-virtual-machine-corruption/#comments</comments>
		<pubDate>Fri, 28 May 2010 22:56:09 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[AVHD]]></category>
		<category><![CDATA[Corruption]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[Hyper-V Manager]]></category>
		<category><![CDATA[Snapshot]]></category>
		<category><![CDATA[VHD]]></category>
		<category><![CDATA[Virtual Har]]></category>
		<category><![CDATA[Virtual Machine]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=941</guid>
		<description><![CDATA[I was recently working with a Hyper-V VM that had a large branch of snapshots that I wanted to clean up, in order to conserve disk space. This was a SharePoint 2010 development VM which I&#8217;d configured specifically for a project, so I didn&#8217;t need all of the earlier snapshots. The environment has two VMs [...]]]></description>
			<content:encoded><![CDATA[<p>I was recently working with a Hyper-V VM that had a large branch of snapshots that I wanted to clean up, in order to conserve disk space. This was a SharePoint 2010 development VM which I&#8217;d configured specifically for a project, so I didn&#8217;t need all of the earlier snapshots. The environment has two VMs (one domain controller, everything else on the other), so I deleted all of the snapshots that I needed to get rid of on the first VM, one-by-one. From previous experience I knew that I could delete multiple snapshots before the initial merge operation completed. Hyper-V creates a queue of the merge operations that need to complete before the virtual machine can be restarted again. I left myself with only the latest snapshot and moved on to the second virtual machine to do the same. At this point I got a little too clever and started deleting the second snapshot before the first snapshot deletion was queued. It usually only takes a few seconds to complete but I jumped the gun and Hyper-V Manager threw two errors (4096 and 16410) regarding Virtual Machine file access when I tried to delete the second snapshot.</p>
<p><span id="more-941"></span><a href="http://tristanwatkins.com/wp-content/uploads/HyperV_Error_4096.png"><img style="display: inline; border: 0px;" title="Hyper-V_Error_4096" src="http://tristanwatkins.com/wp-content/uploads/HyperV_Error_4096_thumb.png" border="0" alt="HyperV Error 4096 thumb Recovering from Hyper V Virtual Machine corruption" width="549" height="387" /></a></p>
<p><a href="http://tristanwatkins.com/wp-content/uploads/HyperV_Error_16410.png"><img style="display: inline; border: 0px;" title="Hyper-V_Error_16410" src="http://tristanwatkins.com/wp-content/uploads/HyperV_Error_16410_thumb.png" border="0" alt="HyperV Error 16410 thumb Recovering from Hyper V Virtual Machine corruption" width="548" height="388" /></a></p>
<p>After that I tried to delete other snapshots but I kept getting errors and the VM entered a <em>Saved-Critical</em> state. This will happen when Hyper-V Manager cannot access a file system location or cannot find a file, for instance when a removable hard drive is pulled out.</p>
<p>Approximately 30 seconds later, Hyper-V thought that it regained access to the location:</p>
<p><a href="http://tristanwatkins.com/wp-content/uploads/HyperV_Error_4098.png"><img style="display: inline; border: 0px;" title="Hyper-V_Error_4098" src="http://tristanwatkins.com/wp-content/uploads/HyperV_Error_4098_thumb.png" border="0" alt="HyperV Error 4098 thumb Recovering from Hyper V Virtual Machine corruption" width="549" height="390" /></a></p>
<p>However, I couldn&#8217;t get any snapshots to delete and the virtual machine wouldn&#8217;t start. After a few minutes of panicked clicking I decided to restart the Hyper-V services. When they came back up my VM disappeared. The Virtual Machine configuration file was corrupted.</p>
<p><a href="http://tristanwatkins.com/wp-content/uploads/HyperV_Error_16310.png"><img style="display: inline; border: 0px;" title="Hyper-V_Error_16310" src="http://tristanwatkins.com/wp-content/uploads/HyperV_Error_16310_thumb.png" border="0" alt="HyperV Error 16310 thumb Recovering from Hyper V Virtual Machine corruption" width="548" height="388" /></a></p>
<p>The next event suggests that a snapshot file was also corrupted.</p>
<p><a href="http://tristanwatkins.com/wp-content/uploads/HyperV_Error_16330.png"><img style="display: inline; border: 0px;" title="Hyper-V_Error_16330" src="http://tristanwatkins.com/wp-content/uploads/HyperV_Error_16330_thumb.png" border="0" alt="HyperV Error 16330 thumb Recovering from Hyper V Virtual Machine corruption" width="548" height="385" /></a></p>
<p>These 16310 and 16330 errors repeated for a while. Panic continued. Eventually I rebooted. On reboot the VM was still missing and the 16310/16330 errors persisted.</p>
<p>On a hunch I decided to see what the AVHD files (the differencing disks that correlate with snapshot states) looked like.</p>
<p><a href="http://tristanwatkins.com/wp-content/uploads/HyperV_AVHDFiles.png"><img style="display: inline; border: 0px;" title="Hyper-V_AVHDFiles" src="http://tristanwatkins.com/wp-content/uploads/HyperV_AVHDFiles_thumb.png" border="0" alt="HyperV AVHDFiles thumb Recovering from Hyper V Virtual Machine corruption" width="548" height="265" /></a></p>
<p>This looked very much like what I would have expected if nothing had gone wrong (and if none of the snapshot deletions completed). Sticking with this line of inquiry (and what the 16310 error suggests), I created a new virtual machine and pointed it at the most recent AVHD file (selected above). All of my snapshots were missing but the virtual machine created successfully. I started the virtual machine and it was clearly in the same state it was in before I took the most recent snapshot, with a few caveats. In my panic I forgot to re-create my second NIC, so the VM started with only one (the one that I specified when I created the new VM). I also forgot to give it a second CPU. So I shut down the VM, made these changes, restarted, reconfigured the second NIC and tested that everything worked to my expectations. Recovery complete, so I shut down both VMs again.</p>
<p>At this point I&#8217;d recovered the VM but I still had a bunch of unnecessary data in my branch of differencing disks. In order to clean this up, I took a new snapshot of both VMs and exported the latest snapshot of each of them. This merged all the differences across the AVHD files in to a new, self-contained VHD file. After the exports finished I deleted the old VMs, waited for the Destroy operations to complete, cleaned up lingering files on the file system and imported the new exports. I took a new snapshot, as this is my new stable starting point and everything was (relatively speaking) back to normal. Phew!</p>
<p>With hindsight, I would have handled the recovery as follows:</p>
<ul>
<li>Create new VM, pointing at latest differencing disk (or whichever snapshot state you wanted to preserve).</li>
<li>Reconfigure processors.</li>
<li>Reconfigure network adapters in Hyper-V Manager.</li>
<li>Start the virtual machine.</li>
<li>Reconfigure NICs in the guest.</li>
<li>Reboot.</li>
<li>Test everything is working as expected in the VM.</li>
<li>Shut Down.</li>
<li>Snapshot.</li>
<li>Export.</li>
<li>Delete old VM from Hyper-V Manager.</li>
<li>Wait for the Destroy operation to complete.</li>
<li>Delete any lingering files from the file system.</li>
<li>Import the exported virtual machines.</li>
</ul>
<p>As I hinted at above, having gone through this process, it occurred to me that you could probably point at whichever AVHD file you wanted to, if you didn&#8217;t want to use the latest snapshot, assuming none of the AVHD files were corrupted. In this case it was just the virtual machine XML file and possibly the snapshot file that were corrupted, rather than the VHD file and differencing disks (AVHD files) themselves. The problem would be identifying which AVHD file corresponds to the snapshot that you want to keep, but in principal I think this would work.</p>
<p>I should note that this is probably unsupported, but you&#8217;re not really losing anything because otherwise you would have only been able to recover the first VHD file. This technique wouldn&#8217;t be much use if you didn&#8217;t know which snapshot you were after or if you wanted to recover the entire snapshot tree, but this fix gives you some recovery where the virtual machine file and the snapshot tree are corrupted but the disk data is not.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/recovering-from-virtual-machine-corruption/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Publishing a network-isolated virtual machine with RemoteApp</title>
		<link>http://tristanwatkins.com/index.php/publishing-a-network-isolated-virtual-machine-with-remoteapp/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=publishing-a-network-isolated-virtual-machine-with-remoteapp</link>
		<comments>http://tristanwatkins.com/index.php/publishing-a-network-isolated-virtual-machine-with-remoteapp/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 06:30:56 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Consultancy and Design]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[ICS]]></category>
		<category><![CDATA[mdop]]></category>
		<category><![CDATA[med-v]]></category>
		<category><![CDATA[Remote Desktop Services]]></category>
		<category><![CDATA[RemoteApp]]></category>
		<category><![CDATA[SharePoint 2007]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[TsAppAllowList]]></category>
		<category><![CDATA[Virtual Machine]]></category>
		<category><![CDATA[Windows Server 2008 R2]]></category>
		<category><![CDATA[Workgroup]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=897</guid>
		<description><![CDATA[To understand the development environment design choices that this article pertains to, it may be worth glancing at the design section of my SharePoint development series before diving in, if you haven&#8217;t already followed those posts. Cloning isolated VMs vs. scripted installation One of the challenges we&#8217;ve always faced with SharePoint development has been the [...]]]></description>
			<content:encoded><![CDATA[<address>To understand the development environment design choices that this article pertains to, it may be worth glancing at <a title="Building a SharePoint 2007/2010 development environment - Part II: Design" href="http://tristanwatkins.com/?p=499" target="_self">the design section of my SharePoint development series</a> before diving in, if you haven&#8217;t already followed those posts.</address>
<h2>Cloning isolated VMs vs. scripted installation</h2>
<p>One of the challenges we&#8217;ve always faced with SharePoint development has been  the tension between cloning actually identical environments versus automating  the deployment across distinct environments (or worse, repeating the installation manually). In the first case we save time  by eliminating reconfiguration and this ensures a consistent experience for each user. This is particularly beneficial for software development. These benefits can also be  obtained by scripting installation/configuration/deployment but there&#8217;s a  considerable overhead associated with developing and testing those scripts. As SharePoint 2010 is still quite new and we&#8217;ve been working on projects for some time now, we didn&#8217;t have the luxury of waiting for those refinements and we needed to take advantage of these efficiencies as we had done with SharePoint 2007 projects.</p>
<p><span id="more-897"></span>This cloning approach has one big drawback: it requires network isolation in order to prevent network, machine or SID duplication issues. We  can make up for that partially by using Network Address Translation (NAT) so  that we can get outbound connectivity from the VMs (we do this using Internet  Connection Sharing to an internal network), but this doesn&#8217;t provide any inbound connectivity for  Remote Desktop connections to the VMs or the SharePoint applications in them. Remote Desktop access may be desirable because of the limitations of the Hyper-V Virtual Machine Connection or because the users do not have permissions to Hyper-V itself. Alternately, it may be desirable to expose the virtual machine&#8217;s browser or another application directly, as I&#8217;ll describe later in this article.</p>
<p>Before I detail the approach to publishing a network-isolated remote desktop connection, I should note that it&#8217;s also possible to lock down the environment using Windows Firewall and Hyper-V networking so that inbound traffic is <em>isolated enough</em> that most duplication issues are accounted for &#8211; but this requires considerable planning, additional reconfiguration and it&#8217;s a large enough topic that it requires another post (I will try to revisit this soon). In short, I think each approach addresses different needs. For now, I&#8217;ll talk about RemoteApp.</p>
<h2>RemoteApp to a Remote Desktop</h2>
<p>It&#8217;s been some time since I looked at the new features in Windows Server 2008 R2. I spent most of last Summer getting to grips with them but have been living in a world of SharePoint 2010 since, so I never got a chance to revisit the interesting developments with Remote Desktop Services. Among them is RemoteApp, which allows us to publish applications  (rather than a terminal session) on a server through Remote Desktop Web Access.  That application could be Word, PhotoShop, SQL Server Management Studio, ULS  Viewer or whatever might be useful.</p>
<p>In the last couple of weeks I&#8217;ve  addressed a couple of requirements by publishing a saved Remote Desktop  connection file through Remote Desktop Web Access. To give a brief overview of the solution, I&#8217;ve logged on to the Hyper-V host server and saved a Remote Desktop connection file pointed at the target  Virtual Machine. This  relies on the Hyper-V host&#8217;s internal network connection to the virtual  machine and our  LAN connection to the Hyper-V host (the VM does not have an external network connection). Then I published that saved remote desktop connection file using RemoteApp. Users launch the connection through the Remote Desktop Web Application. This is a very basic example of how RemoteApp can  help us by bridging a network barrier that we have to maintain.</p>
<h2>RemoteApp to a Remote Application</h2>
<p>If we get slightly more complex we can also get to the real beauty of this approach. RDP connection files can now be customised so  that you can expose an application inside of the target machine.  This is like Windows 7&#8242;s XP Mode, except I&#8217;m able to take advantage of the  remote machine&#8217;s applications through Remote Desktop Services without having to  log on to either the Hyper-V server&#8217;s terminal or the virtual machine. Put another way, I can log on to my Hyper-V server&#8217;s Remote Desktop Web Application portal and launch an RDP file. That RDP file bypasses both terminals and provides me with the application that I&#8217;m really after &#8211; say, ULS Viewer, or a browser that can render the network-isolated SharePoint data. Here&#8217;s a more detailed scenario:</p>
<ul>
<li>
<div>A Hyper-V server on the network has a number of virtual machines that fully  replicate our domain infrastructure.</div>
<ul>
<li>Because this is an exact copy of our live environment we need to keep the test environment completely network-isolated.</li>
</ul>
</li>
<li>We&#8217;re testing Word 2010 on multiple operating systems before rolling it out  across the network.</li>
<li>The tester needs to be able to access the Word Application but should not  have access to the rest of the infrastructure.</li>
<li>We have XP, Vista and Windows 7 VMs on the Hyper-V server – all running Word  2010.</li>
<li>
<div>We log on to the Hyper-V server and create saved RDP files to each of those  VMs.</div>
<ul>
<li>We modify those RDP files so that they expose only the Word application.  This is a few lines of added or modified XML in the connection file and a change to the <em>TsAppAllowList</em> registry key on each virtual machine. More detail on <a href="http://blogs.msdn.com/rds/archive/2010/03/08/remoteapp-for-hyper-v-vdi-deployment.aspx">that  approach</a> here.</li>
</ul>
</li>
<li>We add each of these saved RDP files as Remote Applications in the <em>RemoteApp Manager</em> Remote Desktop  Services node on the Hyper-V server. To be clear, this is new Remote Desktop Services functionality. It only happens to be a Hyper-V server because we&#8217;re exposing Hyper-V guests.</li>
<li>The tester logs on to the Remote Desktop Web Access site and launches the RDP  files as needed. Each file will expose an instance of Word 2010 which is running  in the remote (and isolated) virtual machine&#8217;s context.</li>
</ul>
<p>This experience is improved if you install the Hyper-V server&#8217;s certificate for the Remote Desktop Web Application site. Also note, you will be prompted twice to authenticate &#8211; once to the Hyper-V server and once to the virtual machine. That&#8217;s not a great user experience, but it&#8217;s also not the worst. To be honest, I haven&#8217;t had the time to see if it can be improved with Kerberos or another approach. I&#8217;d be interested to hear more if others have deployed this approach for more critical loads or more demanding users.</p>
<h2>Other uses</h2>
<p>There are loads of potential uses for desktop virtualisation like this. One  of the most obvious ways that it could be used would be to allow a team member  to access an isolated development environment (or one of its applications) over the LAN. This wasn&#8217;t possible with my earlier design, and frankly, you don&#8217;t want to do a lot of this, but sometimes it can be really useful.</p>
<p>I realise this is conceptually difficult, so feel free to ask questions if this hasn&#8217;t been my clearest post. I&#8217;ve skipped some steps that are required to deploy the Remote Desktop Services. That&#8217;s another topic that is beyond the scope of this post. Again, I&#8217;m happy to answer questions about that, although I&#8217;d recommend hitting TechNet for a few hours before diving in. There&#8217;s loads of new functionality here and you may find another option suits your needs better. To the initiate, the Microsoft App-V, MED-V, MDOP story might look a bit &#8220;nice to have&#8221;, or possibly too complex, but this really isn&#8217;t complicated to implement and engaging with this new technology has opened my mind to other design options that I had previously shut out. Definitely worth a look.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/publishing-a-network-isolated-virtual-machine-with-remoteapp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SharePoint 2010 (not) in a Workgroup</title>
		<link>http://tristanwatkins.com/index.php/sharepoint-2010-not-in-a-workgroup/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sharepoint-2010-not-in-a-workgroup</link>
		<comments>http://tristanwatkins.com/index.php/sharepoint-2010-not-in-a-workgroup/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 23:08:23 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Consultancy and Design]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[AD LDS]]></category>
		<category><![CDATA[ADAM]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Domain Controller]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[psconfigui]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[topology]]></category>
		<category><![CDATA[User Profile]]></category>
		<category><![CDATA[Workgroup]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=885</guid>
		<description><![CDATA[With SharePoint 2010 RTM looming, I&#8217;ve stumbled across an architectural change that may surprise some people &#8211; namely, that SharePoint 2010 no longer supports multiple-server farms without a domain infrastructure. In SharePoint 2007 it was possible to create SharePoint farms in a Workgroup, so long as all of the user accounts for the services and [...]]]></description>
			<content:encoded><![CDATA[<p>With SharePoint 2010 RTM looming, I&#8217;ve stumbled across an architectural change that may surprise some people &#8211; namely, that SharePoint 2010 no longer supports multiple-server farms without a domain infrastructure. In SharePoint 2007 it was possible to create SharePoint farms in a Workgroup, so long as all of the user accounts for the services and application pool identities were named the same and had the same password. You could even manage users with an Active Directory Lightweight Directory Services (AD LDS) or Active Directory Application Mode (ADAM) LDAP directory (albeit with some fairly limiting restrictions). However, it was possible to use these farms for testing or when an Active Directory infrastructure was undesirable (as some people see it in a DMZ). Now, it is still possible to do a Simple installation on a single server without full domain services, but it is no longer supported on multiple servers, and the Simple installation comes with its own planning considerations, to which I&#8217;ll return in a bit. First, there&#8217;s another wrinkle regarding the single server Complete installation.</p>
<p><span id="more-885"></span>When I initially created our SharePoint 2010 beta development environments, I built them in a Workgroup, for many of the reasons that I chose to do so in 2007 (see the <em>Workgroup Development </em>section in <a title="Building a SharePoint 2007/2010 development environment Part II Design" href="http://tristanwatkins.com/?p=499">Part II of my series on SharePoint development environments</a>). Now, the SharePoint 2010 Configuration  Wizard (psconfigui) throws an error when choosing the Complete install option in a Workgroup. I was able to get past this error by following the suggestions on the Microsoft <a title="Single Server Complete Install of SharePoint 2010 using local accounts" href="http://sharepoint.microsoft.com/blogs/fromthefield/Lists/Posts/Post.aspx?ID=112">From the Field blog</a>, but a few weeks down the road we&#8217;ve pinned down two issues (as confirmed by Neil, the author of that post).</p>
<ol>
<li>Search will crawl successfully in this configuration, but the query role will never initiate. Queries from web applications that consume this Service Application will produce an error, which you will be able to trace to an application event log 6398 error and the key event in ULS, &#8220;The SDDL string contains an invalid sid or a sid that cannot be  translated.&#8221; As Victor Magidson from Microsoft puts it on <a title="SharePoint 2010 Search Error ID 6398" href="http://social.technet.microsoft.com/Forums/en-US/sharepoint2010setup/thread/58902475-396e-42ef-b19d-b06bd4df1ad0">this Technet thread</a>, this error occurs when a, &#8220;topology activation job is trying to create a propagation file share.&#8221; In short, the query role never finishes initialising so it will never serve queries. This only occurs on the single server Complete installation and deleting/re-creating the Service Application yields the same result.</li>
<li>The User Profile service application will also be useless*, but it always would have been since you couldn&#8217;t import users from the local user database in 2007 either. However, this has wider implications in SharePoint 2010 because of the social computing features, which developers probably won&#8217;t be able to live without.</li>
</ol>
<p>All this means that I need to consider rebuilding our development environments in a domain or we need to use the Simple installation. In the past I always avoided the Simple installation because it uses system accounts like Network Service for application pool identities, so it took some re-acquaintance to identify some of its limitations. It has no configuration options (thus the use of local system accounts), the User Profile Service Application does not start (presumably per Forefront Identity Manager 2010 installation issues as seen in other topologies) and it uses SQL Server Express (which developers aren&#8217;t very fond of), so we’re unlikely to pursue this option. Accordingly, we’re reviewing the ways that we can re-create the development environment in a domain.</p>
<p>Why don&#8217;t I just make the development machine a domain controller? This isn&#8217;t clear-cut and there are benefits to the simplicity of it, but ultimately I think it&#8217;s a bad idea because:</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.</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, which is a big concern when using Hyper-V on a laptop, where we don’t have  Sleep/Hibernate.</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>Why won&#8217;t we use a central development domain? Because then we can&#8217;t clone the VMs. We don&#8217;t just clone standard builds, we also use the same VM for each developer/consultant/architect on a single project. We may opt for this approach eventually, but I think the investment in automation is pretty considerable for it to be efficient with our team development requirements.</p>
<p>So I&#8217;m probably going to separate the DC on to a different server for now.  I&#8217;m  unlikely to add a third server for SQL, as even though it might be  faster, I think the complexity of managing networking and snapshots  across three servers is undesirable for developers, if we can get by with  two.</p>
<p>All of this underlines the reasons why I didn&#8217;t publish any SharePoint 2010 build guidance yet. Some things don&#8217;t become clear until you get your hands dirty. I&#8217;ll revisit this topic as soon as I feel comfortable that we&#8217;re pinning things down, but for now we&#8217;re still adapting our methods.</p>
<p>*I&#8217;ll note that I haven&#8217;t properly tested Claims Based Authentication  against a single server complete installation, so it&#8217;s conceivable that  you could import non-A/D users in to this configuration, but you&#8217;d still  need to live without Search.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/sharepoint-2010-not-in-a-workgroup/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>MAC duplication issues with captured VMs and WDS</title>
		<link>http://tristanwatkins.com/index.php/mac-duplication-issues-with-captured-vms-and-wds/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mac-duplication-issues-with-captured-vms-and-wds</link>
		<comments>http://tristanwatkins.com/index.php/mac-duplication-issues-with-captured-vms-and-wds/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 01:07:34 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[IT Management]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[MAC]]></category>
		<category><![CDATA[MVSMP]]></category>
		<category><![CDATA[Virtual Machine]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[Windows Deployment Services]]></category>
		<category><![CDATA[Windows Server 2008 R2]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=868</guid>
		<description><![CDATA[I&#8217;ve previously reported problems with MAC duplication on Hyper-V host external network connections on Windows Server 2008 R2, which I&#8217;ve never fully resolved, although we have been successfully working around the issue as detailed in the first link above. A couple of weeks ago I was working simultaneously on my Windows Server 2008 R2 laptop [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve <a title="Routine loss of connectivity on a Hyper-V host’s external connection" href="http://tristanwatkins.com/?p=115" target="_self">previously reported</a> problems with <a title="More on routine loss of external network connectivity on Hyper-V hosts (not guests)" href="http://tristanwatkins.com/?p=492" target="_self">MAC duplication on Hyper-V <strong>host</strong> external network connections</a> on Windows Server 2008 R2, which I&#8217;ve never fully resolved, although we have been successfully working around the issue as detailed in the first link above.</p>
<p>A couple of weeks ago I was working simultaneously on my Windows Server 2008 R2 laptop with Hyper-V (the same laptop build that&#8217;s been previously mentioned) and a Windows 7 x64 build that I was using for testing, when I noticed severe but intermittent network problems on both machines. After a fair amount of head scratching, I noticed that the two laptops had duplicated MAC addresses. Blatantly that shouldn&#8217;t happen, as the whole point of a MAC address is to provide uniqueness. The most perplexing issue was that the addresses conflicted across two different operating systems. However, it happened. Both wired adapters on the two machines had the MAC address 00-21-9B-DC-8E-0B. I uninstalled the wired adapter on the Windows 7 machine and scanned for new hardware. When the device reinstalled the problem went away.<span id="more-868"></span></p>
<p>Since then I&#8217;ve been poking around a bit and I&#8217;ve found this <a title="Desktop Files" href="http://technet.microsoft.com/en-us/magazine/2007.12.desktopfiles.aspx" target="_blank">old TechNet article</a> from December 2007 in which Wes Miller says:</p>
<p style="padding-left: 30px;">In addition to changing the SID and the machine name, you also need to change certain values that may be specific to the virtual computing technology you&#8217;re using. In particular, you need to change the MAC address (the unique ID for networking devices). Plus, many virtual applications also have their own unique identifier. Most store these in their own machine configuration files, so you&#8217;ll want to know how to manipulate those entries (and maintain their validity). Note that many virtualization products that support Pre-Boot Execution Environment (PXE) key the SMBIOS UUID based on their own unique ID—emphasizing the need to change this (or let the virtualization software change it for you, if supported) if you&#8217;re joining it to a domain; otherwise, managing WDS or RIS-client systems can become impossible (if GUIDs conflict). <strong>Most of the virtualization solutions I&#8217;ve worked with can have severe networking problems in the case of duplicate MAC addresses</strong>; so if you are not just moving a virtual machine, it&#8217;s very important that you change the MAC address if the virtualization software does not do it for you.</p>
<p>That&#8217;s by no means conclusive, but I&#8217;m not turning up much else. So if you&#8217;re encountering network problems with <a title="Building virtual Windows Deployment Services images" href="http://tristanwatkins.com/?p=233" target="_blank">WDS images that began their life as a virtual machine</a>, you may want to consider automating the un/re-installation of the NICs post-deployment or addressing that with WAIK somehow. Otherwise just make sure to do it manually before giving the machine to the recipient, or people will wind up with a rather frustrating network issue.</p>
<p>If we get around to doing any more testing of this or gather more evidence from internal deployments, I&#8217;ll post the findings here. In the mean time I thought I&#8217;d update the ongoing saga here.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/mac-duplication-issues-with-captured-vms-and-wds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building a SharePoint 2007/2010 development environment &#8211; Part VI: Issues and Results</title>
		<link>http://tristanwatkins.com/index.php/building-a-sharepoint-20072010-development-environment-part-vi-issues-and-results/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=building-a-sharepoint-20072010-development-environment-part-vi-issues-and-results</link>
		<comments>http://tristanwatkins.com/index.php/building-a-sharepoint-20072010-development-environment-part-vi-issues-and-results/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 02:05:19 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Client applications]]></category>
		<category><![CDATA[Consultancy and Design]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[AD LDS]]></category>
		<category><![CDATA[ADAM]]></category>
		<category><![CDATA[Aero Glass]]></category>
		<category><![CDATA[Bluetooth]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[net user]]></category>
		<category><![CDATA[NUMA]]></category>
		<category><![CDATA[SharePoint 2007]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[Sidebar]]></category>
		<category><![CDATA[Sleep]]></category>
		<category><![CDATA[Windows Server 2008 R2]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=509</guid>
		<description><![CDATA[In the first five parts of this series I covered the project objectives and the system design, then turned my attention to the Hyper-V host image build, automated deployment and the guest virtual machine build. In this post I review some of the questions and issues we&#8217;ve encountered after a few months of working this [...]]]></description>
			<content:encoded><![CDATA[<p>In the first five parts of this series I covered <a title="Building a SharePoint 2007/2010 development environment - Part I:  Introduction and Objectives" href="../?p=497" target="_self">the project objectives</a> and <a title="Building a SharePoint 2007/2010 development environment - Part II: Design" href="../?p=499" target="_self">the system design</a>, then turned my attention to the <a title="Building a SharePoint 2007/2010 development environment - Part III: Host image build and performance benchmarks" href="../?p=503" target="_self">Hyper-V host image build</a>, <a title="Building a SharePoint 2007/2010 development environment - Part IV: Automated deployment" href="../?p=505" target="_self">automated deployment</a> and the <a title="Building a SharePoint 2007/2010 development environment – Part V: Guest Build" href="http://tristanwatkins.com/?p=507" target="_self">guest virtual machine build</a>. In this post I review some of the questions and issues we&#8217;ve encountered after a few months of working this way and some overall reflections on the approach.<span id="more-509"></span></p>
<h2>Issues</h2>
<h3>Guest user accounts</h3>
<p>Guest virtual machines have been configured in a workgroup in order to conserve resources that would be spent on domain services. Additionally, developing on a domain controller is less than ideal for a number of reasons including performance tuning, administrative complexity, start-up times and security.</p>
<p>I created the development virtual machine with 160 local user accounts that have been logged on to the portal and the MySite application in order to create a basic profile. If there is a need to script creation of local user accounts, the <strong>net user</strong> command will be useful. However, this will be of limited assistance for complex profile requirements, since there is no way to synchronise with a directory and since the local users have no associated profile data, but it may be helpful for testing or demonstration.</p>
<p>If LDAP user accounts or other directory objects are required for development purposes (user profiles for instance), consider using <em>Active Directory Lightweight Directory Services</em>. This is the successor to <em>Active Directory Application Mode (ADAM)</em> in Windows Server 2003. It is a Windows LDAP directory that supports user and group objects without a full-blown domain infrastructure.</p>
<p>There will be some scenarios when a full domain services infrastructure is required for development. In those cases it may be preferable to run a second virtual machine as a domain controller.</p>
<h3>Hibernate and Sleep</h3>
<p>Hibernate and Sleep are disabled automatically when Hyper-V is installed. This is by design. Hyper-V disables this functionality, as the guest virtual machines could be damaged by a Hibernate or Sleep operation in the host if they were not saved gracefully. If, on the other hand, all virtual machines had to be put in to a saved state before a host machine could be put to sleep or hibernated, this would mean extending the wait time for these operations to unacceptable levels, as they are also automatically triggered by low battery warnings. Unfortunately we need to live with this behaviour.</p>
<h4>Do not travel with a running laptop</h4>
<p>Putting a running laptop in a bag will cause it to overheat quickly and is likely to damage hardware.</p>
<h4>Improvements to Start-up and Shutdown times</h4>
<p>These builds should start up and shut down in less than two minutes (closer to 90 seconds). Keep in mind that virtual machines can be safely saved and work can be resumed quickly when the machine is restarted. Since all of the development work will be taking place inside the virtual machine, this should reduce the Hibernate/Sleep annoyance.</p>
<h3>Virtual PC won’t run on Windows Server 2008 R2</h3>
<p>Windows Virtual PC will not work on Windows Server 2008 R2, as it was designed specifically for Windows 7. Earlier versions of Virtual PC may install on Windows Server 2008 R2, but they will not co-exist with Hyper-V, so do not install them.</p>
<h3>Hyper-V role won’t work after SysPrep</h3>
<p>This shouldn’t be an issue, as we have set up automated deployment, but it’s worth noting that this is <a title="Hyper-V Installation Tricks - Part 1: Sysprep and Hyper-V" href="http://blogs.msdn.com/mikekol/archive/2008/03/25/hyper-v-installation-tricks-part-1-sysprep-and-hyper-v.aspx" target="_blank">a known issue</a>. There are time-consuming work-arounds to fix some of the problems that this will cause, but they are best considered as a last resort.</p>
<h3>Colour management</h3>
<p>Colours are limited to 16-bit in Hyper-V guests. If a fuller spectrum is required, it should be possible to test in full colour in a browser on the host.</p>
<h3>Resolving host names from an internal domain</h3>
<p>During our pilot we identified that fully-qualified domain names resolved successfully but host names would not resolve without the full domain name. To satisfy this requirement we have added our internal DNS suffixes to the ICS Connection inside the development virtual machine.</p>
<h4>Manually adding DNS suffixes</h4>
<p>If a network adapter in a guest virtual machine loses these settings by deletion/re-creation of the adapter, or for some other reason, the setting can be re-entered as follows:</p>
<ul>
<li>Go to the IPv4 properties on the ICS Connection and select Advanced.</li>
<li>On the DNS tab select the <em>Append these DNS suffixes (in order)</em> radio button.
<ul>
<li>Add <em>internal.domainname.local</em> and <em>other.domainname.com.</em></li>
</ul>
</li>
<li>Un-tick the DNS registration box.</li>
<li>Select OK, OK and Close.</li>
<li>Make sure that this change is captured in all snapshots as necessary.</li>
</ul>
<h3>Internet Explorer (64-bit version)</h3>
<p>Adobe flash player does not currently support 64-bit browsers. You&#8217;ll have to use the 32-bit IE or another browser if you want to view flash files. We recommend using the 32-bit version by default.</p>
<h3>Hyper-V Manager UAC prompt work-around</h3>
<p>If the UAC prompt on Hyper-V Manager is annoying, try launching Server Manager and navigating to Hyper-V in the Roles node. This has the added benefit of exposing the Hyper-V event log messages and service states in that top Hyper-V node. These are not visible in Hyper-V Manager. Awareness of these messages and the service statuses will help to resolve Hyper-V issues faster.</p>
<h3>Test DVD burning</h3>
<p>In our pilot we identified that the DVD burner drivers don’t work <em>for burning</em> in Windows Server 2008 R2 on a Dell XPS M1330. This was also true on a Lenovo laptop. Chipset updates, driver updates and a Microsoft KB registry hack all failed to make a difference. The Matshita (Panasonic subsidiary) site does not support the products directly (they point to the laptop manufacturer). Dell and Lenovo had not released new drivers when we launched. As DVD burning has changed in Windows Server 2008 R2 this may have a wider impact.</p>
<h3>Bluetooth doesn’t work</h3>
<p>The Bluetooth stack is missing from Windows Server 2008 and Windows Server 2008 R2. In Windows Server 2008 there were fairly elaborate means of porting the stack from Vista, but results appear to be spotty at best.</p>
<h3>WorkItemTypeDeniedOrNotExistException when trying to open work items</h3>
<p>This error occurred in the first release of our guest build because I installed Visual Studio 2008 SP1 before the Team Foundation Client (TFC), so the TFC did not get upgraded. The fix is to un/re-install Visual Studio 2008 SP1, or to make sure that the TFC is installed before Visual Studio 2008 SP1.</p>
<h3>NUMA nodes and RAM allocation</h3>
<p>It is important to not exceed NUMA node limits when assigning RAM to virtual machines, although this will not apply to many laptops, as most will have an SMP architecture. It is beyond the scope of this post to go in to NUMA nodes in great detail (and in truth, my understanding of it does not reach beyond a few hours of research), but the limits in your environment should be understood so that performance does not suffer. As a starting point it&#8217;s worth confirming the type of CPU architecture and looking at this in more detail if it is NUMA. The <a href="http://technet.microsoft.com/en-us/library/dd277865.aspx">performance and capacity requirements for Hyper-V</a> document on TechNet explains this well:</p>
<blockquote><p><strong>Configure the correct amount of memory for Hyper-V guests.</strong> During the testing, no change had a greater impact on performance than modifying the amount of RAM allocated to an individual Hyper-V image. Because memory configuration is hardware-specific, you need to test and optimize memory configuration for the hardware you use for Hyper-V.</p>
<p>The initial goal of the testing was to make the Hyper-V image as similar as possible to the physical hardware image against which it was being compared. Based on that goal, the Hyper-V images were originally allocated 32 gigabytes (GB) of RAM, which was the same amount of RAM as was on the physical servers being tested. However, the initial test results showed that with that configuration, the Hyper-V images could sustain a load that was only about 70 percent of the load on the physical hardware. After investigating the Event Viewer on the Hyper-V host machine in the Windows Server 2008  <strong>Custom Views</strong>, <strong>Server Roles</strong>, <strong>Hyper-V Events</strong>, it was discovered that the RAM for the Hyper-V images was being spread across multiple non-uniform memory access NUMA nodes. This information confirmed that performance declined when memory was allocated across nodes. After trying different configurations it was determined that for the hardware being used, 8 GB of RAM was the maximum that could be allocated to a Hyper-V image without crossing NUMA nodes.</p></blockquote>
<p>To reiterate, this means that in Microsoft&#8217;s tests, Hyper-V performed <strong>significantly worse</strong> with 32GB allocated to a virtual machine than it did with an 8GB allocation. The exact size of the NUMA node boundary will vary by vendor, so make certain to gain an understanding of the number of nodes in your system. Divide the total RAM by the number of nodes in order to find the memory limits of a virtual machine. This does not mean that additional virtual machines can’t be run beyond a NUMA node boundary, if there is sufficient RAM available. The node boundary is the limit of optimal process performance. Beyond this limit, the virtual machine will suffer from degraded performance because it needs to use memory from an alocal address space.</p>
<p>However, <strong>NUMA isn&#8217;t the only thing to worry about</strong> when finding an optimal RAM allocation. Based on test results during our pilot we could push our virtual machines to up to 2250MB RAM, depending on the amount of activity in the host. In some cases it may be possible to get up to 2500MB RAM for a virtual machine on a 4GB RAM system, but this was not consistently achievable in our tests. If it’s necessary to achieve that, the virtual machines should be started up soon after booting and before any major client application activity is started on the host machine. Client application activity should be kept to a minimum when allocating this much RAM to virtual machines. We also found that host performance was often reduced to an intolerable level whenever there was less than 2GB RAM available to the host for an extended period of time. 1.75GB RAM may be achievable, but this should be tested extensively for your needs.</p>
<p>Additionally, saving a virtual machine&#8217;s state becomes risky when there is less than 2GB available to the host, as the machine will not resume from the saved state if there is insufficient resource available to it.</p>
<h3>Periodic but routine loss of connectivity on the host machine</h3>
<p>As I&#8217;ve been tracking here, we&#8217;ve documented repeat problems with periodic (but routine) loss of connectivity on the host machine. This is still an open issue. More info here:</p>
<p><a title="Routine loss of connectivity on a Hyper-V host’s external connection" href="http://tristanwatkins.com/?p=115" target="_self">Routine loss of connectivity on a Hyper-V host’s external connection</a><a title="More on routine loss of external network connectivity on Hyper-V hosts (not guests)" href="http://tristanwatkins.com/?p=492" target="_self"><br />
More on routine loss of external network connectivity on Hyper-V hosts (not guests)</a></p>
<h3>Hyper-V performance suffers during graphics-intensive operations</h3>
<p>This has been covered by <a title="Virtual PC Guy" href="http://blogs.msdn.com/Virtual_PC_Guy/" target="_blank">Ben Armstrong</a> in considerable detail and I&#8217;m continuing to track it:<br />
<a title="Hyper-V graphics performance and SharePoint 2010 development" href="http://tristanwatkins.com/?p=203" target="_self">Hyper-V graphics performance and SharePoint 2010 development</a><br />
<a title="Hyper-V graphics performance is on the way… if you need a new laptop" href="http://tristanwatkins.com/?p=247" target="_self">Hyper-V graphics performance is on the way… if you need a new laptop</a><br />
<a title="The definitive word on Hyper-V high-end graphics performance" href="http://tristanwatkins.com/?p=717" target="_self">The definitive word on Hyper-V high-end graphics performance</a></p>
<h3>Aero Glass</h3>
<p>Unfortunately, due to the graphics performance issues in Hyper-V mentioned above, there is a significant graphics performance hit when using Aero Glass. This does not slow down overall systems performance, but graphics-heavy operations will suffer in most Hyper-V environments. To this end, we do not recommend installing Aero Glass, but if you want to put it to the test feel free.</p>
<h4>How to enable Aero Glass</h4>
<ul>
<li>Make sure the Desktop Experience is activated
<ul>
<li>On the Dell XPS M1330, make sure BIOS A14 or later is installed
<ul>
<li>Confirm the latest NVIDIA drivers for Windows 7 x64 are installed</li>
<li>Turn on the Desktop Window Manager Session Manager service and switch to automatic start</li>
<li>Turn on the Themes service and switch to automatic start</li>
<li>Switch to an Aero theme</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>Sidebar</h3>
<p>It is also possible to add the Windows 7 Sidebar to the host dekstop. We haven&#8217;t tested this extensively enough to provide documentation on the best approach, but we have done it successfully. If there is sufficient interest in this technique I will add a follow-up post in future.</p>
<h3>Storage</h3>
<p>Be prepared for snapshots to increase the local storage requirements considerably. Some of our developers are legitimately struggling to work on three projects concurrently with 300GB local storage. One option we are considering is eSATA over PCMCIA as a means of increasing total spindle speed and storage but we have yet to begin testing this approach. We are specifically interested in eSATA since Hyper-V does not support system VHDs on USB. If we pursue this option I&#8217;ll post the results.</p>
<h2>Results</h2>
<h3>Putting things in perspective</h3>
<p>It&#8217;s worth repeating that we&#8217;re asking this system to do many things it was not intended to do. It is a server operating system with an enterprise virtualisation technology. The Microsoft virtualisation team will tell you that Hyper-V was not designed with developers in mind. <a title="Hyper-V versus Desktop Computing" href="http://blogs.msdn.com/virtual_pc_guy/archive/2009/08/21/hyper-v-versus-desktop-computing.aspx#9880925" target="_blank">To quote Ben Armstrong</a>:</p>
<blockquote><p>As is being discussed at length here &#8211; Hyper-V does not play well with high-end video cards (which are far more common on desktops than servers).  Hyper-V also disables sleep and hibernate, as well as increasing the power utilization of the computer.  All of these things would need to be addressed before we could even consider putting Hyper-V in a desktop product.</p></blockquote>
<p>In short, we bent this system to development needs because of the strength of the technology, despite these imperfections. There are fundamental compromises that can&#8217;t be avoided when using a server operating system as a mobile workstation but we believe that we can deliver SharePoint projects as a team better with this technology than without it.</p>
<h3>Hardware</h3>
<p>Whether laptops are the ultimate hardware solution is a different can of worms, which I&#8217;ve chosen to avoid in this series of posts. I&#8217;ve tailored the approach to laptops since that is what we have and the approach can be ported to workstations or shared virtual infrastructure.</p>
<h3>The developer experience and the bottom line</h3>
<p>There&#8217;s no question that using snapshots, import and export in Hyper-V adds a complex tier to the development experience and there will be a learning curve for those who are less familiar with virtualisation or don&#8217;t use the advanced features often. However, we have achieved an immediate and measurable gain in stability and environment consistency through the use of standard builds, snapshots and exported project-defined environments.</p>
<p>Conversely, it&#8217;s worth keeping in mind that as desirable as standardisation is, there are times when it hinders more than it helps and on those occasions a non-standard build may be more appropriate. Considering alternative builds is a much less cumbersome proposition with  the combination of WDS, Shrink Volume and Dual-booted systems or the new Native boot from VHD. The key consideration to keep in mind is that most other approaches will entail a sacrifice of what I lump together as the &#8220;management benefits&#8221; of Hyper-V (snapshot, import and export). For instance, you may consider allowing a team to develop on native operating systems for a project, but then a team member may lose a day if they need to rebuild their system, or the support team may need two days to build an environment in Hyper-V later on, or a team member may need to split her time with a team who use Hyper-V for their project, or the original project may fork. Memories of project difficulties gone-by come flooding back. While it&#8217;s always worth considering options, if you spend time identifying a standard approach for your business, it&#8217;s probably best to stick with it unless there&#8217;s a truly compelling reason not to.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/building-a-sharepoint-20072010-development-environment-part-vi-issues-and-results/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Building a SharePoint 2007/2010 development environment &#8211; Part V: Guest Build</title>
		<link>http://tristanwatkins.com/index.php/building-a-sharepoint-20072010-development-environment-part-v-guest-build/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=building-a-sharepoint-20072010-development-environment-part-v-guest-build</link>
		<comments>http://tristanwatkins.com/index.php/building-a-sharepoint-20072010-development-environment-part-v-guest-build/#comments</comments>
		<pubDate>Fri, 27 Nov 2009 01:15:51 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Consultancy and Design]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[BackConnectionHostName]]></category>
		<category><![CDATA[DCOM]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[DisableLoopbackCheck]]></category>
		<category><![CDATA[hive]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[ICS]]></category>
		<category><![CDATA[IIS WAMREG]]></category>
		<category><![CDATA[NTFS Junction Points]]></category>
		<category><![CDATA[NUMA]]></category>
		<category><![CDATA[oSearch]]></category>
		<category><![CDATA[SharePoint 2007]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[Snapshots]]></category>
		<category><![CDATA[SSP]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Windows Server 2008 R2]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=507</guid>
		<description><![CDATA[In the first four parts of this series I covered the project objectives and the system design, then turned my attention to the Hyper-V host image build and automated deployment. In this post I describe a SharePoint 2007 virtual machine build. Where’s the SharePoint 2010 build? In short, we&#8217;re working on it. I&#8217;ve produced a [...]]]></description>
			<content:encoded><![CDATA[<p>In the first four parts of this series I covered <a title="Building a SharePoint 2007/2010 development environment - Part I:  Introduction and Objectives" href="../?p=497" target="_self">the project objectives</a> and <a title="Building a SharePoint 2007/2010 development environment - Part II: Design" href="../?p=499" target="_self">the system design</a>, then turned my attention to the <a title="Building a SharePoint 2007/2010 development environment - Part III: Host image build and performance benchmarks" href="../?p=503" target="_self">Hyper-V host image build</a> and <a title="Building a SharePoint 2007/2010 development environment - Part IV: Automated deployment" href="http://tristanwatkins.com/?p=505" target="_self">automated deployment</a>. In this post I describe a SharePoint 2007 virtual machine build.</p>
<h2>Where’s the SharePoint 2010 build?</h2>
<p>In short, we&#8217;re working on it. I&#8217;ve produced a new SharePoint 2010 beta virtual machine for this environment but we&#8217;re not yet ready to publish build guidance. Stay tuned. Additionally&#8230;<span id="more-507"></span></p>
<h3>SharePoint 2010 memory requirements</h3>
<p>We have validated this environment for use with SharePoint 2010 virtual machines, but performance will be inadequate for development unless 4GB RAM can be dedicated to the SharePoint 2010 VM. It will run with 2GB but it will be too slow to do anything beyond lightweight demonstration. Also, be sure to check if your system has a NUMA CPU architecture. If it does, only allocate memory within NUMA node boundaries, as performance degrades when accessing memory from alocal nodes. See the<a title="Performance and capacity requirements for Hyper-V" href="http://technet.microsoft.com/en-us/library/dd277865.aspx#section2" target="_blank"> performance and capacity requirements for virtualising SharePoint</a> guidance for an introduction to the issue, but be aware  that NUMA architecture is less common in laptops so it may not be an issue.</p>
<h2>Virtual networking recap</h2>
<p>As explained in part two of this series, we have created  three virtual networks on the Hyper-V host, although this development virtual machine will only have two network adapters. The first will be &#8220;plugged in&#8221; to the <em>Hyper-V ICS Network</em>. The second is &#8220;plugged in&#8221; to the <em>Hyper-V Internal Network</em>. We plug the <em>Hyper-V External Network</em> in for testing purposes only. For more information about how I&#8217;ve designed these networks please refer to <a title="Building a SharePoint 2007/2010 development environment - Part II: Design" href="../?p=499" target="_self">the design post</a>.</p>
<h3>Working with virtual networks</h3>
<p>The guest virtual machine&#8217;s &#8220;ICS Network connection&#8221; will receive the host’s LAN or VPN connectivity (and an IP address via DHCP) from the host&#8217;s adapter on the <em>Hyper-V ICS Network. </em>The second adapter is “always on”, in that communication between the host and the guest will be completely separated from the host&#8217;s provision of ICS to the guest. This second adapter has a fixed IP address on a network that&#8217;s dedicated to providing communication between guest VMs and a resilient, permanent connection in the host. This enables:</p>
<ul>
<li>Persistent network sharing.</li>
<li>RDP connections to guest VMs.</li>
<li>HOSTS file entries and BackConnectionHostNames security.</li>
<li>Multiple IP addresses on static adapters in guests, for multiple sites with SSL, etc.</li>
</ul>
<p>Static IP address allocation on the ICS connection in the guest is not a supported configuration and results in instability.</p>
<h2>System Build</h2>
<h3>Installation</h3>
<p>Create a new virtual machine in the location of your choice. After the virtual machine has been created, modify these settings:</p>
<ul>
<li>Assign multiple processors to the virtual machine (for most laptops you will want to assign all of them).</li>
<li>Assign sufficient RAM, leaving at least 2GB RAM for the host machine (1.75GB bare minimum &#8211; host performance is too slow with only 1.5GB available).</li>
<li>Connect the Hyper-V ICS Internal Network to the first NIC.</li>
<li>Connect the Hyper-V Internal Network to the second NIC.</li>
<li>Point the DVD drive at an ISO file or installation media for Windows Server 2008.
<ul>
<li>It&#8217;s also possible to network-boot, following a similar approach to the host deployment from WDS. To network-boot a Hyper-V machine, add a legacy network adapter (it must be legacy) and modify the BIOS settings to boot from the network.</li>
<li>We could have installed Windows Server 2008 R2 as we did on the host, but at the time of our pilot it was still only in Release Candidate, so we opted to stick with a tested OS in order to compare the development experience with our current environments. I built our SharePoint 2010 Technical Preview and Beta environments on Windows Server 2008 R2 RTM without problem.</li>
</ul>
</li>
</ul>
<p>Turn on the virtual machine and install Windows Server 2008 Standard. On completion, log in for the first time, insert Hyper-V Integration Services from the Virtual Machine Connection&#8217;s Action menu and reboot when prompted.</p>
<h3>Initial configuration</h3>
<p>These steps establish basic connectivity and improve usability:</p>
<ul>
<li>Log in to the new virtual machine and enable remote desktop connections using any version (in order to support older versions of Royal TS). If all versions of Remote Desktop are current then select the secure option.</li>
<li>Test that the ICS connection is able to retrieve an IP address and that the connection is receiving connectivity from the host machine. If there are any problems connecting to the LAN or web, make sure that the connection is shared in the host and that the ICS connection in the guest is on DHCP. Also check the firewall settings. No settings should need to be modified but make updates if necessary.
<ul>
<li>Temporarily plug the Hyper-V External network in to this adapter for testing if needed. This is a good way of identifying if a problem relates to ICS itself or if it&#8217;s a guest firewall issue.</li>
</ul>
</li>
<li>Add DNS suffixes to the ICS connection if you want to be able to resolve host names on your LAN (without having to use the fully-qualified domain name). ICS will not pass through primary or connection specific DNS suffixes.
<ul>
<li>Go to the ICS Connection’s IPv4 properties.</li>
<li>Select Advanced.</li>
<li>On the DNS tab select the <em>Append these DNS suffixes (in order)</em> radio button.</li>
<li>Add domain suffixes for any named resources that should be resolved using host headers.</li>
</ul>
</li>
<li>Configure IP settings on the Internal Connection in the guest.
<ul>
<li>Configure IP addresses as 192.168.200.100.</li>
<li>Set the Subnet Mask as 255.255.255.0.</li>
<li>A default gateway and DNS settings are not necessary.</li>
</ul>
</li>
<li>Remove IPv6 from all connections in the host and guest. See <a title="Conflicting guidance on IPv6" href="http://tristanwatkins.com/?p=187" target="_self">earlier guidance</a> for more information.</li>
<li>Give all adapters sensible names.
<ul>
<li>I chose &#8220;ICS Connection&#8221; and &#8220;Internal Connection&#8221;.</li>
</ul>
</li>
<li>Test browsing to <strong>\\192.168.200.1</strong> to test connectivity over the Internal network.</li>
<li>Optionally, turn off IE Enhanced Security Configuration (ESC) for administrators.</li>
</ul>
<h3>Patching</h3>
<ul>
<li>Apply Windows Server 2008 SP2.
<ul>
<li>Reboot.</li>
</ul>
</li>
<li>Patch current.
<ul>
<li>Reboot if prompted and patch again if patches are available. Reboot again if needed and repeat until current.</li>
</ul>
</li>
</ul>
<h3>Shutdown and snapshot</h3>
<p>Shut down the virtual machine and take a snapshot. Rename the snapshot with an appropriate name, such as “Windows installation and patching complete”. You will be able to roll back to this state if you have problems with the Windows configuration.</p>
<h3>Adding Prerequisites</h3>
<h4>Adding Web Server (IIS) role</h4>
<p>Start up the virtual machine and add these Windows Role services:</p>
<ul>
<li>Web Server
<ul>
<li>Common HTTP Features
<ul>
<li>Static Content</li>
<li>Default Document</li>
<li>Directory Browsing</li>
<li>HTTP Errors</li>
<li>HTTP Redirection</li>
</ul>
</li>
<li>Application Development
<ul>
<li>ASP.NET</li>
<li>.NET Extensibility</li>
<li>ISAPI Extensions</li>
<li>ISAPI Filters</li>
</ul>
</li>
<li>Health and Diagnostics
<ul>
<li>Logging Tools</li>
</ul>
</li>
<li>Security
<ul>
<li>Basic Authentication</li>
<li>Windows Authentication</li>
<li>Request Filtering</li>
</ul>
</li>
<li>Performance
<ul>
<li>Static Content Compression</li>
<li>Dynamic Content Compression</li>
</ul>
</li>
</ul>
</li>
<li>Management Tools
<ul>
<li>IIS Management Console</li>
<li>IIS Management Scripts and Tools</li>
<li>Management Service</li>
</ul>
</li>
<li>Windows Process Activation Service
<ul>
<li>Process Model</li>
<li>.NET Environment</li>
<li>Configuration APIs</li>
</ul>
</li>
</ul>
<h4>Adding Features</h4>
<p>Add these Windows Features:</p>
<ul>
<li>Desktop Experience</li>
<li>Optional: Windows System Resource Manager (and Windows Internal Database)</li>
</ul>
<p>Installation of the Desktop Experience will prompt for reboot. It is not necessary to do so immediately. Note that when the reboot happens, Windows will restart a few times. This is a normal part of the Feature configuration.</p>
<h4>Additional preparation</h4>
<h5>HOSTS file entries</h5>
<p>Created the following HOSTS file entries for the web applications:</p>
<p style="padding-left: 30px">192.168.200.100                SSPAdmin</p>
<p style="padding-left: 30px">192.168.200.100                MySite</p>
<p style="padding-left: 30px">192.168.200.100                Portal</p>
<h5>DisableLoopbackCheck or BackConnectionHostNames updates</h5>
<p>Either disable the Loopback Check or add <a href="http://tristanwatkins.com/?p=293">BackConnectionHostNames</a> entries. Since ICS prevents inbound connectivity to these virtual machines we feel comfortable disabling the loopback check, as this would be a considerable annoyance to developers otherwise. For unisolated systems I would always recommend putting the <em>BackConnectionHostNames</em> entries in place. Spencer Harbar has summarised the <a title="Harbar.net" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.harbar.net');" href="http://www.harbar.net/archive/2009/07/02/disableloopbackcheck-amp-sharepoint-what-every-admin-and-developer-should-know.aspx" target="_blank"><span style="color: #0000ff">background information</span></a> best.</p>
<p>To disable the Loopback Check, add a new DWORD <em>DisableLoopbackCheck</em> value “1” to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa</p>
<h5>Creating the Source repository in the host and sharing to guests</h5>
<p>To understand these steps it is worth reviewing the <em>Local source code storage on the host machine</em> section of <a href="http://tristanwatkins.com/?p=499">the design post</a>.</p>
<ul>
<li>Create a new user account in the guest machine called <strong>SourceShare</strong>, with same password as the account that was created by the WAIK unattend file in <a href="http://tristanwatkins.com/?p=505">part four of this series</a>. This password should be strong, as the share will be visible to authenticated users on the host machine.</li>
<li>Confirm that the <em>CreateSourceShare.bat</em> script from part four has created a folder on the host system that is shared it to the SourceShare user with full control. Remove “Everyone” from the sharing permissions and replace with “Authenticated Users”.</li>
<li>In the guest virtual machine, map the Z drive to <a href="file://///192.168.200.1/Source">\\192.168.200.1\Source</a>, specifying the <strong>SourceShare</strong> account credentials and that it should be reconnected at login. Save the password.</li>
<li>Test the connection by opening the Z drive. If there are problems opening the drive, browse to <a href="file://192.168.200.1/Source">\\192.168.200.1\</a> and troubleshoot from there.</li>
<li>If users have trouble with the strength of the password, allow them to change it to something that they will remember, but make certain that it is changed in both the host and the guest and make sure they know that the change will need to be applied to all snapshot states and any other virtual machines that use this repository in the host.</li>
</ul>
<p>Note: if you would prefer to store source code in the virtual machine it is not necessary to follow these steps. The benefits of preserving code outside of the snapshot state need to be weighed up against the drawbacks of rolling back to a state when some of that code did not exist, and users of the system need to be aware of the implications of using either approach. Clearly this approach adds some complexity and any approach should be validated for your needs.</p>
<h5>Create local user accounts for services and application pool identities</h5>
<ul>
<li>SQL service accounts (which should be for obvious purposes):
<ul>
<li><strong>SQLSvc </strong></li>
<li><strong>SQLAgent </strong></li>
<li><strong>SQLAnalysis </strong></li>
<li><strong>SQLReporting </strong></li>
</ul>
</li>
<li>SharePoint service accounts and application pool identities:
<ul>
<li><strong>MossSetup</strong> (installation account)</li>
<li><strong>CentralAdmin</strong> (farm account)</li>
<li><strong>SSPAdmin</strong> (Shared Services Administration site application pool identity)</li>
<li><strong>MySite</strong> (MySite application pool identity)</li>
<li><strong>Portal</strong> (Portal application pool identity)</li>
<li><strong>SearchService</strong> (MOSS Search service account)</li>
<li><strong>SharedServices</strong> (the SSP web service identity)</li>
<li><strong>ContentAccess</strong> (the crawl account)</li>
</ul>
</li>
</ul>
<p>Assign the <strong>MossSetup</strong> account local administrative rights.</p>
<h5>Activate windows</h5>
<p>Add a valid Windows license and activate the system. Aside from obvious compliance issues, if this is not done you will see repeated 12321 <em>Security-Licensing-SLC</em> “Token-based Activation failed” warnings in the event logs.</p>
<h5>Shutdown and snapshot</h5>
<p>Shut down the virtual machine and take a snapshot. Rename the snapshot with an appropriate name, such as “Windows configuration complete”. You will be able to roll back to this state if you have problems with the SQL installation.</p>
<h2>SQL 2008 Setup</h2>
<h3>Installation</h3>
<p>Start up the virtual machine and run the SQL 2008 installer. Select all features.</p>
<ul>
<li>Give the instance a name or choose the default instance name according to preference.</li>
<li>Set up SQL services under these accounts:
<ul>
<li>SQLSvc</li>
<li>SQLAgent</li>
<li>SQLAnalysis</li>
<li>SQLReporting</li>
<li>Everything else can run as <em>Network Service.</em></li>
</ul>
</li>
<li>Disable Analysis, Reporting and Integration services. We do not run these services by default in order to optimise performance. However, we do install the services to speed up deployment as needed. Use as necessary in your environment.</li>
<li>Select Windows Authentication.</li>
<li>Select the local Administrator account as a Server Administrator.</li>
<li>Install Reporting Services in SharePoint integrated mode.</li>
</ul>
<p>After installation completes, launch the SQL Management Studio and assign the <strong>MossSetup</strong> account DBCreator and SecAdmin rights. It will not be necessary to assign other permissions directly in SQL, as the setup account will assign DBCreator/SecAdmin rights to the farm account.</p>
<h3>Patching</h3>
<p>Add the SQL Server 2008 Feature Pack and SQL Server 2008 SP1 and. Reboot as necessary and patch with the latest Cumulative Update.</p>
<h3>Shutdown and snapshot</h3>
<p>Shut down the virtual machine and take a snapshot. Rename the snapshot with an appropriate name, such as “SQL 2008 configuration complete”. You will be able to roll back to this state if you have problems with the MOSS installation.</p>
<h2>MOSS deployment</h2>
<h3>Installation and initial configuration</h3>
<p>Start up the virtual machine. Log in with the <strong>MossSetup</strong> account and follow these steps.</p>
<ul>
<li>Run the MOSS installer with (at least) SP1 slipstreamed. Select the <em>Complete</em> Server Type.</li>
<li>When the installer completes, un-tick the “Launch SharePoint Products and Technologies” wizard tick box.</li>
<li>Open a command window, running as Administrator and navigate to the BIN in the 12 Hive. Run <em>PSCONFIG –cmd configdb –create</em> to manually specify friendly names for the Central Admin databases and to assign the <strong>CentralAdmin</strong> farm account as the user. Specify both the Central Admin configuration and Content databases or they will receive an awful GUID for a name. Find <a href="http://technet.microsoft.com/en-us/library/cc263093.aspx">more information about PSCONFIG</a> on TechNet.</li>
<li>Launch the <em>SharePoint Products and Technologies Configuration</em> wizard from the start menu. Retain the connection to the newly-created farm databases and proceed through the configuration wizard according to your build requirements. I recommend that you specify a standard Central Administration port if you use one and authenticate using NTLM.</li>
<li>Once the wizard completes, launch Central Administration to confirm that the site is up and running.</li>
<li>There are tips and tricks that you may want to include for your developers, for instance <a href="http://www.andrewconnell.com/blog/archive/2006/08/21/3882.aspx">Andrew Connell’s suggestions</a> and an interesting use of junction points from <a href="http://sharenotes.wordpress.com/2008/05/02/rapid-access-to-12-hive-and-stsadmexe/">the Share Notes blog</a>.
<ul>
<li>Consider putting a desktop, task bar or start menu shortcut to the 12 hive.</li>
</ul>
<ul>
<li>Add an environment variable for the 12 hive’s BIN.
<ul>
<li>Go to the machine’s Advanced System Properties (right-click My Computer and select Properties).</li>
<li>Click the <em>Environment Variables</em> button.</li>
<li>In the System variables pane, scroll down to Path and select “Edit”.</li>
<li>Clicking in the Variable Value will put the cursor at the end of the line. Type a semi-colon.</li>
<li>Copy and paste the path to the 12 hive’s BIN, typically:</li>
<li> <em>C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\</em></li>
</ul>
</li>
</ul>
</li>
</ul>
<h4>Shutdown and snapshot</h4>
<p>Shut down the virtual machine and take a snapshot. Rename the snapshot with an appropriate name, such as “MOSS installation complete”. You will be able to roll back to this state if you have problems with the farm configuration.</p>
<h3>Farm build and configuration</h3>
<p>Start up the virtual machine and launch Central Administration from the Start menu or navigate to it in Internet Explorer.</p>
<ul>
<li>Enable Intranet Settings for the Central Admin site. This option should appear as a prompt directly beneath the tabs.</li>
<li>Grant Launch and Activation permission to the local WSS_WPG and WSS_ADMIN_WPG groups in the <strong>IIS WAMREG</strong> DCOM component. This prevents system error 10016. See <a href="http://support.microsoft.com/kb/920783">KB920783</a> for more information.
<ul>
<li>If necessary, do the same thing on the <strong>oSearch</strong> DCOM componet, per <a title="oSearch DCOM fix" href="http://support.microsoft.com/kb/953137" target="_self">KB953137</a>.</li>
</ul>
</li>
<li>Enable the MOSS Search service, running under the &lt;MACHINE NAME&gt;\SearchService account with “Reduced” performance, using all WFE servers.
<ul>
<li>If the account name is entered without the &lt;MACHINE NAME&gt; prefix, you will likely see this error:<br />
<span style="color: #808080;">“An unhandled exception occurred in the user interface.Exception Information: OSearch (SearchService)”.</span></li>
</ul>
</li>
<li>We have not configured any other central administration settings in order to provide the farm in the cleanest state possible. That said, perform any additional configuration here as needed, but be aware that many settings are not suitable for all projects.</li>
</ul>
<h3>Create the Shared Services Provider</h3>
<p>Configure the farm’s shared services as prompted by the left navigation. This will step through the creation of the SSP administration and MySite web applications and then the Shared Services web service itself.</p>
<ul>
<li>Create a new SSP administration web application when prompted.
<ul>
<li>Use the host name and load balanced URL that was set up above: <a href="http://SSPAdmin">http://SSPAdmin</a></li>
<li>Use the application pool identities as created above: <strong>SSPAdmin</strong></li>
<li>Select NTLM authentication, unless there is a reason not to.</li>
<li>Give the content database for the web application an appropriate name, such as <strong>WSS_CONTENT_SSPAdmin</strong>, according to internal naming conventions.</li>
</ul>
</li>
<li>Create a new MySites web application when prompted.
<ul>
<li>Use the host name and load balanced URL that was set up above: <a href="http://MySite">http://MySite</a></li>
<li>Use the application pool identities as created above: <strong>MySite</strong></li>
<li>Select NTLM authentication, unless there is a reason not to.</li>
<li>Give the content database for the web application an appropriate name, such as <strong>WSS_CONTENT_MySite</strong>, according to internal naming conventions.</li>
</ul>
</li>
<li>Proceed with the SSP configuration:
<ul>
<li>Use NTLM authentication.</li>
<li>Specify the <strong>SharedServices</strong> application pool identity.</li>
<li>Do not use SSL, as this traffic is not leaving the server.</li>
<li>Typically in a stand-alone devlopment environment it should be OK to use the default SSP database naming suggestions, but adhere to internal standards where they apply.</li>
</ul>
</li>
<li>Wait for the configuration wizard to complete. This can take some time.</li>
<li>Visit the SSP administration site to confirm that the web application has been successfully created.</li>
<li>In Central Administration, navigate to <em>Self-Service Site Management</em> and enabled Self-site creation for the MySite web application.</li>
<li>Visit the MySite link in Central Administration to confirm that the web application has been successfully created.</li>
<li>Log in to the SSP Administration site and take these steps:
<ul>
<li>Specify a default content access account: <strong>ContentAccess</strong></li>
<li>Grant full personalisation services rights to the local administration account.
<ul>
<li>This account can be used to grant rights to yet-to-be-created local users of the system once they receive this build, if desired.</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>Create the web portal</h3>
<p>In Central Administration create a new web application.</p>
<ul>
<li>Use the host name and load balanced URL that was set up above: <a href="http://Portal">http://Portal</a></li>
<li>Use the application pool identities as created above: <strong>Portal</strong></li>
<li>Select NTLM authentication, unless there is a reason not to.</li>
<li>Give the content database for the web application an appropriate name, such as <strong>WSS_CONTENT_Portal</strong>, according to internal naming conventions.</li>
<li>Create a root site collection using the collaboration portal template. Make the local administrator account and the Moss Setup accounts site collection administrators – to be changed by local users on receipt of the build.</li>
<li>Visit <a href="http://portal">http://portal</a> to confirm that the site collection has been successfully created.</li>
</ul>
<h4>Shutdown and snapshot</h4>
<p>Shut down the virtual machine and take a snapshot. Rename the snapshot with an appropriate name, such as “MOSS configuration complete”. You will be able to roll back to this state if you have problems with the patching.</p>
<h3>Patch current</h3>
<p>Start up the virtual machine and patch the environment to whatever state is needed. We typically recommend patching current. During the course of our pilot we used the April 2009 Cumulative Update. When we released the base virtual machine to our entire development team we launched with the June 2009 Cumulative Update. Once patched current, test that all sites are still working as expected.</p>
<p>Full patching guidance is available on the <a href="http://technet.microsoft.com/en-us/office/ee748587.aspx">Update Center for Microsoft Office, Office Servers, and Related Products</a> site.</p>
<h4>Shutdown and snapshot</h4>
<p>Shut down the virtual machine and take a snapshot. Rename the snapshot with an appropriate name, such as “June 2009 CU applied”. You will be able to roll back to this state if you have problems with developer tool installation.</p>
<h2>Tool installation and export</h2>
<h3>Developer Tool installation</h3>
<p>Start up the virtual machine and install the common development tools for your organisation. These are the standard tools used by our developers. There are also some licensed products that are installed for some users outside of the scope of the base build.</p>
<ul>
<li>Microsoft Office SharePoint Designer 2007 SP2</li>
<li>Microsoft Visual Studio Team System 2008 Developer Edition (we created a separate snapshot for users that need Visual Studio 2005 rather than running them concurrently)</li>
<li>Microsoft Visual Studio Team System 2008 Team Explorer</li>
<li>Microsoft Visual Studio Team System 2008 Team Foundation Server MSSCCI Provider</li>
<li>TFS Power Tools</li>
<li>Microsoft Visual Studio Team System 2008 Developer Edition SP1</li>
<li>Microsoft Visual SourceSafe</li>
<li>WSPBuilder Extensions 1.0.5</li>
<li>StyleCop</li>
<li>Fiddler2</li>
<li>Sandcastle</li>
<li>Sandcastle Help File Builder</li>
<li>HTML Tidy</li>
<li>PDF X-Change PDF Viewer</li>
<li>Firefox with Firebug</li>
<li>Safari</li>
<li>Chrome</li>
<li>Opera</li>
<li>SharePoint Manager 2007</li>
<li>Microsoft Silverlight</li>
<li>Adobe Flash for IE</li>
<li>Adobe Flash for Firefox, Safari and Opera</li>
<li>Microsoft Forefront Client</li>
<li><a href="http://www.toolheap.com/test-mail-server-tool/">Test Mail Server</a></li>
</ul>
<p>On completion of installation, defragment the disk and wait for completion.</p>
<h3>Shutdown and snapshot</h3>
<p>Shut down the virtual machine and take a snapshot. Rename the snapshot with an appropriate name, such as “Developer tools installed”. You will be able to roll back to this state if you have problems with the farm configuration.</p>
<h3>Snapshot branches</h3>
<p>If you will be using different versions of Visual Studio (or anything else) it’s worth creating distinct branches for each version. You could adopt an approach like this:</p>
<ul>
<li>Install all of the independent tools, shut down and take a snapshot, renamed to something like &#8220;Developer tools except VS installed&#8221;.</li>
<li>Install Visual Studio 2008 and patches. Defragment, shut down and take a snapshot, renaming to something like &#8220;Visual Studio 2008 installed and patched current&#8221;.</li>
<li>Apply the &#8220;Developer tools except VS installed&#8221; snapshot. Install Visual Studio 2005 and patches. Defragment, shut down and take a snapshot, renaming to something like &#8220;Visual Studio 2005 installed and patched current&#8221;.</li>
<li>The two Visual Studio snapshot are now siblings &#8211; children of the &#8220;Developer tools except VS installed&#8221; snapshot node. A third sibling could be created in this same manner for Visual Studio 2010 Beta 2 (for instance).</li>
</ul>
<p>We install Visual Studio last in the installation sequence in order to maintain consistency among these variants as deep in to the snapshot tree as possible. To give another example, I&#8217;ve just built a SharePoint 2010 Beta environment with Visual Studio 2010 Beta 2. In that environment there was only one instance of Visual Studio but two SharePoint branches &#8211; one for SharePoint Foundation and another for SharePoint Server 2010. In that tree I installed all developer tools and Visual Studio before installing either SharePoint edition. If you have similar branching needs, plan to install those items last and structure your snapshot trees accordingly.</p>
<h3>Export</h3>
<p>You may choose to export the entire virtual machine rather than the final snapshot, depending on how standard you want the final build to be. If a developer can role back to an earlier state then the standardisation of the build is at risk. In our case, we’ve exported the final snapshot (or each of the final sibling nodes in the snapshot tree, since some users use Visual Studio 2005). This state is vanilla enough that it can be used as a common starting point for a wide range of projects. It has even been used as a starting point for projects that extend beyond SharePoint to accessibility solutions, Commerce Server and BizTalk.</p>
<p>This is not to say that this build fits all sizes, but it does fit most of them while obtaining the benefits outlined in the first post in this series. Some of the limitations of this approach are discussed in the next part of this series.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/building-a-sharepoint-20072010-development-environment-part-v-guest-build/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Can a hardened server play a SharePoint 2010 Silverlight Media Web Part?</title>
		<link>http://tristanwatkins.com/index.php/can-a-hardened-server-play-a-sharepoint-2010-silverlight-media-web-part/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=can-a-hardened-server-play-a-sharepoint-2010-silverlight-media-web-part</link>
		<comments>http://tristanwatkins.com/index.php/can-a-hardened-server-play-a-sharepoint-2010-silverlight-media-web-part/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 00:47:24 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Client applications]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[desktop experience]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[media]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[web part]]></category>
		<category><![CDATA[Windows Server 2008 R2]]></category>
		<category><![CDATA[Windows Update]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=722</guid>
		<description><![CDATA[The answer, obviously enough, is that it can if it has Silverlight installed. Read on if you&#8217;re interested in how the web part will behave in its absence. Last week we built a Windows Server 2008 R2 Hyper-V host that we used for our SharePoint 2010 launch event at Microsoft London. We were practicing the [...]]]></description>
			<content:encoded><![CDATA[<p>The answer, obviously enough, is that it can if it has Silverlight installed. Read on if you&#8217;re interested in how the web part will behave in its absence.</p>
<p><span id="more-722"></span>Last week we built a Windows Server 2008 R2 Hyper-V host that we used for our SharePoint 2010 launch event at Microsoft London. We were practicing the demonstration from connected Windows 7 laptops but we also wanted to understand the limitations of presenting from the host itself, should something go wrong with the networking. For the most part this worked fine, but we ran in to problems when we tried to run the media web part. The dialogue box would pop up as normal, but there was no option to <em>Play</em>. If I clicked <em>View</em> I would be prompted to download the .WMV file. At this point I realised that this hardened server did not have the Desktop Experience enabled, so it didn&#8217;t have a default media player.</p>
<p>After installing the Desktop Experience and rebooting (note: this does a few reboots), the pop-up looked the same; the <em>Play</em> button was still missing. Now if I clicked <em>View</em> it would launch in Windows Media Player.</p>
<p>Eventually it occurred to me that the server might be missing Silverlight. We install it by default, so it took some time for me to catch on. I checked the installed updates and sure enough, it was missing. When I tried to run Windows Update it revealed that Silverlight was the only availably update. I tried to install it and I quickly got error 80244019. Searching for a solution suggested a few possible answers &#8211; mostly network/DNS-related. To expedite things I visited the Silverlight site and installed it manually. I believe the problem may have been DNS or proxy-related but since all other Windows updates installed fine it&#8217;s a bit of a mystery.</p>
<p>Installing Silverlight manually did the trick. The Play option returned in the pop-up and video played normally. Out of curiosity I removed the Desktop Experience and tested again. Everything continued to work normally. All of this is totally clear in retrospect, but with the new technology cocktail that is SharePoint 2010, Silverlight 3, IE8 and Windows Server 2008 R2, it&#8217;s easy enough to loose sight of the obvious.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/can-a-hardened-server-play-a-sharepoint-2010-silverlight-media-web-part/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>The definitive word on Hyper-V high-end graphics performance</title>
		<link>http://tristanwatkins.com/index.php/the-definitive-word-on-hyper-v-high-end-graphics-performance/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-definitive-word-on-hyper-v-high-end-graphics-performance</link>
		<comments>http://tristanwatkins.com/index.php/the-definitive-word-on-hyper-v-high-end-graphics-performance/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 19:47:37 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Dell]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[SLAT]]></category>
		<category><![CDATA[Windows Server 2008 R2]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=717</guid>
		<description><![CDATA[The Microsoft virtualisation team are certainly taking community engagement and transparency seriously these days. I&#8217;m happy to report that Ben Armstrong (Virtual PC Guy) has posted the definitive summary of Hyper-V high-end graphics performance issues. He was the first person to discover the issue and has produced most of the guidance on it since. Key [...]]]></description>
			<content:encoded><![CDATA[<div>
<div>The Microsoft virtualisation team are certainly taking community engagement and transparency seriously these days. I&#8217;m happy to report that Ben Armstrong (Virtual PC Guy) has posted <a href="http://blogs.msdn.com/virtual_pc_guy/archive/2009/11/16/understanding-high-end-video-performance-issues-with-hyper-v.aspx?CommentPosted=true#commentmessage">the  definitive summary of Hyper-V high-end graphics performance issues</a>. He was  the first person to discover the issue and has produced most of the guidance on  it since. Key things to note:</div>
<ul>
<li>It&#8217;s not an issue on processors with SLAT, but these are only just hitting  the market in laptops in the near future</li>
<li>It&#8217;s not an issue with the SVGA driver
<ul>
<li>I&#8217;ve asked if the SVGA driver might ever offer multi-monitor support. He&#8217;s looking in to it. This might be a great compromise until processors with SLAT become ubiquitous</li>
</ul>
</li>
<li>This same problem occurs in all native Hypervisors
<ul>
<li>Virtual PC and VMWare Workstation do not have the same problem but they are  Type 2 hypervisors and do not offer the same performance as Hyper-V</li>
</ul>
</li>
</ul>
<p>So&#8230; there&#8217;s still no conclusive solution but it&#8217;s good to have the full context of  the problem. For more background on why this matters for SharePoint see <a title="Hyper-V graphics performance is on the way… if you need a new laptop" href="http://tristanwatkins.com/?p=247" target="_self">my previous post</a> on the matter.</div>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/the-definitive-word-on-hyper-v-high-end-graphics-performance/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Building a SharePoint 2007/2010 development environment &#8211; Part IV: Automated deployment</title>
		<link>http://tristanwatkins.com/index.php/building-a-sharepoint-20072010-development-environment-part-iv-automated-deployment/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=building-a-sharepoint-20072010-development-environment-part-iv-automated-deployment</link>
		<comments>http://tristanwatkins.com/index.php/building-a-sharepoint-20072010-development-environment-part-iv-automated-deployment/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 06:30:27 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Consultancy and Design]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Deployment Imaging Servicing and Management]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[ICS]]></category>
		<category><![CDATA[PXE]]></category>
		<category><![CDATA[SharePoint 2007]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[SysPrep]]></category>
		<category><![CDATA[WAIK]]></category>
		<category><![CDATA[Windows Deployment Services]]></category>
		<category><![CDATA[Windows Server 2008 R2]]></category>
		<category><![CDATA[Windows System Image Manager]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=505</guid>
		<description><![CDATA[In the first three parts of this series I covered the project objectives and the system design, then turned my attention to the Hyper-V host image build. In this section I will look at automating deployment of that host operating system. This is lengthy, but there&#8217;s a lot to cover. Before I begin, I need [...]]]></description>
			<content:encoded><![CDATA[<p><script type="text/javascript"></script></p>
<p>In the first three parts of this series I covered <a title="Building a SharePoint 2007/2010 development environment - Part I:  Introduction and Objectives" href="../?p=497" target="_self">the project objectives</a> and <a title="Building a SharePoint 2007/2010 development environment - Part II: Design" href="../?p=499" target="_self">the system design</a>, then turned my attention to the <a title="Building a SharePoint 2007/2010 development environment - Part III: Host image build and performance benchmarks" href="http://tristanwatkins.com/?p=503" target="_self">Hyper-V host image build</a>. In this section I will look at automating deployment of that host operating system. This is lengthy, but there&#8217;s a lot to cover.</p>
<p><span id="more-505"></span>Before I begin, I need to reiterate a &#8220;gotcha&#8221; that I stumbled across during the pilot. If you&#8217;re thinking of testing this out by adding the Windows Deployment Services role to a machine that&#8217;s using Internet Connection Sharing (ICS), <a title="Windows Deployment Services trumps Internet Connection Sharing" href="http://tristanwatkins.com/?p=80" target="_self">think again</a>. They don&#8217;t play nicely together. Rather, you&#8217;ll be able to deploy the physical machines but any ICS recipient network adapters will be left without connectivity. If you only have one physical machine for testing, consider deploying WDS to a new virtual machine or adding the role within an existing virtual machine.</p>
<h2>Imaging</h2>
<p>To capture the host OS image we need Windows Deployment Services (WDS), which is a Server Role in Windows Server 2008 R2 (and Windows Server 2008, but we won&#8217;t be bothered with earlier incarnations of WDS, RIS or ADS). To specify configuration options during deployment we will attach an unattend file to the captured image. We&#8217;ll create it using the <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=60a07e71-0acb-453a-8035-d30ead27ef72">WAIK for Windows 7</a>, which includes <em>Windows System Image Manager </em>(Windows SIM).</p>
<h3>Preparation</h3>
<p>Before we begin, note that WDS needs to be deployed in an Active Directory domain (as a member or a DC) with DHCP and DNS.</p>
<ul>
<li>To install WDS, add the Server Role through the Role Summary pane in Server Manager
<ul>
<li>Once launched, configuration options can be selected for WDS, such as default naming patterns and default unattend files. You will not be able to commit any configuration changes unless they are made by a Domain Administrator. If this is a test environment and you are unable to get Domain Admin rights, WDS can still be used with a bit more of a hands-on approach (manually naming servers and joining to the domain, etc.). These configuration options are covered in more detail below</li>
</ul>
</li>
<li>To download the <em>Windows Automated Installation Kit</em> for Windows 7 (WAIK), visit microsoft.com and <a title="micrsoft.com" href="http://www.microsoft.com/downloads/details.aspx?familyid=696DD665-9F76-4177-A811-39C26D3B3B34&amp;displaylang=en" target="_blank">grab the latest version</a>
<ul>
<li>Mount the ISO file and install <span><em>Deployment Imaging Servicing and Management</em> (DISM), which includes the <em>Windows System Image Manager </em>(SIM)</span>
<ul>
<li><span>A good ISO mounting tool is <a title="Magic ISO Maker" href="http://www.magiciso.com/" target="_blank">Magic ISO Maker</a>. Daemon Tools jumped the shark<br />
</span></li>
</ul>
</li>
</ul>
</li>
<li><span>To use WAIK, you will need to have access to Windows Server 2008 R2 installation media</span>
<ul>
<li><span>If the server is a virtual machine, consider attaching ISO files of the installation media as optical drives on the IDE controllers in the virtual machine&#8217;s settings, as this may make things easier</span>
<ul>
<li><span>I have created two additional optical drives in my WDS virtual machine, with a Windows 7 ISO file mounted in one virtual optical drive and a Windows Server 2008 R2 ISO file mounted in the other. This allows me to maintain unattend files for both operating systems without having to mess about with real optical/removable media<br />
</span></li>
</ul>
</li>
</ul>
</li>
<li>Ensure that both the WDS machine and the soon-to-be-captured <a title="Building a SharePoint 2007/2010 development environment - Part III: Host image build and performance benchmarks" href="../?p=503" target="_self">Hyper-V host</a> are connected to the network</li>
<li>If testing WDS on a live network, be certain that there are no other PXE boot servers on the environment before adding the WDS role, as this may result in network installation chaos otherwise</li>
</ul>
<h3>Configure WDS</h3>
<p>This guidance covers <em>some</em> of the settings in WDS that are applicable to this use. I don&#8217;t touch on all of them. It should go without saying that WDS deployment should be considered in much greater detail than these summary steps and that administrators should familiarise themselves with WDS and WAIK before unleashing them. That said&#8230;</p>
<p>To configure WDS, log on to the server as a domain administrator and launch Server Manager. Expand the Windows Deployment Services node in &#8220;Roles&#8221;. Right-click the server that you want to configure and select &#8220;Properties&#8221;.</p>
<h4>PXE Response</h4>
<p>Choose how strictly you want to control deployment of images. If this is a test environment, configure the role for known and unknown devices. Ideally this configuration is a bit more considered for production. Note: this is distinct from the <em>PXE Boot Policy</em>, which governs the behaviour of the PXE boot process rather than restricting which devices can be booted in to WDS. Think of this as the device setting and <em>PXE Boot Policy</em> as the user setting.</p>
<h4>Client Naming Policy</h4>
<p>These settings control the auto-generated naming format. For instance, &#8220;Dev-%8Username-%02#&#8221;, breaks down as follows:</p>
<ul>
<li>“Dev-”</li>
<li>“%8” specifies an eight-character variable</li>
<li>“Username” is the variable, meaning that the first eight characters of the user&#8217;s name will be used in the computer name</li>
<li>“-” adds a hyphen</li>
<li>“%02#” specifies a two-character auto-incremented number at the end of the string</li>
</ul>
<h4>Computer Account Location</h4>
<p>Specify an OU where new instances of the image should be created.</p>
<h4>PXE Boot Policy</h4>
<p>Configure this setting to preference. It controls the behaviour of the PXE boot once it has been initiated (either from a one-time boot menu or BIOS boot order change). Once in the PXE boot a DHCP lease is acquired, followed by the behaviour defined here. PXE can either abort and continue with the next BIOS boot option, automatically proceed or prompt the user to press F12 to confirm PXE boot. Think of this as the user setting and <em>PXE Response</em> as the device setting. If unsure what to choose, prompting is probably the best option to choose.</p>
<h4>Default Boot Image and Default Unattend file</h4>
<p>To simplify things we attached an unattend file directly to the captured image, as spelled out in <a title="John Howard" href="http://blogs.technet.com/jhoward/archive/2008/06/30/deploying-windows-server-2008-with-slipstreamed-hyper-v-rtm-part-2.aspx" target="_blank">John Howard&#8217;s, slipstreamed Hyper-V</a> article. The unattend file doesn&#8217;t exist yet, as we haven&#8217;t delved into WAIK yet. For now it&#8217;s sufficient to know that these WDS configuration settings determine distinct boot images and default unattend files for different processor architectures. Since we&#8217;re attaching the unattend file to the image directly we don&#8217;t need to worry about providing values for these settings.</p>
<p>It&#8217;s worth reviewing the overlapping options in WAIK and WDS for these defaults settings, as it&#8217;s far from straight-forward. <a title="TechNet" href="http://technet.microsoft.com/en-us/library/cc771508%28WS.10%29.aspx#BKMK_12" target="_blank">TechNet covers this</a> beyond the scope of this article.</p>
<h4>Joining a Domain</h4>
<p>This setting allows for the newly deployed machines to be automatically joined to the domain.</p>
<h4>Network settings</h4>
<p>Specify DHCP, Multicast, Transfer Settings (throttling), domain discovery and the UDP port range. Default settings should suffice in a test environment. Approach these choices with care if this environment contains any valuable resources beyond these test machines.</p>
<h3>Prepare the Capture Image in WDS</h3>
<p>The Capture Image is a PXE-booted version of WinPE specifically designed for capturing custom install images. When PXE booting to capture an image, make sure to select this image rather than a boot image.</p>
<ul>
<li>Mount an ISO or insert install media for Windows Server 2008 R2
<ul>
<li>As mentioned above, it might be easiest to add the ISO as a DVD drive on the VM&#8217;s IDE Controller. This will also be useful for WAIK configuration later</li>
</ul>
</li>
<li>Add the Boot WIM to the Boot Images directory
<ul>
<li>Right-click Boot Images in WDS and select &#8220;Add Boot Image&#8221;</li>
<li>Make sure to select the right CPU architecture for the boot image
<ul>
<li>Note: if you forget to do this, you can capture an x64 OS with an x86 Capture Image, but it may be slower to do so. Also, an x64 Capture Image will not be bootable unless the machine has an x64 processor</li>
</ul>
</li>
</ul>
</li>
<li>Create a Capture Image from the Boot Image
<ul>
<li>Right-click the newly added boot image in WDS and select &#8220;Create Capture Image&#8221;</li>
<li>This will launch a wizard with a link to a help file if the wizard is unclear</li>
<li>This is necessary for creating a custom install image in WDS</li>
</ul>
</li>
</ul>
<h3>Generalise the host build</h3>
<p>We&#8217;re finally ready to get back to the host build. Note: if the host has been built as a virtual machine (as recommended at the top of part III of this series), take a snapshot of the virtual machine before running SysPrep so that the reseal count is not incremented for future updates to the build.</p>
<p>To generalise the host build, run <strong>sysprep /oobe /generalize /shutdown</strong>. This can also be done from the GUI by double-clicking sysprep.exe.</p>
<h3><a href="#_msocom_2"></a>Capture the install image</h3>
<p>Start the host machine and invoke the one-time boot menu (commonly F12).</p>
<ul>
<li>Select PXE, NIC or network boot (terminology varies)
<ul>
<li>Depending on the configuration of the Windows Deployment Services (WDS) server it may be necessary to press F12 again to confirm PXE boot
<ul>
<li>If this isn’t done, the machine will boot from hard disk and the machine will need to be SysPreped again</li>
</ul>
</li>
</ul>
</li>
<li>Select the Capture Image that was created above
<ul>
<li>Again, remember to select the correct processor architecture</li>
</ul>
</li>
<li>In the Windows Deployment Services Image Capture wizard, choose a location to save the new image
<ul>
<li>This location can be the same disk that&#8217;s being captured. I suggest creating a folder called <em>D:\Captured Image</em> so that the directory can be removed with the post-deployment script below
<ul>
<li>Note: the drive letter will not be &#8220;C:&#8221;, as that&#8217;s the WinPE Capture Image that we&#8217;re &#8220;in&#8221; at this point. The System disk will probably appear as &#8220;D:&#8221;</li>
</ul>
</li>
<li>Allow time for the image to be captured locally and then for it to be transfered to WDS</li>
</ul>
</li>
<li>In my experience, the captured image does not appear in WDS immediately. I&#8217;ve needed to re-launch Server Manager to view it and in some cases a reboot was necessary</li>
<li>If for some reason the network transfer of the image to WDS fails, it can be manually copied to the WDS server and added, but make sure to reboot the server as described above before taking this step or the images may be duplicated and this could get confusing</li>
</ul>
<h2>Creating the Unattend file</h2>
<p>Open the Windows System Image Manager from the Start &gt; All Programs &gt; Microsoft Windows AIK menu.</p>
<ul>
<li>In the Distribution Share pane, select or create a distribution share in the location of your choice. I created mine in D:\WAIK\DistributionShare</li>
<li>In the Windows Image pane, choose <em>Select Windows Image</em> and choose the Windows Server 2008 R2 \sources\install.wim file from install media. Select the Standard Full edition when prompted</li>
<li>Paste the XML below in to a text file and save it as <em>DevBuild.XML</em></li>
<li>In the Answer File pane, open <em>DevBuild.XML</em> below as a starting point for your selections</li>
</ul>
<p><span style="text-decoration: underline;">DevBuild.XML</span></p>
<pre style="padding-left: 30px;">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;unattend xmlns="urn:schemas-microsoft-com:unattend"&gt;
 &lt;servicing&gt;
 &lt;package action="configure"&gt;
 &lt;assemblyIdentity name="Microsoft-Windows-Foundation-Package" version="6.1.7600.16385" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="" /&gt;
 &lt;selection name="Microsoft-Hyper-V" state="true" /&gt;
 &lt;selection name="VmHostAgent" state="true" /&gt;
 &lt;selection name="Microsoft-Hyper-V-Management-Clients" state="true" /&gt;
 &lt;selection name="WirelessNetworking" state="true" /&gt;
 &lt;selection name="CoreFileServer" state="true" /&gt;
 &lt;selection name="SearchEngine-Server-Package" state="true" /&gt;
 &lt;/package&gt;
 &lt;/servicing&gt;
 &lt;settings pass="windowsPE"&gt;
 &lt;component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
 &lt;SetupUILanguage&gt;
 &lt;UILanguage&gt;en-GB&lt;/UILanguage&gt;
 &lt;/SetupUILanguage&gt;
 &lt;InputLocale&gt;en-GB&lt;/InputLocale&gt;
 &lt;SystemLocale&gt;en-GB&lt;/SystemLocale&gt;
 &lt;UILanguage&gt;en-GB&lt;/UILanguage&gt;
 &lt;UserLocale&gt;en-GB&lt;/UserLocale&gt;
 &lt;/component&gt;
 &lt;component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
 &lt;DiskConfiguration&gt;
 &lt;WillShowUI&gt;OnError&lt;/WillShowUI&gt;
 &lt;/DiskConfiguration&gt;
 &lt;Display&gt;
 &lt;ColorDepth&gt;32&lt;/ColorDepth&gt;
 &lt;HorizontalResolution&gt;1280&lt;/HorizontalResolution&gt;
 &lt;RefreshRate&gt;60&lt;/RefreshRate&gt;
 &lt;VerticalResolution&gt;800&lt;/VerticalResolution&gt;
 &lt;/Display&gt;
 &lt;ImageInstall&gt;
 &lt;OSImage&gt;
 &lt;InstallToAvailablePartition&gt;true&lt;/InstallToAvailablePartition&gt;
 &lt;WillShowUI&gt;OnError&lt;/WillShowUI&gt;
 &lt;/OSImage&gt;
 &lt;/ImageInstall&gt;
 &lt;UserData&gt;
 &lt;ProductKey&gt;
 &lt;WillShowUI&gt;OnError&lt;/WillShowUI&gt;
 <strong>&lt;Key&gt;XXXXX-XXXXX-XXXXX-XXXXX-XXXXX&lt;/Key&gt;</strong>
 &lt;/ProductKey&gt;
 &lt;/UserData&gt;
 &lt;/component&gt;
 &lt;/settings&gt;
 &lt;settings pass="specialize"&gt;
 &lt;component name="Microsoft-Windows-IE-ESC" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
 &lt;IEHardenAdmin&gt;false&lt;/IEHardenAdmin&gt;
 &lt;IEHardenUser&gt;true&lt;/IEHardenUser&gt;
 &lt;/component&gt;
 &lt;component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
 &lt;CompanyName&gt;Your Company&lt;/CompanyName&gt;
 &lt;DisableAccelerators&gt;false&lt;/DisableAccelerators&gt;
 &lt;Home_Page&gt;http://yourhomepage.com&lt;/Home_Page&gt;
 &lt;IEWelcomeMsg&gt;true&lt;/IEWelcomeMsg&gt;
 &lt;SuggestedSitesEnabled&gt;false&lt;/SuggestedSitesEnabled&gt;
 &lt;/component&gt;
 &lt;/settings&gt;
 &lt;settings pass="oobeSystem"&gt;
 &lt;component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
 &lt;Reseal&gt;
 &lt;ForceShutdownNow&gt;false&lt;/ForceShutdownNow&gt;
 &lt;/Reseal&gt;
 &lt;/component&gt;
 &lt;component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
 &lt;OOBE&gt;
 &lt;HideEULAPage&gt;true&lt;/HideEULAPage&gt;
 &lt;ProtectYourPC&gt;3&lt;/ProtectYourPC&gt;
 &lt;/OOBE&gt;
 &lt;StartPanelLinks&gt;
 &lt;Link0&gt;C:\Program Files (x86)\Mozilla Firefox\firefox.exe&lt;/Link0&gt;
 &lt;Link2&gt;C:\Program Files (x86)\Safari\Safari.exe&lt;/Link2&gt;
 &lt;Link1&gt;C:\Program Files (x86)\Opera 10 Beta\opera.exe&lt;/Link1&gt;
 &lt;/StartPanelLinks&gt;
 &lt;TaskbarLinks&gt;
 &lt;Link0&gt;%windir%\system32\notepad.exe&lt;/Link0&gt;
 &lt;Link1&gt;C:\Program Files (x86)\code4ward\Royal TS\&lt;/Link1&gt;
 &lt;Link2&gt;C:\Program Files (x86)\Internet Explorer\iexplore.exe&lt;/Link2&gt;
 &lt;/TaskbarLinks&gt;
 &lt;UserAccounts&gt;
 &lt;AdministratorPassword&gt;
 <strong>&lt;Value&gt;encrypted&lt;/Value&gt;</strong>
 &lt;PlainText&gt;false&lt;/PlainText&gt;
 &lt;/AdministratorPassword&gt;
 &lt;LocalAccounts&gt;
 &lt;LocalAccount wcm:action="add"&gt;
 &lt;Password&gt;
<strong> &lt;Value&gt;encrypted&lt;/Value&gt;</strong>
 &lt;PlainText&gt;false&lt;/PlainText&gt;
 &lt;/Password&gt;
 &lt;DisplayName&gt;SourceShare&lt;/DisplayName&gt;
 &lt;Name&gt;SourceShare&lt;/Name&gt;
 &lt;/LocalAccount&gt;
 &lt;/LocalAccounts&gt;
 &lt;/UserAccounts&gt;
 &lt;TimeZone&gt;GMT Standard Time&lt;/TimeZone&gt;
 &lt;/component&gt;
 &lt;/settings&gt;
 &lt;cpi:offlineImage cpi:source="wim:z:/sources/install.wim#Windows Server 2008 R2 SERVERSTANDARD" xmlns:cpi="urn:schemas-microsoft-com:cpi" /&gt;
&lt;/unattend&gt;</pre>
<p>Make changes to this file as needed for your environment and save the modified file. I highly recommend reviewing these selections for suitability in your environment. Some sections like the license key and passwords (bolded above) have been replaced with nonsense values. It&#8217;s also worth reviewing the options that I haven&#8217;t selected. The Windows SIM Help documentation is excellent and it should be a quick learning curve.</p>
<h3>Attach the Unattend file to the image in WDS</h3>
<p>In the WDS Install Images node, expand the relevant Image Group, find the captured image and right-click to select the Properties pop-up. At the bottom of the General tab there&#8217;s a tick box for allowing the image to install in unattended mode and a file selection button for picking the unattend file created above. This will apply the Unattend settings to our captured, sysprep&#8217;d image when it&#8217;s deployed.</p>
<h2>Create the Post-deployment PowerShell configuration script</h2>
<p>Before I begin this section, I have to disclaim that my scripting skills are fairly remedial. That said, these scripts have done the trick for us and have saved our support team a good deal of time reconfiguring environments manually.</p>
<p>These steps are necessary because only certain things can be specified in the System Image Manager. For instance, it is possible to configure network adapters and it is possible to add Hyper-V but it is not possible to add Hyper-V, create Hyper-V networks and then configure IP properties for the host&#8217;s new network adapters on those Hyper-V networks. To this end, the unattend file above specifies only the addition of the Hyper-V role and this script automates the next two steps. Additionally, this script will create the Source files share on the host machine (as discussed in part II of this series) and remove the local &#8220;Captured Image&#8221; directory that was created when WDS captured the image to the local drive.</p>
<ul>
<li>Create a folder called &#8220;Automate&#8221; or similar</li>
<li>Visit the <a title="CodePlex" href="http://pshyperv.codeplex.com/" target="_blank">PowerShell Management Library for Hyper-V</a> Codeplex page and download HyperV.zip
<ul>
<li>Run the installer. The script below needs to run from the same directory as <em>hyperv.format.ps1xml</em> and <em>hyperv.ps1</em></li>
</ul>
</li>
<li>In the &#8220;Automate&#8221; folder create a batch script called <em>CreateSourceShare.bat</em>, as follows:</li>
</ul>
<pre style="padding-left: 60px;">c:
MKDIR C:\Source
NET SHARE Source=C:\Source /GRANT:"Authenticated Users",FULL
ICACLS C:\Source /GRANT SourceShare:F
RMDIR "c:\Captured Image"</pre>
<ul>
<li>Create a PowerShell script called <em>HyperVNICAndShareScript.ps1</em> with these contents<em>:<br />
</em></li>
</ul>
<pre style="padding-left: 60px;">netsh interface set interface name="Local Area Connection" newname="Virtual Network Switch"
. .\hyperV.ps1
New-VMExternalSwitch "Hyper-V External Network" -ext "Broadcom"
Start-Sleep -s 5
New-VMInternalSwitch "Hyper-V Internal Network"
Start-Sleep -s 5
New-VMInternalSwitch "Hyper-V ICS Network"
Start-Sleep -s 5
netsh interface set interface name="Local Area Connection" newname="External Network Connection"
netsh interface set interface name="Local Area Connection 3" newname="Internal Network Connection"
netsh interface set interface name="Local Area Connection 4" newname="ICS Network Connection"
netsh interface ipv4 set address name="Internal Network Connection" source=static address=192.168.200.1 mask=255.255.255.0
C:\Automate\CreateSourceShare.bat</pre>
<h2>Deployment</h2>
<p>At long last we are ready to test deployment of the captured image to a target machine. Start the host machine and invoke the one-time boot menu (commonly F12).</p>
<ul>
<li>Select PXE, NIC or network boot (terminology varies)
<ul>
<li>Depending on the configuration of the Windows Deployment Services (WDS) server it may be necessary to press F12 again to confirm PXE boot</li>
</ul>
</li>
<li>Select the x64 boot image for Windows Server 2008 R2</li>
<li>The WinPE installation process will be nearly identical to installation from media &#8211; just make sure to select the captured image when prompted</li>
<li>Once the installation has completed, run PowerShell as Administrator and set the execution policy to allow remote-signed scripts. For more information <a title="TechNet" href="http://www.microsoft.com/technet/scriptcenter/topics/msh/cmdlets/set-executionpolicy.mspx" target="_blank">see Technet</a>:</li>
</ul>
<pre style="padding-left: 60px;">Set-ExecutionPolicy RemoteSigned</pre>
<ul>
<li>Press &#8220;Y&#8221; to accept the policy change</li>
<li>Run <em>HyperVNICAndShareScript.ps1</em></li>
<li>Confirm that settings match the values assigned in the scripts</li>
</ul>
<h2>Manual post-deployment configuration tasks</h2>
<h3>Various settings</h3>
<p>It&#8217;s possible that some of these settings can be automated, but we opted to configure them manually rather than spending time testing the automation of them. They will all be revisited in a later phase.</p>
<ul>
<li>Make sure that the BIOS has <em>Hardware Assisted Virtualisation</em> and <em>Data Execution Prevention</em> enabled</li>
<li>Turn on Write-caching and turn off Write-cache Buffer Flushing on the physical disk&#8217;s hardware  policy</li>
<li>Set Hyper-V default locations as desired. I have chosen:<br />
C:\Hyper-V\Virtual Hard Disks<br />
C:\Hyper-V\Virtual Machines</li>
<li>Disable IPv6 on the network adapters. SharePoint in Hyper-V guidance suggests this is a good idea, as <a title="Conflicting guidance on IPv6" href="http://tristanwatkins.com/?p=187" target="_self">I&#8217;ve commented on before</a></li>
<li>Set up Internet Connection Sharing from the host&#8217;s external network connection to the host&#8217;s ICS network connection. By default we share HTTP, HTTPS and RDP</li>
</ul>
<h3>Drivers</h3>
<p>We reduced our WDS/WAIK testing time by skipping driver installation automation. As a work-around we are capturing the host image with driver installer files included so that they can be quickly installed post-deployment. We will be introducing automated deployment in a future phase.</p>
<h3>Role-based Authorisation and local administration rights</h3>
<p>It may also be desirable or necessary to configure role-based authorisation for Hyper-V. John Howard has produced excellent guidance on the model in five parts. This is <a title="John Howard" href="http://blogs.technet.com/jhoward/archive/2009/10/09/Explaining-the-hyper-v-authorization-model-part-five.aspx" target="_blank">a link to the fifth</a>. If this is not a requirement then don&#8217;t forget to make the recipient of the build a local administrator, as this will be required if role-based authorisation is not configured.</p>
<h3>Import virtual machines</h3>
<p>As a part of a routine deployment the base virtual machine would be imported, booted up and tested before it&#8217;s handed over to the recipient, but since we&#8217;ve not built that machine yet, I&#8217;m skipping that step for now. The virtual machine build will follow in part five of this series.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/building-a-sharepoint-20072010-development-environment-part-iv-automated-deployment/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Building a SharePoint 2007/2010 development environment &#8211; Part III: Host image build and performance benchmarks</title>
		<link>http://tristanwatkins.com/index.php/building-a-sharepoint-20072010-development-environment-part-iii-host-image-build-and-performance-benchmarks/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=building-a-sharepoint-20072010-development-environment-part-iii-host-image-build-and-performance-benchmarks</link>
		<comments>http://tristanwatkins.com/index.php/building-a-sharepoint-20072010-development-environment-part-iii-host-image-build-and-performance-benchmarks/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 00:29:40 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Consultancy and Design]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Aero Glass]]></category>
		<category><![CDATA[Buffer flushing]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[SharePoint 2007]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[Windows Deployment Services]]></category>
		<category><![CDATA[Windows Server 2008 R2]]></category>
		<category><![CDATA[Write-caching]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=503</guid>
		<description><![CDATA[Having agreed the project objectives and designed the system, I turned my attention to the Hyper-V host image build. This is a high-level build guide with start-up time and baseline memory consumption benchmarks at key milestones. These benchmark figures were taken from the Windows Server 2008 R2 Release Candidate build and are admittedly a bit [...]]]></description>
			<content:encoded><![CDATA[<p><script type="text/javascript"></script></p>
<p>Having agreed <a title="Building a SharePoint 2007/2010 development environment - Part I:  Introduction and Objectives" href="http://tristanwatkins.com/?p=497" target="_self">the project objectives</a> and <a title="Building a SharePoint 2007/2010 development environment - Part II: Design" href="http://tristanwatkins.com/?p=499" target="_self">designed the system</a>, I turned my attention to the Hyper-V host image build. This is a high-level build guide with start-up time and baseline memory consumption benchmarks at key milestones. These benchmark figures were taken from the Windows Server 2008 R2 Release Candidate build and are admittedly a bit imprecise. However, they do provide an overall indication of system performance as things were added to and removed from the installation. Although I do not have precise figures on RTM improvements, I spot-checked a few of these benchmarks when I rebuilt the system on RTM. Start-up times improved slightly at each milestone. In fact, the final benchmarks came in at 100MB less idle memory used in the RTM release.<span id="more-503"></span></p>
<h2>Capturing a virtual image</h2>
<p>For the pilot and the benchmark figures listed below, the image was built on hardware and captured with Windows Deployment Services (WDS). Since then, we&#8217;ve rebuilt the system as a Hyper-V guest and we&#8217;re capturing the image by PXE booting the SysPrep&#8217;d virtual machine from a legacy network adapter. We take a snapshot before SysPrep as a rollback point for future updates to the image. Virtual PC Guy explains this approach in more detail in his <a title="Virtual PC Guy" onclick="javascript:pageTracker._trackPageview('/outbound/article/blogs.msdn.com');" href="http://blogs.msdn.com/virtual_pc_guy/archive/2009/08/25/geeking-out-with-windows-deployment-services.aspx" target="_blank">geeking out with WDS post</a> post, which I&#8217;ve linked here previously. I&#8217;ll also be discussing the Windows Server 2008 R2 WDS build and the new version of WAIK in more detail in the next post in this series.</p>
<h2>System specification</h2>
<p><span style="text-decoration: underline;">Dell XPS M1330</span></p>
<ul>
<li>Intel Core 2 Duo T8100 2.1 GHz</li>
<li>4.00 GB 667 MHz DDR2 SDRAM</li>
<li>7200 RPM 320GB SATA HDD</li>
<li>nVidia GeForce 8400M GS graphics card</li>
<li>Windows Server 2008 R2 Build 7100 (RC)</li>
</ul>
<h2>Host build</h2>
<h3>Initial OS optimisations</h3>
<p>I installed the system from a USB pen drive (I had to try this given how easy it is now). On first login I started optimising the system as follows:</p>
<ul>
<li>Write-caching is enabled in the physical hard disk hardware policy
<ul>
<li>Buffer flushing is turned off</li>
<li>We are comfortable with this risk since laptops run from battery or with battery backup at all times</li>
</ul>
</li>
<li>IPv6 is turned off on host network adapters per <a title="SharePoint Performance and Capacity recommendations for Hyper-V" onclick="javascript:pageTracker._trackPageview('/outbound/article/technet.microsoft.com');" href="http://technet.microsoft.com/en-us/library/dd277865.aspx" target="_blank">SharePoint&#8217;s Hyper-V performance and capacity guidance</a>
<ul>
<li>This is optional, and should not be turned off if you have IPv6 requirements</li>
</ul>
</li>
<li>IE Enhanced Security Configuration (ESC) is turned off for administrators
<ul>
<li>Again, depending on security requirements, this may not be acceptable</li>
</ul>
</li>
<li>The following services are disabled (all optional):
<ul>
<li>Certificate Propagation</li>
<li>Desktop Window Manager Session Manager
<ul>
<li>Leave this enabled if using Aero Glass</li>
<li>In our pilot experience, we identified that Aero Glass suffers from <a title="Hyper-V graphics performance" href="http://tristanwatkins.com/?p=247" target="_self">Hyper-V graphics performance degradation</a> enough that it worsens the overall experience</li>
</ul>
</li>
<li>IP Helper
<ul>
<li>Leave this enabled if using IPv6</li>
</ul>
</li>
<li>Remote Registry</li>
<li>Windows Remote Management (WS-Management)</li>
</ul>
</li>
</ul>
<p>For more information on Windows service hardening, see <a title="Black Viper" href="http://www.blackviper.com/" target="_blank">Black Viper&#8217;s site</a>. This list of services could possibly be extended, but at the time of testing service hardening information for the new operating system was harder to come by than it is presently. It should be noted that the Windows Server model of turning services on if needed means that a new system is already considerably harder than a new Windows 7 system.</p>
<p>Next I booted the system, logged in and let it rest for at least fifteen minutes to capture the idle memory benchmark.</p>
<h3>Benchmarks</h3>
<p><em>Memory benchmark</em>: as low as 525 MB idle.</p>
<p><em>Start up time to logon</em>: 37 seconds.</p>
<p><em>Time to desktop</em>: 52 seconds.</p>
<h3>BIOS settings</h3>
<p>I installed BIOS A15 (includes alleged performance improvements) and made the following BIOS modifications:</p>
<ul>
<li>NIC settings = <em>Enabled with PXE </em>(required for image capture)</li>
<li>HDD Acoustic Mode = <em>Performance</em></li>
<li>Virtualization = <em>Enabled</em></li>
<li>Internal Cellular = <em>Off</em></li>
<li>Wireless Switch = <em>Wi-Fi + BT</em></li>
</ul>
<p>Note: if you have internal cellular and use it, don&#8217;t turn it off in the BIOS and adjust the last setting accordingly. Also note, BIOS A14+ is required if exceeding 4GB RAM.</p>
<p>Next I booted the system, logged in and let it rest for at least fifteen minutes to capture the idle memory benchmark.</p>
<h4>Benchmarks</h4>
<p><em>Memory benchmark</em>: as low as 525 MB idle.</p>
<p><em>Start up time to logon</em>: 37 seconds.</p>
<p><em>Time to desktop</em>: 48 seconds.</p>
<h3>Adding drivers and features</h3>
<h4>Drivers</h4>
<ul>
<li>SigmaTel Audio driver</li>
<li>UPEK driver for TouchChip fingerprint Coprocessor (WBF advanced mode)</li>
<li>nVidia GeForce 8400M GS driver
<ul>
<li>Note: on one occasion this driver install forced a reboot despite requesting that it be postponed &#8211; be careful</li>
</ul>
</li>
<li>Intel and Ricoh chipset drivers (Intel may not be necessary)</li>
<li>There is still one device without a driver:
<ul>
<li>BCM2045 (Bluetooth)</li>
<li>This is because Windows Server 2008+ does not have the Bluetooth stack</li>
</ul>
</li>
</ul>
<h4>Features</h4>
<ul>
<li>Enabled the desktop experience and WLAN featurs
<ul>
<li>Requires .NET Framework 3.5 and Ink and Handwriting support</li>
</ul>
</li>
</ul>
<p>Next I rebooted the system to complete the driver installations. On reboot, I set the Windows Audio service to Automatic and started it up. I tested Audio and the wireless network adapter.</p>
<h4>Install Windows Search</h4>
<p>I chose not to index any drives. This is primarily installed so that Outlook Search can be turned on with little hassle if desired</p>
<h4>Other OS modifications</h4>
<p>Disabled Shutdown Event Tracker, as developers seem to hate it and it isn&#8217;t really necessary on a laptop</p>
<p>Following these changes I rebooted, logged in again and let the system rest for an extended period so that I could capture the next idle memory benchmark.</p>
<h4>Benchmarks</h4>
<p><em>Memory benchmark</em>: as low as 622 MB idle.</p>
<p><em>Start up time to logon</em>: 50 seconds. <em> </em></p>
<p><em>Time to desktop</em>: 1 minute  12 seconds.</p>
<h3>Installing Microsoft Office client tools</h3>
<ul>
<li>Office 2007 (defaults, including InfoPath and OneNote)</li>
<li>Visio 2007</li>
<li>Office Communicator 2007 R2</li>
<li>Patched current</li>
</ul>
<h4>Benchmark with Office turned off and Communicator closed</h4>
<p><em>Memory benchmark</em>: as low as 708 MB idle when first launched, idling at closer to 760 MB after a couple of minutes. Proper benchmarks after lengthy idle were not captured here unfortunately. The next set are more useful/reliable.</p>
<p><em>Start up time to logon</em>: 56 seconds.</p>
<p><em>Time to desktop</em>: 1 minute 18 seconds.</p>
<h3>Installing other client software</h3>
<p>I installed the latest versions of all majors browsers, JRE 6, PDF X-Change Reader, Royal TS, browser plugins like Flash/Silverlight and browser debugging tools like Fiddler and Firebug. Some users of the build have specific license requirements that are accommodated manually after the system is deployed.</p>
<h4>Benchmarks</h4>
<p><em>Memory benchmark</em>: as low as 740 MB idle.</p>
<p><em>Start up time to logon</em>: 56 seconds.</p>
<p><em>Time to desktop</em>: 1 minute 20 seconds.</p>
<h2>Summary</h2>
<p>That&#8217;s it! We met our stated goal to keep the build as lightweight and uncluttered as possible in order to improve performance and reduce the support burden of laptop rebuilds. This system is not much more than a hypervisor, office client applications, web debugging tools and browsers. Keep in mind that I have been building an image that will be captured by WDS. A number of settings will be applied with an unattend file and some additional configuration will be taken care of by script, or manually post-deployment.</p>
<p>Acute observers will note that I haven&#8217;t actually added the Hyper-V role. That&#8217;s because Hyper-V doesn&#8217;t get along well with SysPrep. We account for that with WAIK and scripting, as revealed in more detail in my next post.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/building-a-sharepoint-20072010-development-environment-part-iii-host-image-build-and-performance-benchmarks/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Building a SharePoint 2007/2010 development environment &#8211; Part II: Design</title>
		<link>http://tristanwatkins.com/index.php/building-a-sharepoint-20072010-development-environment-part-ii-design/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=building-a-sharepoint-20072010-development-environment-part-ii-design</link>
		<comments>http://tristanwatkins.com/index.php/building-a-sharepoint-20072010-development-environment-part-ii-design/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 01:42:56 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Consultancy and Design]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Code Group]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[ICS]]></category>
		<category><![CDATA[NTFS Junction Points]]></category>
		<category><![CDATA[SharePoint 2007]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[Snapshots]]></category>
		<category><![CDATA[TFS]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[VMWare]]></category>
		<category><![CDATA[Windows Server 2008 R2]]></category>
		<category><![CDATA[Workgroup]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=499</guid>
		<description><![CDATA[In the first part of this series, I introduced the pros and cons of various SharePoint development approaches and the objectives of this system redesign. In this part I will focus on design choices and conclusions, starting with the core technology. Why we’ve chosen Hyper-V There are broadly five decisive factors: performance, management features (like [...]]]></description>
			<content:encoded><![CDATA[<p>In <a title="Building a SharePoint 2007/2010 development environment - Part I:  Introduction and Objectives" href="http://tristanwatkins.com/?p=497" target="_self">the first part of this series</a>, I introduced the pros and cons of various SharePoint development approaches and the objectives of this system redesign. In this part I will focus on design choices and conclusions, starting with the core technology.</p>
<h2>Why we’ve chosen Hyper-V</h2>
<p>There are broadly five decisive factors: performance, management features (like snapshots), cost, 64-bit OS support and a full host OS (not just a virtualisation administration console):<span id="more-499"></span></p>
<ul>
<li>Hyper-V is now in its second iteration and has proved to be one of the best-performing virtualisation technologies on the market. With laptops we need to take advantage of every performance gain that we can find.</li>
<li>Perhaps most importantly, and most often overlooked, Hyper-V is free if you&#8217;re already running Windows Server 2008 or Windows Server 2008 R2as a client OS
<ul>
<li>While I work for a Microsoft Gold Partner and Hyper-V is a key part of Microsoft’s future strategy (full disclosure), I believe that most SharePoint developers will have at least an MSDN subscription and a license for a Windows Server operating system, so I believe this is compelling for most SharePoint development environments</li>
</ul>
</li>
<li>Hyper-V is one of the few virtualisation technologies that supports 64-bit guest operating systems and within that narrow range of choices, it is one of the few that allows a user to log on to a host machine and control virtual machines within it concurrently
<ul>
<li>For instance, VMware ESXi is also a high-performance Type-1 hypervisor that supports 64-bit operating systems, but there is no host machine other than a virtualisation administration console
<ul>
<li>It also has associated costs (support, management tools, etc) that we would prefer to avoid</li>
</ul>
</li>
<li>With Windows Server 2008 R2 and Hyper-V, developers can use client tools within a familiar operating system while accessing virtual development environments at the same time
<ul>
<li>This is also true of VMware Workstation, but it&#8217;s a Type-2 hypervisor and will have relatively poor performance</li>
</ul>
</li>
<li>We need to have 64-bit OS support for Windows Server 2008 R2 and SharePoint 2010 &#8211; both of which do not have 32-bit flavors</li>
</ul>
</li>
</ul>
<h2>Our approach</h2>
<h3>Workgroup development</h3>
<p>By building our virtual machines in a Workgroup, we no longer need to worry about SharePoint installation/(re)configuration difficulties, as we will import the same identical virtual machine on everyone’s Hyper-V host. This would not be possible if the virtual machine was a member of a centralised domain because the domain controller would receive chatter from many identical machines and everything would quickly start to unravel</p>
<p>Alternately, we could run <em>Active Directory Domain Services </em>within a virtual machine, but this has a performance overhead that is best avoided unless it is absolutely necessary. Additionally, developing on a domain controller is not ideal</p>
<p>While developing in a Workgroup presents challenges for profile imports, these are far from insurmountable when LDAP directories like AD LDS or SQL users can substitute in many scenarios. The only evident need is a scenario where <em>Active Directory Domain Services</em> (more than just user accounts) are required, and that&#8217;s certainly not going to be true of enough projects that it should form a part of the base build. To this end, as requirements for Domain Services are identified we will provide new builds, as they are likely to be very project-specific</p>
<h3>Networking</h3>
<h4>Internet Connection Sharing network</h4>
<p>In order to isolate identical virtual machines from each other and from network resources, I&#8217;ve created a Hyper-V internal network dedicated to receiving Internet Connection Sharing (ICS) from one of the host&#8217;s active network connections. This is an internal network like any other Hyper-V internal network &#8211; it just so happens that the host&#8217;s adapter on this network will be receiving ICS from another of the host&#8217;s connected adapters. Any connection can share to the ICS network &#8211; even if Hyper-V doesn&#8217;t natively support external networks of that type. Depending on the need, we will share to this ICS network from:</p>
<ul>
<li>Hyper-V host external connections (by default)</li>
<li>Wireless</li>
<li>Mobile broadband</li>
<li>VPN</li>
</ul>
<p>ICS also introduces a layer of NAT between the guests and the physical network, preventing inbound connections to guests over these networks. This is desirable as it is how we achieve physical network isolation, and is the reason why we&#8217;ve chosen ICS over Bridging. In the ICS Settings we enable outbound RDP, HTTP and HTTPS connections over ICS by default, although it may be useful to enable other common outbound network protocols like FTP and SMTP. Outbound connectivity from our guest virtual machines is primarily used for connecting to TFS over HTTPS.</p>
<h4>Internal network</h4>
<p>We have also created a Hyper-V Internal network to support &#8220;always on&#8221; communication between the host machine and the guest virtual machines. Guest virtual machines can also communicate with each other over this network.</p>
<p>We cannot rely solely on the ICS connection. Guest virtual machine IP addresses on the ICS network will change because they receive them via DHCP from the host&#8217;s ICS connection. This is just how ICS works. The host&#8217;s ICS adapter becomes a gateway on 192.168.137.1. Any Hyper-V guests on that network pick up DHCP from the host and are automatically assigned an address on the 192.168.137.xxx (255.255.255.0) IP range.</p>
<p>As we rely on HOSTS file entries for RDP connections from host to guest and for browsing to guest SharePoint sites from the host, we need fixed, reliable IP routing and name resolution, so we use this second network for that purpose. The hosts and guests have both been built with fixed IP addresses on this range.</p>
<p>Because this is a Hyper-V internal network, there is no risk of network collisions on these IP ranges (which are identical for all users). Internal traffic never leaves the machine.</p>
<h3>Project builds</h3>
<p>By providing self-contained environments, our technical leads and/or architects can now customise the base builds to create project-specific virtual machines that can be exported to all members of a team, reducing system/configuration inconsistencies. In practice, the build lead/architect will export the final snapshot of the project environment, which all team members will use as a starting point for project development. As the project progresses, updated builds can be released in this same manner.</p>
<h3>Clean hosts</h3>
<p>Host machines will be cleaned of development tools and data, allowing quick provisioning. Development tools will not need to be reconfigured, as they will reside in virtual machines that can be exported/imported to any host. Guest base build virtual machines will be provided with as much SharePoint configuration as possible in order to make them light on reconfiguration, disposable and re-deployable.</p>
<h3>Project resumption</h3>
<p>Project-specific exports will reduce the need for storage of multiple virtual machines &#8211; as much as possible. We will retain one virtual machine export in public storage per-project. This will reduce the amount of time involved with resurrecting environments after project completion.</p>
<h3>Optimisation</h3>
<p>Host machines are built on Windows Server 2008 R2, optimised as much as possible and reduced to the lightest weight achievable. The build will broadly include:</p>
<ul>
<li>Hyper-V R2</li>
<li>Microsoft Office applications</li>
<li>All browsers</li>
<li>No development tools (these will all live in guest machines)
<ul>
<li>The only exception to this is the Team Foundation Client which TFS administrators manually install. We have not been able to pick domain users from within a Workgroup environment</li>
</ul>
</li>
</ul>
<h3>Content provisioning</h3>
<p>By deploying a single project-specific virtual machine, we can bake content in to the project build, ensuring consistency and reducing the overhead associated with re-deploying content.</p>
<h3>Improved testing and reduced volatility through the use of snapshots</h3>
<p>By using snapshots we are able to test code and configuration changes without volatility. The benefits of this technology include:</p>
<ul>
<li>Capturing restore points at milestones in a server build</li>
<li>Capturing a stable state before attempting volatile configuration changes</li>
<li>Capturing a stable state before testing code changes</li>
<li>Creating an initial restore point after importing a virtual machine and re-configuring network adapters (when required) and making other preferential settings
<ul>
<li>This saves re-importing and reconfiguring network adapters if a machine needs to be rolled back to its initial state</li>
</ul>
</li>
<li>Exporting a virtual machine to capture a problem when trouble occurs
<ul>
<li>An exact instance of a problem can be captured and shipped out for support, without having to re-create the problem in a distinct environment. This will only apply tot self-contained environments, however</li>
</ul>
</li>
</ul>
<h3>Local source code storage on the host machine</h3>
<p>Before our pilot started we identified that storing the local copies of source code within changing snapshot states could create problems. At the same time, we found it desirable to put the development tools inside our virtual machines in order to get around remote SharePoint development difficulties and to keep the host build uncluttered. To resolve this conflict, we adopted this approach:</p>
<ul>
<li>Created a share on the host machine and granted ownership of that directory to a new user account that is used solely for this purpose</li>
<li>Created a new user account with the same name and password in the guest virtual machine</li>
<li>Mapped a drive from the guest to the host&#8217;s new share, using the internal network&#8217;s IP address and these new credentials</li>
<li>Launched Visual Studio and downloaded project source code, pointing to the newly mapped drive as the location for the local source</li>
<li>Created a new Code Group for the mapped drive to enable trust for code execution</li>
</ul>
<p>These steps are covered in more detail in the build guides that will follow in later posts. This is just an outline of the approach to extracting the local code from the snapshot state, which should be adaptable to other development systems with snapshots. For instance, we&#8217;ve found it necessary to download code to a unique location within this directory for each each user, as TFS tracks the network locations that code is checked out to. This is easy to get around, as each user just specifies a unique directory name. If this were insufficient for project requirements, this TFS behaviour could possibly be &#8220;fooled&#8221; by using NTFS junction points. We&#8217;ve not seen a need for this yet, but we&#8217;re confident that with this additional option we should be able to store local source code in this manner, and this has been validated by our project experience with Hyper-V to-date.</p>
<h3>Summary</h3>
<p>These are the high-level design choices that emerged early in the consultancy and research, which have remained largely unchanged to-date. These choices represent one design that has been validated for our needs, which has some shortcomings like any approach. Some of these issues will be covered in the final post in this series.</p>
<p>The information in this post has not covered implementation in any detail, but do not fret. In the next section I will cover the step-by-step build guide for the Hyper-V host laptop.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/building-a-sharepoint-20072010-development-environment-part-ii-design/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Building a SharePoint 2007/2010 development environment &#8211; Part I:  Introduction and Objectives</title>
		<link>http://tristanwatkins.com/index.php/building-a-sharepoint-20072010-development-environment-part-i-introduction-and-objectives/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=building-a-sharepoint-20072010-development-environment-part-i-introduction-and-objectives</link>
		<comments>http://tristanwatkins.com/index.php/building-a-sharepoint-20072010-development-environment-part-i-introduction-and-objectives/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 13:42:46 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Consultancy and Design]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[SharePoint 2007]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[Virtual PC]]></category>
		<category><![CDATA[Windows Server 2008 R2]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=497</guid>
		<description><![CDATA[As I&#8217;ve alluded to a few times in this blog, over the last few months I&#8217;ve led the consultancy and system design for a SharePoint 2007/2010 development environment built on Hyper-V in Windows Server 2008 R2. This series of six posts will reveal the key decisions and will consolidate recommendations from a broad range of [...]]]></description>
			<content:encoded><![CDATA[<p>As I&#8217;ve alluded to a few times in this blog, over the last few months I&#8217;ve led the consultancy and system design for a SharePoint 2007/2010 development environment built on Hyper-V in Windows Server 2008 R2. This series of six posts will reveal the key decisions and will consolidate recommendations from a broad range of research and guidance. This first post offers a technology-agnostic introduction to the problem, pros and cons of alternative approaches and what we hoped to achieve with the new approach. The design decisions will be covered in more detail in <a title="Building a SharePoint 2007/2010 development environment - Part II: Design" href="http://tristanwatkins.com/?p=499" target="_self">the second post</a>, followed by a deeper look at detailed build guidance.<span id="more-497"></span></p>
<h2>Historical development approaches</h2>
<p>We have used a variety of development approaches in the past, which have all had limitations and were often an obstacle to productivity. They included:</p>
<h3>Shared development farms</h3>
<p>Shared farms are appealing at face value because they put development resource hunger on beefier infrastructure. However, there are considerable drawbacks to this approach, including:</p>
<ul>
<li>The infrastructure burden of these environments is immense</li>
<li>Due to limited physical resources, these servers housed multiple projects in a single farm, leading to hive pollution and a less reliable/predictable development environment</li>
<li>When multiple developers would use the same farm, this would amplify resource contention on already strained servers and it made managing application-level change much more difficult</li>
</ul>
<h3>Local development</h3>
<p>Developing SharePoint directly on a Windows Server 2008 laptop introduced a need for frequent laptop rebuilds, as the SharePoint customisations for one project rarely carry over to another and the hive gets polluted. This adds a hefty support burden and frequent down-time for developers.</p>
<h3>Virtualised development using Virtual PC</h3>
<p>Virtual PC is a friendly technology for SharePoint developers to use, as it does not over-complicate virtualisation, but the management functionality (such as snapshots and snapshot export) is inflexible and performance is poor when compared to a Type-1 hypervisor.</p>
<h3>Third-party virtualisation technologies</h3>
<p>Most third-party technologies have associated license costs for businesses and many do not support virtualisation of 64-bit guest operating systems. This is problematic because:</p>
<ul>
<li>Windows Server 2008 R2 is only available in 64-bit</li>
<li>SharePoint 2010 is only available in 64-bit</li>
</ul>
<p>Additionally, many developers have strong preferences for third-party virtualisation vendors and if this is not controlled/standardised it can introduce incompatibility issues.</p>
<h3>Why none of these approaches were satisfactory</h3>
<p>In short, these environments did not offer good enough performance or management flexibility and we needed a standardised approach for business continuity. We also needed a technology that would support 64-bit systems.</p>
<h2>SharePoint development complications</h2>
<p>SharePoint development in teams has always been tricky, as SharePoint virtual machines cannot be easily cloned and renamed. This means that SharePoint environments require:</p>
<ul>
<li>Scripted installation, which is great for standard builds, but not terribly easy to reconfigure for project-specific requirements, or&#8230;</li>
<li>Manual installation, which is time-consuming and not always aligned with a developer’s skill set, or&#8230;</li>
<li>Shared environments, which suffer from the drawbacks outlined above, or&#8230;</li>
<li>Network isolation of the cloned machine so that that nothing on the network will ever be aware that there are clones</li>
</ul>
<p>These are some of the biggest issues that need to be confronted when designing a SharePoint development environment. This list is by no means exhaustive; in the final post in this series I&#8217;ll be reviewing some of the issues that we&#8217;ve encountered during a pilot and subsequent roll-out to all of our developers, consultants and architects.</p>
<h2>Distilled objectives</h2>
<p>After a thorough review of development approaches, difficulties and available technologies, a Windows Server 2008 R2 (RC) with Hyper-V pilot was announced, soliciting senior developer/architect participation, stating the following aims:</p>
<ul>
<li>Improve performance over Virtual PC by adoption of a new core virtualisation technology</li>
<li>All available performance guidance for hardware, Windows, IIS, SQL and SharePoint would be considered for inclusion in the build</li>
<li>Hyper-V R2 was adopted early for the pilot (at Release Candidate) to take advantage of further performance gains in the new version</li>
<li>Project cost effectiveness would be improved by:
<ul>
<li>Removing development tools and SharePoint from the host machine, reducing the amount of reconfiguration on laptop rebuild and reducing rebuild requests</li>
<li>Providing a suite of pre-configured virtual environments, reducing setup time at project commencement</li>
<li>Making project-configured environments reusable within teams throughout the life of the project with Hyper-V’s snapshot technology</li>
<li>Eliminating the infrastructure burden of shared development farms and re-provisioning those resources to better purpose</li>
</ul>
</li>
<li>Improve the testing process by introducing snapshots</li>
</ul>
<p>In conjunction with the pilot we upgraded physical disk speed and capacity from 160GB 5400 RPM drives to 300GB 7200 RPM, as Hyper-V snapshots chew up lots of space, and the added spindle speed is critical to improving performance.</p>
<p>Defining these objectives, limiting the duration of the pilot and testing the new approach were critical to gaining management support for the project. In advance of pilot deployment I trained all pilot participants on Hyper-V and introduced our approach to networking and source code storage, which would not be obvious otherwise.</p>
<p>In the next section I will cover the design decisions that were reached through consultancy with the business, pilot findings and research.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/building-a-sharepoint-20072010-development-environment-part-i-introduction-and-objectives/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>More on routine loss of external network connectivity on Hyper-V hosts (not guests)</title>
		<link>http://tristanwatkins.com/index.php/more-on-routine-loss-of-external-network-connectivity-on-hyper-v-hosts-not-guests/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=more-on-routine-loss-of-external-network-connectivity-on-hyper-v-hosts-not-guests</link>
		<comments>http://tristanwatkins.com/index.php/more-on-routine-loss-of-external-network-connectivity-on-hyper-v-hosts-not-guests/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 23:13:19 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[connectivity]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[ICS]]></category>
		<category><![CDATA[MAC]]></category>
		<category><![CDATA[MVSMP]]></category>
		<category><![CDATA[Windows Deployment Services]]></category>
		<category><![CDATA[Windows Server 2008 R2]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=492</guid>
		<description><![CDATA[Further to my post from a few months ago on the this topic (dating back to the RC build), I&#8217;ve seen this same problem a few more times on the RTM build of Windows Server 2008 R2. My suggested approach still fixes the problem and it doesn&#8217;t recur, but I&#8217;ve still not been able to [...]]]></description>
			<content:encoded><![CDATA[<p>Further to <a title="Routine loss of connectivity on a Hyper-V host’s external connection" href="http://tristanwatkins.com/?p=115" target="_blank">my post from a few months ago on the this topic</a> (dating back to the RC build), I&#8217;ve seen this same problem a few more times on the RTM build of Windows Server 2008 R2. My suggested approach still fixes the problem and it doesn&#8217;t recur, but I&#8217;ve still not been able to pin down a cause and I can find no documentation on host machine MAC assignments anywhere. <span id="more-492"></span>Search engines results are entirely focused on MAC pool duplication, which should be a completely distinct issue since the MAC address in question falls outside of Hyper-V&#8217;s MAC pool.</p>
<p>To help pin this down, I will add that this Hyper-V host machine has been deployed from a WDS image, but I initially discounted that as an issue because the Hyper-V role is not part of the image; it is added during the deployment as specified in an unattended installation file and the Hyper-v networks are created by script post-deployment. Since the Hyper-V host&#8217;s MAC address is distinct from the physical adapter&#8217;s address, I&#8217;ve been assuming that there must be an algorithm that generates the host&#8217;s virtual MAC address uniquely, but given that this problem seems to manifest itself soon after installation I&#8217;m leaving this possibility on the table.</p>
<p>I&#8217;ve noticed a fair amount of traffic for this topic. If you&#8217;re having the same problem and this suggestion fixes it, I&#8217;d be grateful to know if the Hyper-V system was deployed from an image, as that might help to narrow the troubleshooting effort.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/more-on-routine-loss-of-external-network-connectivity-on-hyper-v-hosts-not-guests/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

