<?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; NUMA Archive</title>
	<atom:link href="http://tristanwatkins.com/index.php/tag/numa/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>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>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>Summary of Mark Russinovich&#8217;s Inside Windows 7 Redux</title>
		<link>http://tristanwatkins.com/index.php/mark-russinovichs-inside-windows-7-redux/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mark-russinovichs-inside-windows-7-redux</link>
		<comments>http://tristanwatkins.com/index.php/mark-russinovichs-inside-windows-7-redux/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 01:55:44 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Channel 9]]></category>
		<category><![CDATA[DFSS]]></category>
		<category><![CDATA[Memory Manager]]></category>
		<category><![CDATA[MiniCore]]></category>
		<category><![CDATA[MinWin]]></category>
		<category><![CDATA[NUMA]]></category>
		<category><![CDATA[ProcDump]]></category>
		<category><![CDATA[Process reflection]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[Windows Server 2008 R2]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=514</guid>
		<description><![CDATA[This Channel 9 &#8220;going deep&#8221; interview with Mark Russinovich dives very deep in to kernel changes in Windows 7 and Windows Server 2008 R2. I&#8217;ll do my best to summarise. It&#8217;s excellent stuff, illuminating: MinWin Lots of server core&#8217;s first incarnation was only there to satisfy DLL dependencies even though many of those DLLs were [...]]]></description>
			<content:encoded><![CDATA[<p>This <a title="Inside Windows 7 Redux" href="http://channel9.msdn.com/shows/Going+Deep/Mark-Russinovich-Inside-Windows-7-Redux/" target="_blank">Channel 9 &#8220;going deep&#8221; interview</a> with <a title="Mark Russinovich" href="http://channel9.msdn.com/shows/Going+Deep/Mark-Russinovich-Inside-Windows-7-Redux/" target="_blank">Mark Russinovich</a> dives very deep in to kernel changes in Windows 7 and Windows Server 2008 R2. I&#8217;ll do my best to summarise. It&#8217;s excellent stuff, illuminating:</p>
<ul>
<li><a title="MinWin" href="http://en.wikipedia.org/wiki/MinWin" target="_blank">MinWin<span id="more-514"></span></a>
<ul>
<li>Lots of server core&#8217;s first incarnation was only there to satisfy DLL dependencies even though many of those DLLs were not used</li>
<li>To get to MinWin they had to:
<ul>
<li>Monitor DLL dependencies and reverse-engineer the dependency map</li>
<li>Disentangle all of the unnecessary dependencies</li>
</ul>
</li>
<li>What was left was the smallest Windows instance that could be booted. It would not be functional as an operating system for building products on top of it, but the core functionality of the system could be booted and tested</li>
<li>The refactoring of DLLs to disentangle unnecessary dependencies has yielded performance benefits</li>
<li>Additionally, boot is parallelised more in Windows 7, also improving boot time</li>
</ul>
</li>
<li><a title="Wikipedia" href="http://en.wikipedia.org/wiki/Non-Uniform_Memory_Access" target="_blank">NUMA</a> node changes and <a title="MSDN" href="http://msdn.microsoft.com/en-us/library/dd834198.aspx" target="_blank">Multiple Processor Group</a> mappings
<ul>
<li>He demonstrates on a 256 logical core, 1 terrabyte Windows server</li>
<li>The new grouping functionality is what allows Windows to scale beyond 64 CPUs, across four processor groupings of up to 64 processors each
<ul>
<li>Because this system has 256 cores it needs to use all four groups
<ul>
<li>Typically groups are limited to as few as possible</li>
</ul>
</li>
<li>On this system there are 16 NUMA nodes and there are 16 CPUs per-NUMA node,
<ul>
<li>The nodes straddle the four groups</li>
<li>Each node of 16 CPUs will have &#8220;local&#8221; memory of 64GB
<ul>
<li>These CPUs can access memory from other nodes but there is an associated performance hit</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>Process reflection
<ul>
<li>Allows capture of a process&#8217;s memory dump without having to shut it down, stall the process or write memory to disk</li>
<li>Reflection temporarily freezes a process and captures a mini-dump
<ul>
<li>Creates a cloned child process that gets captured</li>
<li>The child process is not executable</li>
<li>It&#8217;s possible to capture a dump in response to system events like CPU spikes, if this is specified in advance with procdump /r (a process-reflected dump)</li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li>Distributed Fair Share Scheduling (DFSS)
<ul>
<li>Allows throttling of users in Remote Desktop Services
<ul>
<li>&#8220;Gives users a budget&#8221;</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>He also covers some of the <em>potential</em> things to come in &#8220;Windows 8&#8243; such as MiniCore (GPU-as-CPU) support.</p>
<p>The Channel 9 interviewer really wants to get past the standard Microsoft line and there&#8217;s very little that&#8217;s not on the table for discussion. Similarities to Unix are discussed. He finishes talking about his first experiences with Apple II ROMs. One for OS geeks.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/mark-russinovichs-inside-windows-7-redux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

