<?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>Andrew Morgan &#187; Windows</title>
	<atom:link href="http://andrewmorgan.ie/category/windows/feed/" rel="self" type="application/rss+xml" />
	<link>http://andrewmorgan.ie</link>
	<description>Grumpy ramblings</description>
	<lastBuildDate>Fri, 30 Jun 2017 09:24:25 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.0</generator>
	<item>
		<title>Altaro VM Backup Review</title>
		<link>http://andrewmorgan.ie/2015/10/altaro-vm-backup/</link>
		<comments>http://andrewmorgan.ie/2015/10/altaro-vm-backup/#comments</comments>
		<pubDate>Fri, 09 Oct 2015 09:36:31 +0000</pubDate>
		<dc:creator><![CDATA[andyjmorgan]]></dc:creator>
				<category><![CDATA[Enterprise Backups]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Altaro VM Backup]]></category>
		<category><![CDATA[Backup]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[vSphere]]></category>

		<guid isPermaLink="false">http://andrewmorgan.ie/?p=3543</guid>
		<description><![CDATA[Well you may be asking yourself what an EUC focused guy is doing reviewing a backup product, I&#8217;ll be honest, I wasn’t sure either but then something happened and I suddenly grew a strong appreciation for this product… but more on that later. As one who still remembers (and has the scars) from those dreaded tape restore days to off site locations. I remember spending 72 hours + trying to restore machines to different hardware, struggle with different tape drive [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://andrewmorgan.ie/wp-content/uploads/2015/10/logo.png"><img class="alignright wp-image-3544 size-full" src="http://andrewmorgan.ie/wp-content/uploads/2015/10/logo.png" alt="logo" width="275" height="42" /></a>Well you may be asking yourself what an EUC focused guy is doing reviewing a backup product, I&#8217;ll be honest, I wasn’t sure either but then something happened and I suddenly grew a strong appreciation for this product… but more on that later.</p>
<p>As one who still remembers (and has the scars) from those dreaded tape restore days to off site locations. I remember spending 72 hours + trying to restore machines to different hardware, struggle with different tape drive manufacturers and trying to find the right tape!  I jumped ship from sys admin long ago and moved to EUC, avoiding the backup market like the plague in later years so I really was a fresh set of eyes to this age old conundrum.</p>
<p>Recently I stumbled across Altaro VM backup as part of my usual day to day readings and my interest was piqued. Withstanding that as a home lab owner and a hypervisor snob I really only run vSphere and Hyper-V was normally not something I enjoyed working with… I got talking to a nice gentleman from Altaro and I was invited to join the closed beta for vSphere.</p>
<p><span id="more-3543"></span></p>
<p>For those unfamiliar, <a href="http://www.altaro.com/">Altaro</a> recently released Altaro VM backup v6 with added support for vSphere. With this release and support for my beloved vSphere, I spun up an instance of Altaro, ditched the manual and decided to &#8220;have a go&#8221; to see if I could do it.</p>
<p><strong>Installation:</strong></p>
<p>The installation was a no brainer, I simply <a href="http://www.altaro.com/vm-backup/">downloaded the software</a>, ran the installation and opened the console. It was quick enough to not go for a coffee, which is good or bad depending on your mood at that time of the day.</p>
<p><strong>Using the console:</strong></p>
<p><a href="http://andrewmorgan.ie/wp-content/uploads/2015/10/console.png"><img class="aligncenter size-large wp-image-3548" src="http://andrewmorgan.ie/wp-content/uploads/2015/10/console-1024x344.png" alt="console" width="625" height="209" /></a></p>
<p style="text-align: center;"><em>(dashboard overview)</em></p>
<p>The Console reminds me a lot of Nutanix Prism for it&#8217;s simplicity and pleasing design. It&#8217;s completely wizard driven and in 6-7 steps From plugging in my hypervisors (vSphere, stand alone ESXi hosts or Hyper-V), to setting a backup location (local disk, removable disk, Nas, network share, etc.), to configuring a schedule took just minutes.</p>
<p>The console also has a great feature where you can manage multiple connections from a single console without feeling like you’re losing functionality.</p>
<p><strong>Using the product:</strong></p>
<p style="text-align: center;"> <a href="http://andrewmorgan.ie/wp-content/uploads/2015/10/seed.jpg"><img class="aligncenter size-full wp-image-3546" src="http://andrewmorgan.ie/wp-content/uploads/2015/10/seed.jpg" alt="seed" width="525" height="300" /></a><em>(Seed to disk example)</em></p>
<p>Altaro have made this dead simple. You have two storage types of choice and you can use multiple repositories for each type. Offsite and Onsite. As mine was just a lab, onsite made sense, but the ability to ship stuff offsite when required sounds like a great option. When bandwidth is limited to offsite, you can even “seed to disk” as depicted above and move it manually off site to save precious bandwidth. Super clever technology!</p>
<p>As this is VM based, I expected some hang ups on restoring VM contents. But Altaro have included a number of granular restores such as file and mailbox restores directly in the console. Nice touch. Altaro VM backup can also leverage VSS for “Application consistent” backups, this I was not expecting from a VM backup product and is very clever for when you need to leverage Microsoft VSS technologies.</p>
<p><a href="http://andrewmorgan.ie/wp-content/uploads/2015/10/Granular.png"><img class="aligncenter size-large wp-image-3549" src="http://andrewmorgan.ie/wp-content/uploads/2015/10/Granular-1024x333.png" alt="Granular" width="625" height="203" /></a></p>
<p style="text-align: center;"><em>(Granular file restore wizard)</em></p>
<p>Once configured, I decided to test a VM backup, a granular file restore and a VM restore. Restorations are very flexible, choosing the target host, network connectivity and restored device name. Wonderful approach and thought behind this process, it did what I wanted it to do in seconds. Happy with my progress I added a few virtual machines, set the backup schedule and wandered off back to whatever I was doing before and left it alone for a few weeks.</p>
<p><strong><img class="alignright size-full wp-image-3550" src="http://andrewmorgan.ie/wp-content/uploads/2015/10/in-console-support.png" alt="in console support" width="133" height="158" />Support when you need it:</strong></p>
<p>&nbsp;</p>
<p>Until one faithful day last weekend my Citrix XenDesktop delivery infrastructure went kaboom.  I was performing my XenDesktop 7.6 upgrades to feature pack 3 (as you do when you&#8217;ve a home lab and like that kind of thing) and my storefront infrastructure decided not to uninstall or install. It decide to break and I couldn’t fix it. With the built in verification process in the product, I could quickly check that the backups were “OK” but something else was amiss….</p>
<p>I&#8217;ll be honest, as a developer and consultant, I use my lab every day, for tinkering, testing, Microsoft Visio and other such activities. Not having my lab on Monday morning was not an option I wished to think about. In my mild panic I remembered I had meant to review a backup product, I wondered if it was still working?</p>
<p>To my joy, it was working! It had taken a backup of the environment just last night and I set about performing a restore, but I had an issue.</p>
<p>Those rage inducing days in the datacenter were back, I had a backup? but I couldn’t restore!</p>
<p>But this is where Altaro saved the day for me. Inside of their console there&#8217;s a live help button! Within minutes I was connected to a support agent and my restore was running happily (it was my fault, consequently).</p>
<p><strong>In review:<img class="alignright" src="http://a.fastcompany.net/multisite_files/fastcompany/imagecache/inline-large/inline/2013/11/3021307-inline-fb-thumbsup-printpackaging.jpg" alt="" width="97" height="75" /></strong></p>
<p>It took me less than 10 minutes to start my first backup. It ran in the background for a month backing up my stuff with no issues and saved me from a very nasty bug in Citrix storefront allowing me to restore my VM&#8217;s in minutes (saving me hours of work rebuilding my site).</p>
<p>You can grab a free copy here: <a href="http://www.altaro.com/vm-backup/download.php">http://www.altaro.com/vm-backup/download.php</a> for up to 2 VM’s and a functionality matrix is available here too: <a href="http://www.altaro.com/vm-backup/pricing.php">http://www.altaro.com/vm-backup/pricing.php</a>.</p>
<p>Having reviewed the features and prices of Altaro, this is definitely a product to keep in the back of your mind for environments suitable. It&#8217;s great software backed by great people with a strong focus on simplicity and killer functionality.</p>
]]></content:encoded>
			<wfw:commentRss>http://andrewmorgan.ie/2015/10/altaro-vm-backup/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ThinIO facts and figures, Part 4: Storage design and dangerous assumptions.   </title>
		<link>http://andrewmorgan.ie/2014/10/thinio-facts-and-figures-part-4-storage-design-and-dangerous-assumptions/</link>
		<comments>http://andrewmorgan.ie/2014/10/thinio-facts-and-figures-part-4-storage-design-and-dangerous-assumptions/#comments</comments>
		<pubDate>Thu, 30 Oct 2014 20:53:13 +0000</pubDate>
		<dc:creator><![CDATA[andyjmorgan]]></dc:creator>
				<category><![CDATA[Remote Desktop Services (RDS)]]></category>
		<category><![CDATA[Server Based Computing]]></category>
		<category><![CDATA[ThinIO]]></category>
		<category><![CDATA[ThinScale]]></category>
		<category><![CDATA[VDI in a Box]]></category>
		<category><![CDATA[Virtual Desktop Infrastructure]]></category>
		<category><![CDATA[VMware View]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[XenApp]]></category>
		<category><![CDATA[XenDesktop]]></category>
		<category><![CDATA[End User Computing]]></category>
		<category><![CDATA[IOPS]]></category>
		<category><![CDATA[SBC]]></category>
		<category><![CDATA[VDI]]></category>
		<category><![CDATA[VMware Horizon]]></category>
		<category><![CDATA[xenapp]]></category>

		<guid isPermaLink="false">http://andrewmorgan.ie/?p=3222</guid>
		<description><![CDATA[Welcome back to this blog series discussing our new product ThinIO. Please find the below three earlier articles in this series: ThinIO facts and figures, Part 1: VDI and Ram caching. ThinIO facts and figures, Part 2: The Bootstorm chestnut. ThinIO facts and figures, Part 3: RDS and Ram caching. In the final blog post in this series, we’re going to discuss storage design and a frequent problem face when sizing storage. Lets get right into it: “Designing for average, [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><img class="alignright" src="http://andrewmorgan.ie/wp-content/uploads/2014/04/logo.png" alt="" width="216" height="41" />Welcome back to this blog series discussing our new product ThinIO. Please find the below three earlier articles in this series:</p>
<ul>
<li><a href="http://andrewmorgan.ie/2014/10/thinio-facts-and-figures-part-1-vdi-and-ram-caching/">ThinIO facts and figures, Part 1: VDI and Ram caching.</a></li>
<li><a href="http://andrewmorgan.ie/2014/10/thinio-facts-and-figures-part-2-the-bootstorm-chestnut/">ThinIO facts and figures, Part 2: The Bootstorm chestnut.</a></li>
<li><a href="http://andrewmorgan.ie/2014/10/thinio-facts-and-figures-part-3-rds-and-ram-caching/">ThinIO facts and figures, Part 3: RDS and Ram caching.</a></li>
</ul>
<p>In the final blog post in this series, we’re going to discuss storage design and a frequent problem face when sizing storage. Lets get right into it:</p>
<p><span id="more-3222"></span></p>
<h3><strong>“Designing for average, is designing for failure”</strong></h3>
<p><a href="http://andrewmorgan.ie/wp-content/uploads/2014/10/image0011.png"><img class="aligncenter size-large wp-image-3223" src="http://andrewmorgan.ie/wp-content/uploads/2014/10/image0011-1024x626.png" alt="image001" width="625" height="382" /></a></p>
<p style="text-align: center;"><em>Peak IOPS:1015, Average IOPS: 78</em></p>
<p>A frequent mistake I see customers and consultants alike make is taking an average of a sizing requirement and using that as a baseline for sizing environments.</p>
<p>Looking at the figures produced from our internal load tests, we saw just an average of 78 IOPS required on write from a vanilla server without ThinIO to provide storage from this XenApp server.</p>
<p>Now frequently, people will take a figure like that, throw in 25% for growth and bob’s your uncle, ‘order the hardware Mr SAN man’. When I have questioned them about that assumption, they’ll often respond “oh it will be a bit slow if theres contention but it’ll even itself out”.</p>
<p><strong>Right? Wrong. </strong></p>
<p><strong>Things don’t go slow when they are over subscribed, they stop.</strong></p>
<p>Don’t take my word for it! Lets do some simple theoretical math:<img class="alignright  wp-image-3227" src="http://andrewmorgan.ie/wp-content/uploads/2014/10/calculator-150x150.png" alt="calculator" width="98" height="98" /></p>
<p>If you take a storage device and allocate 100 IOPS to this machine, what’s going to happen when a peak like 1000 IOPS is requested? <strong>A lot of queuing.</strong><strong> </strong></p>
<p>In theory, keeping to the 100 IOPS figure, that 1 second burst IO is now taking over 10 seconds to satisfy (1000 / 10).</p>
<p>But it gets worse, all subsequent IO that is requested after that spike occurred is going to also be haulted waiting for this task to occur.</p>
<p>Assuming you’re now mid spike and 10 seconds later the request is finished&#8230; taking your average figure, you now have 10 seconds worth of 100 IO’s per second potentially queued up behind…</p>
<p>Low and behold another login occurs and? <strong>STOP.</strong> Storage timeouts, twirly whirlies, application crashes, hour glasses and the good old <strong>“logins are slow”.</strong></p>
<h2><strong>Oh ok, So how do I size to accommodate this?</strong><strong> </strong></h2>
<p>Well you’re between a rock and a hard place aren’t you. You can’t tell users when to login, the price tag of a SAN sized for peak activity + 20% is going to cost you more than your entire desktop estate. And as you can see, it’s never safe to assume it will run slow.<strong> </strong></p>
<h3><strong>Buying into shared storage is a tricky business</strong><strong> <img class="alignright  wp-image-3228" src="http://andrewmorgan.ie/wp-content/uploads/2014/10/119460-117532-150x150.jpg" alt="119460-117532" width="115" height="115" /></strong></h3>
<p>Storage is expensive. Very expensive. It always annoys me when you hear vendors in this space refering to themselves as ‘reassuringly expensive’. To me this directly translates to ‘We can charge what we want, so we will and you can be reassured we feel the price tag is worth it.’</p>
<p>Storage was never written with desktop workloads in mind, it was written for ‘steady state’ server workloads and was in the progress of going the way of the ‘dodo’ (extinct) up until that first release of vMotion requiring shared storage, which some say was the saving of the market.</p>
<p>Many vendors are going with software or hardware intelligent tiering. This is a great feature, but the real question to ask is how frequently data is moved from the hot tier to lower tier? Press your vendor on this as they more than likely wont know! Microsoft storage spaces is a prime example of this with a really poor optimisation process of just once a day!</p>
<p>Then ask yourself what happens when a base image update occurs and changes the disk layout of the base golden image? Further, stateless technologies from the bigger vendors delete the differencing disk on restart, can you be sure the new disk is going to end up in the smaller, faster SSD or RAM tier? Or is data up there already in contention?</p>
<h3><strong>RAM is far less tricky<img class="alignright size-thumbnail wp-image-3224" src="http://andrewmorgan.ie/wp-content/uploads/2014/10/ram_icon-1-150x150.jpg" alt="ram_icon (1)" width="150" height="150" /></strong></h3>
<p>RAM is commodity, available in abundance and throughout every virtual desktop project I’ve architected and deployed, you run out of CPU resources in a ‘fully loaded’ host way before you will run out of RAM. RAM has no running maintenance cost, Ram is an upfront CAPEX cost and requires little to no maintenance.</p>
<p>The beauty of what ThinIO does with the little resources you assign it, is turn that <strong>desktop workload</strong> into a healthier and happier <strong>server workload</strong> of minimal burst IO and a low steady state IO requirement.</p>
<p><a href="http://andrewmorgan.ie/wp-content/uploads/2014/10/image0033.png"><img class="alignright size-large wp-image-3225" src="http://andrewmorgan.ie/wp-content/uploads/2014/10/image0033-1024x626.png" alt="image003" width="625" height="382" /></a></p>
<p style="text-align: center;"><em>Note the peak of just 40.5 IOPS and average IOPS of less than 2.</em></p>
<p>with as little as just 200mb cache for each of the 10 users logging in, within an aggressive 3 minute window, we reduced the peak from 1000 to 40. That’s a <strong>96% reduction</strong> in burst IO.</p>
<h3><strong>With ThinIO, you:</strong></h3>
<ul>
<li>reduce your exposure to massive IO spikes.</li>
<li>Improve user logon times.</li>
<li>significantly reduce your daily IOPS run rate.</li>
<li>Increase user productivity by spending less time waiting for the storage.</li>
<li>Commit to nothing up front, test it and see how well it works. If you are happy, then buy in.</li>
</ul>
<h3><strong>Lots of Intelligence baked in:</strong></h3>
<p>ThinIO is acutely aware of key operating system events that will cause these kind of spikes and react accordingly to reduce the spikes in IOPS created. ThinIO constantly watches the behavior and IO pattern of the storage and tunes itself accordingly.</p>
<p><a href="http://andrewmorgan.ie/wp-content/uploads/2014/10/image0053.png"><img class="aligncenter wp-image-3229 size-full" src="http://andrewmorgan.ie/wp-content/uploads/2014/10/image0053.png" alt="image005" width="1024" height="468" /></a></p>
<p>Unlike other technologies, ThinIO is a true caching and performance solution. We do not move useful data in and out of the cache on demand when cache availability is contencious. We track patterns and frequency of block access to respond accordingly, delivering all the benefits we have mentioned, even with the tiniest cache, without EVER reducing the capability of the storage when overwhelmed.</p>
<p>And on the opposite side of the scale, when underworked, we leverage our cache to deliver deeper read savings as above.</p>
<p>ThinIO also has a powerful API and PowerShell interface to allow you to report and interact with the cache on demand.</p>
<h2><strong>Wrap up:</strong></h2>
<p>And with the end of the series looming, allow me to finish on some easy points:</p>
<p><strong> ThinIO Allows you to:</strong></p>
<ul>
<li>size your SAN outside of the Lamborghini category &amp; price tag for your desktop estate.</li>
<li>rapidly achieve far deeper density on your current hardware when you are feeling the Pinch.</li>
<li>guarantee a level of performance by assigning cache per VM, disallowing other users to steal or hamper caching resources.</li>
<li>Improve user experience and login times immediately.</li>
<li>Reduce the impact of boot storms and similar IO storm scenarios.</li>
</ul>
<p>No other vendor can offer as quick a turn around time with their product. ThinIO installs in seconds and offers a huge range of compatibility.</p>
<p><strong>One more thing:</strong></p>
<p><a href="http://thinscaletechnology.com/download-thinio/"><img class="aligncenter" src="http://thinscaletechnology.com/wp-content/uploads/Download-ThinIO.jpg" alt="" width="300" height="116" /></a></p>
<p>In case you missed ThinIO’s launch day at <a href="http://www.e2evc.com/home/" target="_blank">E2EVC </a>Barcelona, <strong>ThinIO is now in GA</strong>, available from our website and production ready! More marketing to follow! But grab your copy now and get playing!</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://andrewmorgan.ie/2014/10/thinio-facts-and-figures-part-4-storage-design-and-dangerous-assumptions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ThinIO facts and figures, Part 2: The Bootstorm chestnut.</title>
		<link>http://andrewmorgan.ie/2014/10/thinio-facts-and-figures-part-2-the-bootstorm-chestnut/</link>
		<comments>http://andrewmorgan.ie/2014/10/thinio-facts-and-figures-part-2-the-bootstorm-chestnut/#comments</comments>
		<pubDate>Sat, 18 Oct 2014 14:30:00 +0000</pubDate>
		<dc:creator><![CDATA[andyjmorgan]]></dc:creator>
				<category><![CDATA[Citrix]]></category>
		<category><![CDATA[ThinIO]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[VMware View]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[XenApp]]></category>
		<category><![CDATA[XenDesktop]]></category>
		<category><![CDATA[IOPS]]></category>
		<category><![CDATA[RDS]]></category>
		<category><![CDATA[Remote Desktop services]]></category>
		<category><![CDATA[VDI]]></category>
		<category><![CDATA[VMware Horizon View]]></category>
		<category><![CDATA[xenapp]]></category>

		<guid isPermaLink="false">http://andrewmorgan.ie/?p=3186</guid>
		<description><![CDATA[Welcome back! This blog post is part of a number of posts in advance of our upcoming release, for reference you can find part one below: ThinIO facts and figures, Part 1: VDI and Ram caching. Getting right to it: In this industry when somebody says ‘boot storms!&#8217; &#8211; most of us will respond with: Boot storms are a well documented, boring problem and have many solutions available from vendors and hypervisors alike. Most solutions today rely on a &#8216;shared memory&#8217; [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><img class="alignright wp-image-2865 " src="http://andrewmorgan.ie/wp-content/uploads/2014/04/logo.png" alt="logo" width="174" height="33" />Welcome back! This blog post is part of a number of posts in advance of our upcoming release, for reference you can find part one below:</p>
<ul>
<li class="entry-title"><a href="http://andrewmorgan.ie/2014/10/thinio-facts-and-figures-part-1-vdi-and-ram-caching/" target="_blank">ThinIO facts and figures, Part 1: VDI and Ram caching.</a></li>
</ul>
<h2>Getting right to it:</h2>
<p>In this industry when somebody says ‘boot storms!&#8217; &#8211; most of us will respond with:</p>
<p><a href="http://andrewmorgan.ie/wp-content/uploads/2014/10/image0022.png"><img class="aligncenter  wp-image-3195" src="http://andrewmorgan.ie/wp-content/uploads/2014/10/image0022.png" alt="image002" width="163" height="119" /></a></p>
<p>Boot storms are a well documented, boring problem and have many solutions available from vendors and hypervisors alike. Most solutions today rely on a &#8216;shared memory&#8217; storage area to cache &#8216;on boot&#8217;, in theory caching only one startup or one pattern in order to then serve it back to the proceeding desktops to boot.</p>
<p>But why are boot storms an issue? While working on ThinIO we had the unique ability to really dive into the Windows boot process and analyse why boot storms cause the damage they do and in this post we thought we’d share our findings to better document the issue.</p>
<p><span id="more-3186"></span></p>
<h2>Boot data:</h2>
<p>Taking a typical windows 7 boot, to the login screen and idling until all services have started, the data traversing from disk to VM is relatively small. in our testing we found an average of Just 500-600 mb of data is read during this process, and write data barely registers at between 20 and 30mb.</p>
<p><a href="http://andrewmorgan.ie/wp-content/uploads/2014/10/image0031.png"><img class="aligncenter size-full wp-image-3189" src="http://andrewmorgan.ie/wp-content/uploads/2014/10/image0031.png" alt="image003" width="867" height="515" /></a></p>
<p>But hey, what gives? Taking such low data throughput, why is boot such a contenscious issue? Have I been misled with marketing and vendor nonsense?</p>
<h2><strong>The IO chestnut:</strong></h2>
<p>Sadly no, it’s the way windows requests this data, but don’t take my word for it…. Behold, the incredible mess that is the Windows boot process!</p>
<p><a href="http://andrewmorgan.ie/wp-content/uploads/2014/10/image0051.png"><img class="aligncenter size-full wp-image-3190" src="http://andrewmorgan.ie/wp-content/uploads/2014/10/image0051.png" alt="image005" width="867" height="532" /></a></p>
<p>Yep, that’s right, in the time Windows requested roughly 600mb of data, it sent down an astounding 70 thousand IO’s in the space of 2-3 minutes!</p>
<h2><strong>Math time:</strong></h2>
<p>Now if you were to take these figures as they stand, you would take 70,000 IO’s divide this into 560mb and you’d probably end up with an average of about 8k of data requested per IO… You’d be wrong.</p>
<p><em>As my good buddy Conor Scolard would say, ‘when you Assume, you make an ass out of you and me’.</em></p>
<p>To better understand the bounderies of Windows, Windows requests IO’s between the minimum of 512 bytes all the way up the spectrum later in the boot process to 128k and above. But it requests these blocks sparcely, on demand, and not just once per sector, the same blocks are frequently accessed.</p>
<p>The net result of this causes absolute havok on the storage:</p>
<p><a href="http://andrewmorgan.ie/wp-content/uploads/2014/10/image007.png"><img class="aligncenter size-full wp-image-3191" src="http://andrewmorgan.ie/wp-content/uploads/2014/10/image007.png" alt="image007" width="867" height="473" /></a></p>
<p>The crux of the issue is, for each one of these IO’s, the storage provider needs to compute the block data requested, seek the data out, then return it.</p>
<p>But 70,000 of these IO operations for a meagre 600mb of data is madness and you can now see exactly why boot storms were labelled as such for those early adopters who had their hands burned by this fact finding mission.</p>
<p><em>I’ll mitigate this issue by just booting my VM’s at night!</em></p>
<p>I’m sure you will! I would also love to see your face if a number of users happen to restart their desktops during the day, cascading 70,000 IO’s per desktop to the storage in a 2 minute window, per desktop!</p>
<h2><strong>Bootstorming IS an issue.</strong></h2>
<p>Now, knowing all this, it makes sense as to why storage and hypervisors alike are using a cache of ram.</p>
<h2><strong>But how does ThinIO fit in here? With Read Ahead of course!</strong></h2>
<p>Knowing the Windows boot process as intimate as only a technology like ThinIO can, there are many, many optimisations we can make to this process.</p>
<p>We can both speed the boot process up and also massively reduce the storage requirement while in VM, without any fancy caching mechanism!</p>
<p>With ThinIO’s read ahead technology, we can deliver just shy of an 80% boot IO reduction with nothing other than having our technology in the virtual machine:</p>
<p><a href="http://andrewmorgan.ie/wp-content/uploads/2014/10/image009.png"><img class="aligncenter size-full wp-image-3192" src="http://andrewmorgan.ie/wp-content/uploads/2014/10/image009.png" alt="image009" width="867" height="513" /></a></p>
<p>Taking a ThinIO averaged test and overlaying it to a baseline averaged test, it’s clear just how much impact this technology can have:</p>
<p><a href="http://andrewmorgan.ie/wp-content/uploads/2014/10/image011.png"><img class="aligncenter size-full wp-image-3193" src="http://andrewmorgan.ie/wp-content/uploads/2014/10/image011.png" alt="image011" width="867" height="473" /></a></p>
<p>&nbsp;</p>
<h2><strong>Wrap up:</strong></h2>
<p>So there you have it, with ThinIO, a simple, in VM solution, not only can you seriously reduce your IO footprint, boost user performance and achieve greater storage density per virtual machine, you also can also massively negate the impact a booting VM has on your storage.</p>
<p>If you would like a chance to test ThinIO pre-release, find access to the public beta below. Thank you for your time and happy testing!</p>
<p><a href="http://thinscaletechnology.com/download-thinio/" target="_blank"><img class="aligncenter wp-image-3171 size-medium" src="http://andrewmorgan.ie/wp-content/uploads/2014/10/Download-ThinIO-Beta-300x101.jpg" alt="Download-ThinIO-Beta" width="300" height="101" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://andrewmorgan.ie/2014/10/thinio-facts-and-figures-part-2-the-bootstorm-chestnut/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Viewing open files on a file server from powershell.</title>
		<link>http://andrewmorgan.ie/2012/12/viewing-open-files-on-a-file-server-from-powershell/</link>
		<comments>http://andrewmorgan.ie/2012/12/viewing-open-files-on-a-file-server-from-powershell/#comments</comments>
		<pubDate>Wed, 05 Dec 2012 14:55:23 +0000</pubDate>
		<dc:creator><![CDATA[andyjmorgan]]></dc:creator>
				<category><![CDATA[Clustering]]></category>
		<category><![CDATA[PowerShell Scripting]]></category>
		<category><![CDATA[Server Based Computing]]></category>
		<category><![CDATA[Virtual Desktop Infrastructure]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows Server]]></category>
		<category><![CDATA[XenApp]]></category>
		<category><![CDATA[XenDesktop]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[SBC]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[VDI]]></category>
		<category><![CDATA[xenapp]]></category>

		<guid isPermaLink="false">http://andrewmorgan.ie/?p=2480</guid>
		<description><![CDATA[So this is a situation you should all be aware of in an SBC / VDI environment, despite all warnings, you&#8217;ve redirected folders to your network drive and your file servers are screaming in agony? Having been in this situation recently, I needed to audit and report on the types of files open on the file server, my hunch was a certain select number of users were running applications (like *gulp* lotus notes) from the network share. Disappointed with the [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><img class="alignright size-full" alt="/wp-content/uploads/2011/03/windows_powershell_icon.png?w=58&amp;h=58&amp;h=58" src="/wp-content/uploads/2011/03/windows_powershell_icon.png?w=58&amp;h=58&amp;h=58" height="58" width="58" />So this is a situation you should all be aware of in an SBC / VDI environment, despite all <a href="http://helgeklein.com/blog/2011/11/folder-redirection-denial-of-service-waiting-to-happen/" target="_blank">warnings</a>, you&#8217;ve redirected folders to your network drive and your file servers are screaming in agony?</p>
<p>Having been in this situation recently, I needed to audit and report on the types of files open on the file server, my hunch was a certain select number of users were running applications (like *gulp* lotus notes) from the network share.</p>
<p>Disappointed with the powershell scripts on the interwebs, I decided to write my own function to perform this task:</p>
<p>[sourcecode language=&#8221;powershell&#8221;]<br />
function get-openfiles{<br />
param(<br />
    $computername=@($env:computername),<br />
    $verbose=$false)<br />
    $collection = @()<br />
foreach ($computer in $computername){<br />
    $netfile = [ADSI]&quot;WinNT://$computer/LanmanServer&quot;</p>
<p>        $netfile.Invoke(&quot;Resources&quot;) | foreach {<br />
            try{<br />
                $collection += New-Object PsObject -Property @{<br />
        		  Id = $_.GetType().InvokeMember(&quot;Name&quot;, &#8216;GetProperty&#8217;, $null, $_, $null)<br />
        		  itemPath = $_.GetType().InvokeMember(&quot;Path&quot;, &#8216;GetProperty&#8217;, $null, $_, $null)<br />
        		  UserName = $_.GetType().InvokeMember(&quot;User&quot;, &#8216;GetProperty&#8217;, $null, $_, $null)<br />
        		  LockCount = $_.GetType().InvokeMember(&quot;LockCount&quot;, &#8216;GetProperty&#8217;, $null, $_, $null)<br />
        		  Server = $computer<br />
        		}<br />
            }<br />
            catch{<br />
                if ($verbose){write-warning $error[0]}<br />
            }<br />
        }<br />
    }<br />
    Return $collection<br />
}<br />
[/sourcecode]</p>
<p>The function above (get-openfiles) has been written to accept an array of servers to the command line and it will return the following items:</p>
<ul>
<li>The ID of the open file.</li>
</ul>
<ul>
<li>The server it&#8217;s open from.</li>
</ul>
<ul>
<li>The username who has the file open.</li>
</ul>
<ul>
<li>The amount of locks the file has.</li>
</ul>
<p><strong>A couple of quick examples for using this command are below:<br />
<code><br />
</code><br />
</strong> <span style="text-decoration:underline;">Retrieving open files from server1:</span><br />
<code><br />
</code><br />
<img class="aligncenter" alt="full" src="/wp-content/uploads/2012/12/full.png" height="261" width="595" /><br />
<code><br />
</code></p>
<p>[sourcecode language=&#8221;powershell&#8221;]get-openfiles -computername server1 | select server,itempath,lockcount[/sourcecode]</p>
<p><code><br />
</code><br />
<span style="text-decoration:underline;">Retrieve a count of open files that end with the nsf file type (<em>Lotus Notes</em>):</span><br />
<code><br />
</code><br />
<img class="aligncenter size-full wp-image-2483" alt="count" src="/wp-content/uploads/2012/12/count.png" height="37" width="595" /><br />
<code><br />
</code></p>
<p>[sourcecode language=&#8221;powershell&#8221;](get-open files -computername server1,server2 | ? {$_.itempath -like &quot;*.nsf*&quot;}).count()[/sourcecode]</p>
<p><code><br />
</code><br />
<span style="text-decoration:underline;">Retrieve a report of total open files on a number of file servers:</span><br />
<code><br />
</code><br />
<img class="aligncenter size-full wp-image-2487" alt="report" src="/wp-content/uploads/2012/12/report.png" height="64" width="595" /></p>
<p>&nbsp;</p>
<p>[sourcecode language=&#8221;powershell&#8221;]get-openfiles -computername server1,server2,server3,server4,server5 | group -property server[/sourcecode]</p>
<p><code> </code></p>
]]></content:encoded>
			<wfw:commentRss>http://andrewmorgan.ie/2012/12/viewing-open-files-on-a-file-server-from-powershell/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Monitoring Storage disk queue&#8217;s and IO with PowerShell</title>
		<link>http://andrewmorgan.ie/2012/11/monitoring-storage-disk-queues-and-io-with-powershell/</link>
		<comments>http://andrewmorgan.ie/2012/11/monitoring-storage-disk-queues-and-io-with-powershell/#comments</comments>
		<pubDate>Fri, 30 Nov 2012 09:38:45 +0000</pubDate>
		<dc:creator><![CDATA[andyjmorgan]]></dc:creator>
				<category><![CDATA[Citrix]]></category>
		<category><![CDATA[PowerShell Scripting]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows Server]]></category>
		<category><![CDATA[XenApp]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[xenapp]]></category>

		<guid isPermaLink="false">http://andrewmorgan.ie/?p=2469</guid>
		<description><![CDATA[Here&#8217;s one that used to bother me alot. The problem usually went as follows: &#8220;Your XenApp servers have very high disk queue&#8217;s and IO&#8221; &#8220;What&#8217;s causing it?&#8221; &#8220;dunno&#8230;&#8221; With Server 2008, the task manager&#8217;s resource monitor feature will help you find these items. But in server 2003 this was a perilous task. The specific details for disk io per process are stored in performance monitor under each specific process running. Trying to analyse each process was a massive pain, but [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><img class="alignright size-full" alt="/wp-content/uploads/2011/03/windows_powershell_icon.png?w=58&amp;h=58&amp;h=58" src="/wp-content/uploads/2011/03/windows_powershell_icon.png?w=58&amp;h=58&amp;h=58" height="58" width="58" />Here&#8217;s one that used to bother me alot. The problem usually went as follows:</p>
<p>&#8220;Your XenApp servers have very high disk queue&#8217;s and IO&#8221;</p>
<p>&#8220;What&#8217;s causing it?&#8221;</p>
<p>&#8220;dunno&#8230;&#8221;</p>
<p>With Server 2008, the task manager&#8217;s resource monitor feature will help you find these items. But in server 2003 this was a perilous task. The specific details for disk io per process are stored in performance monitor under each specific process running. Trying to analyse each process was a massive pain, but powershell can do some very clever work to help alleviate this!</p>
<p>I wrote two quick functions which act similar to &#8220;top&#8221; in linux for giving an on screen view, updating at interval of what exactly is creating IO activity. These two functions are:</p>
<p>get-IODataBytes:</p>
<p><img class="aligncenter size-full wp-image-2470" alt="storageio" src="/wp-content/uploads/2012/11/storageio.png" height="233" width="595" /></p>
<p>Get-IODataOperations</p>
<p><img class="aligncenter size-full wp-image-2471" alt="storageioops" src="/wp-content/uploads/2012/11/storageioops.png" height="240" width="595" /></p>
<p>The code for these functions are below:</p>
<p>[sourcecode language=&#8221;powershell&#8221;]<br />
function get-iodatabytes{<br />
    $result=(get-counter -counter &quot;Process(*)IO Data Bytes/sec&quot; -ea 0).countersamples | ? {$_.cookedvalue -gt 0} | select instancename,@{Name=&quot;SessionID&quot;;Expression={if ($_.path.contains(&quot;#&quot;)){($_.path.split(&quot;#)&quot;))[1]}else{&quot;0&quot;}}},@{Name=&quot;IO Data Bytes/sec&quot;;Expression={[math]::Round($_.cookedvalue,0)}},@{Name=&quot;IO Data KBytes/sec&quot;;Expression={[math]::Round($_.cookedvalue / 1024,0)}} | sort -Descending &quot;IO Data Bytes/sec&quot; | ft<br />
    $currentqueue=(((get-counter -counter &quot;PhysicalDisk(0 C:)Current Disk Queue Length&quot; -ea 0).countersamples) | select cookedvalue).cookedvalue<br />
    clear<br />
    write-warning &quot;Hit [CTRL] + [C] to exit live capture&quot;<br />
    write-host &quot;Current Disk queue: $currentqueue&quot;<br />
    return $Result<br />
}</p>
<p>FUnction get-IODataOperations {<br />
    $result=(get-counter -counter &quot;Process(*)IO Data Operations/sec&quot; -ea 0).countersamples | ? {$_.cookedvalue -gt 0} | select instancename,@{Name=&quot;SessionID&quot;;Expression={if ($_.path.contains(&quot;#&quot;)){($_.path.split(&quot;#)&quot;))[1]}else{&quot;0&quot;}}},@{Name=&quot;IO Data Operations/sec&quot;;Expression={[math]::Round($_.cookedvalue,0)}} | sort -Descending &quot;IO Data Operations/sec&quot; | ft<br />
    $currentqueue=(((get-counter -counter &quot;PhysicalDisk(0 C:)Current Disk Queue Length&quot; -ea 0).countersamples) | select cookedvalue).cookedvalue<br />
    clear<br />
    write-warning &quot;Hit [CTRL] + [C] to exit live capture&quot;<br />
    write-host &quot;Current Disk queue: $currentqueue&quot;<br />
    return $Result<br />
}</p>
<p>[/sourcecode]</p>
<p>if you wish to loop one of these functions, simply use the following code:</p>
<p>[sourcecode language=&#8221;powershell&#8221;]<br />
while ($true){<br />
get-iodataoperations<br />
start-sleep 1<br />
}<br />
[/sourcecode]</p>
]]></content:encoded>
			<wfw:commentRss>http://andrewmorgan.ie/2012/11/monitoring-storage-disk-queues-and-io-with-powershell/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>On IOPS, shared storage and a fresh idea. (Part 3) tying it all together in the stack</title>
		<link>http://andrewmorgan.ie/2012/10/on-iops-shared-storage-and-a-fresh-idea-part-3-tying-it-all-together-in-the-stack/</link>
		<comments>http://andrewmorgan.ie/2012/10/on-iops-shared-storage-and-a-fresh-idea-part-3-tying-it-all-together-in-the-stack/#comments</comments>
		<pubDate>Fri, 26 Oct 2012 14:08:13 +0000</pubDate>
		<dc:creator><![CDATA[andyjmorgan]]></dc:creator>
				<category><![CDATA[Citrix]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Server Based Computing]]></category>
		<category><![CDATA[Server Virtualisation]]></category>
		<category><![CDATA[Virtual Desktop Infrastructure]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows Server]]></category>
		<category><![CDATA[XenApp]]></category>
		<category><![CDATA[XenDesktop]]></category>
		<category><![CDATA[XenServer]]></category>
		<category><![CDATA[HyperV]]></category>
		<category><![CDATA[SBC]]></category>
		<category><![CDATA[VDI]]></category>
		<category><![CDATA[xenapp]]></category>

		<guid isPermaLink="false">http://andrewmorgan.ie/?p=2393</guid>
		<description><![CDATA[Note: This is part three, have a read of part one and two. Hello there, and thank you for dropping back for part 3&#8230; I suppose I should start with the disappointing news that I have yet to test this option for VDI in a box. And despite Aaron Parker&#8217;s suggestions it wasn&#8217;t due to lack of inspiration, it was down to lack of time! This series has gathered allot of interest from both community and storage vendors alike, and [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><img class="alignright" alt="" src="/wp-content/uploads/2012/10/andrew-logo1.png?w=595" height="76" width="75" />Note: This is part three, have a read of part <a href="http://andrewmorgan.ie/2012/10/05/on-e2e-geek-speak-iops-shared-storage-and-a-fresh-idea-part-1/" target="_blank">one</a> and <a href="http://andrewmorgan.ie/2012/10/10/on-iops-shared-storage-and-a-fresh-idea-part-2-go-go-citrix-machine-creation-services/" target="_blank">two</a>.</p>
<p>Hello there, and thank you for dropping back for part 3&#8230;</p>
<p>I suppose I should start with the disappointing news that I have yet to test this option for VDI in a box. And despite Aaron Parker&#8217;s suggestions it wasn&#8217;t due to lack of inspiration, it was down to lack of time! This series has gathered allot of interest from both community and storage vendors alike, and I feel I should set the record straight before I got any further:</p>
<ol>
<li>This<strong> isn&#8217;t a production idea</strong>, you would be crazy to use this idea in a live environment.</li>
<li>Throughout this entire project, we&#8217;re focusing on pooled stateless. Stateful desktops would be a separate post entirely.</li>
<li>This wasn&#8217;t an attack on products in this market space, merely a fresh view on an old problem.</li>
<li>If i had the skills or funds necessary to run this project to a production solution, I wouldn&#8217;t have posted it. I would already be hard at work creating a reasonably priced product!</li>
</ol>
<p>Now that my declarations are out of the way, I&#8217;d first like to talk about the moral of the story. This isn&#8217;t an unfamiliar expression:</p>
<p><strong>IOPS mitigation is not about read IOPS it&#8217;s about <span style="text-decoration:underline;">WRITE IOPS</span></strong>!</p>
<p>VMware, Citrix and Microsoft have similar but very different solutions for read IOPS negotiation. Similar in the sense that they try to negate storage read IOPS. But the key difference with XenServer is the local disk cache via Intellicache has the out of box functionality to cache the majority of read&#8217;s to local disk (think SSD*) without the baked in soft limit of 512 MB for Microsoft HyperV and VMware respectively.</p>
<p>Long story short, VMware and Microsoft&#8217;s solution is about 512mb of recognizable read IOPS negation un-tuned, but enabled. Of course this value can be tuned upwards, but the low entry point of cache would suggest, at least to me, that tuning up will have an upsetting affect on the host.</p>
<p>This to me is why IntelliCache has the upperhand in the (value add product) VDI space for read IOPS negation and they even throw in the Hypervisor as part of your XenDesktop licensing, so win win, but what about those pesky write IOPS?</p>
<p><span id="more-2393"></span></p>
<p><strong>Let&#8217;s look at Citrix for a moment!</strong></p>
<p>If we review <a href="http://andrewmorgan.ie/2012/10/05/on-e2e-geek-speak-iops-shared-storage-and-a-fresh-idea-part-1/" target="_blank">article 1</a> and <a href="http://andrewmorgan.ie/2012/10/10/on-iops-shared-storage-and-a-fresh-idea-part-2-go-go-citrix-machine-creation-services/" target="_blank">article 2</a> for a moment, the half baked idea formed by <a href="https://twitter.com/barryschiffer" target="_blank">Barry Schiffer</a>, <a title="The dutch IT guy!" href="http://www.ingmarverheij.com/">Ingmar Verheij</a>, <a href="https://twitter.com/KBaggerman" target="_blank">Kees Baggerman</a>, <a title="An amazing blog, i regularly read from Remko." href="http://www.remkoweijnen.nl/blog/">Remko Weijnen</a> and I, when combined with Citrix IntelliCache turned out to be a phenomenal combination to create an IOPS avoidance product. But the key point we had in the back of our heads was, Citrix provisioning server already has this driver!</p>
<p>Citrix provisioning server has a RAM cache driver, with configurable size baked into the Provisioning Services product. This driver works in a very similar way to the EWF driver, just without the API and flexibility of a Microsoft driver.</p>
<p>There are customers of Citrix out there using RAM caching with XenApp who I spoke to, they have assigned a large (8gb+ cache, 3-4gb of cache utilised day to day) to negotiate the chance of a spillover, but it could still happen and this is an acceptable risk to their implementation. I struggled to find a XenDesktop customer using this method who would talk about their implementation.</p>
<p>But with XenDesktop in mind, using an overly large cache size to avoid spillover just doesn&#8217;t scale the way a consolidated Server Based Computing model would&#8230; Which leaves us back in this same dilemma, I&#8217;d like to cache in RAM, but I don&#8217;t want to risk users losing data when they perform a task we have not factored for.</p>
<p>So with all this in mind, lets talk about my final hurdle I faced with this project.</p>
<p><img class="alignright size-thumbnail wp-image-2402" title="BSOD" alt="" src="/wp-content/uploads/2012/10/bsod.jpg?w=150" height="112" width="150" /></p>
<p><strong>RAM cache flood and my half baked solution:</strong></p>
<p>The Microsoft EWF driver suffered the same problem as the Citrix provisioning server when the cache filled, i.e. it froze or outright bug checked if you tried to reference a file put into the cache before you filled it with other information.</p>
<p><a href="http://info.kraftkennedy.com/blog/bid/102199/Citrix-Provisioning-Server-Understanding-the-Limitations-of-Write-Cache-in-Target-Device-RAM">Jeff Silverman</a> has done a great article on what happens in this event with the Citrix Provisioning Services RAM cache and I urge you to go read it so I don&#8217;t have to repeat it! Go now, I&#8217;ll wait right here for you to get back!</p>
<p><strong>Read that article?</strong> Ok good, let&#8217;s continue.</p>
<p>To combat this scenario with the Windows EWF driver, I created a very rough around the edges windows service using polling (Sorry Remko) to check the size of the cache periodically via the <a href="http://msdn.microsoft.com/en-us/library/ms933209%28v=winembedded.5%29.aspx">EWFAPI</a> and write the cache out to disk.</p>
<p>The function in the EWFAPI called <a href="http://msdn.microsoft.com/en-us/library/aa940887%28v=winembedded.5%29.aspx">EwfCommitAndDisableLive</a> allowed me to dump the ram cache to disk and subvert the cache, going straight to disk when this event had occurred. By using this routine the ram cache simply disables itself and allows pass-through to disk at this point.</p>
<p><a href="/wp-content/uploads/2012/10/ewfdriverbasicprincipal.png"><img class="aligncenter" title="EWFDriverBasicPrincipal" alt="" src="/wp-content/uploads/2012/10/ewfdriverbasicprincipal.png" height="244" width="516" /></a></p>
<p>With this in mind, I tuned my service to spill to disk when the cache was greater than 80% of ram available, not in use by the operating system when the system booted, This worked well to a point, but the key failure to this approach became apparent when you opened a large number of applications and they struggled to occupy the space available around the cache.</p>
<p>My second attempt however, proved much more fruitful where I monitored for free system bytes in memory and if this dropped below a certain threshold the EWF drive began it&#8217;s dump routine to disk. Once the dump routine was complete, ram cleared and the writes had been committed to storage where the disk continued to use it for the remainder of the session. Once this spill over had occurred, a notification bubble fired in the user session warning them of the degradation of service and they should log off saving work at the next convenient moment&#8230;</p>
<p><em>Voila! no blue screen, spill to disk and user notification of degradation.</em></p>
<p>This wasn&#8217;t fool proof, it was very rough, it didn&#8217;t handle files being written larger than the RAM cache, but In my opinion, it satisfied the <strong>biggest fear</strong> and business case against using the Citrix Provisioning server ram caching, the ram cache flood scenario. I was happy with the results and it scaled well to the size of my lab, it showed what is possible with a RAM filter driver and it allowed me to prove my point before I started to poke the hornets nest of the storage market. So let&#8217;s park the EWF story for now and focus on my favorite subject, Citrix technologies.</p>
<p><em><strong>Note:</strong> I won&#8217;t be making this service and driver solution publicly available, it&#8217;s not a production ready solution and Microsoft would sue the pants off me. I&#8217;m sure you&#8217;ll understand why, but if you want more information drop me an email.</em></p>
<p>The next part&#8217;s of this blog are all theoretical, but I know certain people I want to listen, <em>are</em> listening (Hi Kenneth, hope you are well :)).</p>
<p><strong>Negating the negated. Lets talk about that spill over.</strong></p>
<p>But what about that Spill over event? by using a spill over from ram to disk, we create a situation where we could change a steady, slightly reliable IOPS per from each desktop, to a situation where, &#8220;couldn&#8217;t a collection of spillovers at the same time cause your storage to becoming swamped with IOPS?&#8221;</p>
<p>Absolutely, and I&#8217;ve been thinking about this quite a bit&#8230; But there&#8217;s another hidden potential here even in a RAM spill over scenario&#8230;</p>
<p style="text-align:center;"><em>With a little bit of trickery couldn&#8217;t we also negate this spillover event with a simple provisioning job? </em></p>
<p><a href="/wp-content/uploads/2012/10/difdiskcopycreate.png"><img class="aligncenter size-full wp-image-2408" title="difdiskcopycreate" alt="" src="/wp-content/uploads/2012/10/difdiskcopycreate.png" height="272" width="595" /></a></p>
<p>With a bit of time spent thinking about this scenario, this is what I came up with&#8230;</p>
<p>Why doesn&#8217;t the controller, for XenApp or XenDesktop (PVS / DDC) copy or (my personal preference) create a local, blank differencing disk when a VM boots?</p>
<p>The hypervisor could be completely agnostic at this point, we could spill over to local disk, keeping write IOPS completely away from the shared storage? even in a spill over event?</p>
<p>This approach (in this half baked enthusiasts view) would negate the negated&#8230; But don&#8217;t take my word for it, lets go for some theoretical solutions.</p>
<p><strong>Solution A: Implementing a spill over routine with the Citrix provisioning server driver.</strong></p>
<p>So with my success with the Microsoft driver, I got myself thinking how easy would this be to do utilizing the Citrix Provisioning Services driver? Without access to the code, I&#8217;m going to be making slightly risky statements here, but I have allot of faith in Citrix that they could make this happen.</p>
<p>From everyone I have spoken to about this idea, they all see the value in the ability to spill out of RAM&#8230; So Citrix, please make it so. Below are some idea&#8217;s for deployment methods assuming Citrix do march down this route and the pro&#8217;s and con&#8217;s I see that live with each scenario.</p>
<p>Bear in mind, I&#8217;m not a storage guy, a full time developer or a software architect, I&#8217;m just an enthusiast that see&#8217;s potential, so drop your comments below as to what you think!</p>
<p><span style="text-decoration:underline;"><strong>Machine Creation Services.</strong></span></p>
<p><strong>Idea A: Provisioning services improved RAM caching, Machine Creation services and Intellicache on XenServer.</strong></p>
<p><a href="/wp-content/uploads/2012/10/1-mcs-pvs-driver1.png"><img class="aligncenter size-full wp-image-2406" title="1. MCS &amp; PVS Driver" alt="" src="/wp-content/uploads/2012/10/1-mcs-pvs-driver1.png" height="355" width="595" /></a></p>
<p>Utilizing XenServer and MCS we could leverage the intellicache to negate the read IOPS as we proved in my own EWF driver testing, but still deliver on that spill over mechanism allowing continuation of service.</p>
<p><strong>Pros:</strong></p>
<ul>
<li>Read IOPS negation.</li>
<li>RAM caching to remove write IOPS (bar a spill over).</li>
<li>Continuation of service in a cache flood scenario.</li>
</ul>
<p><strong>Cons:</strong></p>
<ul>
<li>Limited to XenServer.</li>
<li>Over provisioning of RAM necessary per desktop.</li>
<li>RAM spillover will result in a large amount of IOPS to the shared storage.</li>
</ul>
<p><strong>Idea B</strong>: <strong>Provisioning services improved RAM caching, Machine Creation services and Intellicache on XenServer&#8230; With local copy!</strong></p>
<p><a href="/wp-content/uploads/2012/10/2-mcs-pvs-local-copy.png"><img class="aligncenter size-full wp-image-2409" title="2. MCS &amp; PVS &amp; local copy" alt="" src="/wp-content/uploads/2012/10/2-mcs-pvs-local-copy.png" height="329" width="595" /></a></p>
<p>Same benefits as previous, but now, we have zero reliance on the shared storage when the VM is up (except for ID disk actions).</p>
<p><strong>Pros:</strong></p>
<ul>
<li>Read IOPS negation.</li>
<li>RAM caching to remove write IOPS.</li>
<li>Uses local resources in a spill over.</li>
<li>Continuation of service in a cache flood scenario.</li>
</ul>
<p><strong>Cons:</strong></p>
<ul>
<li>Limited to XenServer.</li>
<li>Over provisioning of RAM necessary per desktop.</li>
</ul>
<p>So that&#8217;s MCS in a nutshell with per VM caching, I think this solution has so much potential I can&#8217;t believe it&#8217;s not been done, but I digress. So lets park that topic for now and move on to Citrix Provisioning Services.</p>
<p><strong><span style="text-decoration:underline;">Citrix Provisioning Services:</span><br />
</strong></p>
<p>So lets look at the &#8220;favorite of many&#8221; technology.</p>
<p><strong>Idea A: Citrix Provisioning Services and Improved RAM caching driver.</strong></p>
<p><a href="/wp-content/uploads/2012/10/pure-pvs.png"><img class="aligncenter size-full wp-image-2407" title="Pure PVS" alt="" src="/wp-content/uploads/2012/10/pure-pvs.png" height="401" width="595" /></a></p>
<p>In a pure Provisioning services environment, we would force our read IOPS via the lan, instead of storage protocol but still deliver a spill back to disk to allow continuation of service.</p>
<p><strong>Pros:</strong></p>
<ul>
<li>Hypervisor agnostic.</li>
<li>RAM caching to remove write IOPS (bar a spill over).</li>
<li>Continuation of service in a cache flood scenario.</li>
<li>Potentially no shared storage needed, at all, if caching on the PVS server.</li>
</ul>
<p><strong>Cons:</strong></p>
<ul>
<li>Read IOPS aren&#8217;t really negated, they&#8217;re just forced over another technology.</li>
<li>Over provisioning of RAM necessary per desktop.</li>
<li>RAM spillover will result in a large amount of IOPS to the shared storage / pvs server.</li>
</ul>
<p><strong>Idea B: Citrix Provisioning Services and Improved RAM caching driver.. With local copy!<br />
</strong></p>
<p><a href="/wp-content/uploads/2012/10/pvslocalcopy.png"><img class="aligncenter size-full wp-image-2413" title="pvslocalcopy" alt="" src="/wp-content/uploads/2012/10/pvslocalcopy.png" height="500" width="576" /></a></p>
<p>Taking the above benefits, but with the gain of utilizing local storage in the spillover event.</p>
<p><strong>Pros:</strong></p>
<ul>
<li>Hypervisor agnostic.</li>
<li>RAM caching to remove write IOPS.</li>
<li>Uses local resources in a spill over.</li>
<li>Continuation of service in a cache flood scenario.</li>
<li>Potentially no shared storage needed, at all.</li>
</ul>
<p><strong>Cons:</strong></p>
<ul>
<li>Read IOPS aren&#8217;t really negated, they&#8217;re just forced over another technology.</li>
<li>Over provisioning of RAM necessary per desktop.</li>
</ul>
<p><span style="text-decoration:underline;"><strong>So lets Review:</strong></span></p>
<p>And there we have it, 4 solutions to IOPS negation utilizing the Provisioning server RAM caching driver, with a little bit of a modification to deliver a robust solution to RAM caching.</p>
<p>The copy and creation of differencing disks again would deliver additional benefits to leverage the hardware you put into each Hypervisor without the Shared Storage investment.</p>
<p><em>Win Win, but is it?</em></p>
<p><strong>There&#8217;s an oversight here:</strong></p>
<p>There&#8217;s a niggle here that&#8217;s been bothering me for some time and you&#8217;ll probably note I mentioned it as a CON to most of the solutions above&#8230; I&#8217;m going to lay it out on the table in complete honesty&#8230;</p>
<p style="text-align:center;"><em>&#8220;Isn&#8217;t over provisioning RAM on a per desktop basis a waste of resource? Wouldn&#8217;t it be better if we could share that resource across all VM&#8217;s on a Hypervisor basis?&#8221;</em></p>
<p>You betcha! If we are assigning out (for argument sake) 1gb of ram cache per VM, that RAM is locked into that VM and if another machine spills, the free RAM in other desktops is wasted.</p>
<p>You would be completely insane not to reserve this RAM per VM, if an over-commit for the VM&#8217;s is reached this RAM will merely spill out to a page file type arrangement, negating <strong>all</strong> your benefits.</p>
<p>Ultimately, assigning RAM in this way could be seen as wasteful in the grand scheme of things&#8230;</p>
<p><span style="text-decoration:underline;"><strong>But there are other ways to <a href="http://www.worldwidewords.org/qa/qa-mor1.htm" target="_blank">skin this cat</a>!</strong></span></p>
<p>So this leads me on to something I was also considering which popped up in a twitter conversation recently. <strong>RAM disk&#8217;s and Hypervisors</strong>.</p>
<p>Current storage vendors will create a storage pool, consisting of ram inside a VM, per hosting hypervisor for local storage to allow good IOPS leveraging that VM. This VM can perform additional RAM optimizations like compression, de-duplication and sharing of similar pages to reduce the count.</p>
<p>This approach is super clever, <em>but</em>, In my humble opinion (please don&#8217;t kill me vendors), this approach is wasteful. Running a VM as a storage repository per host has an overhead to run this virtual machine and takes away from the agnostic solution that is possible&#8230;</p>
<p style="text-align:center;"><strong><em>What If the hypervisor provides the RAM disk?</em></strong></p>
<p style="text-align:left;">So excluding ESXi for a second, as getting a RAM disk into that platform would require VMware to allow access to the stack. Lets look at Hyper-V (2012) and XenServer for a second&#8230;</p>
<p style="text-align:left;">With Unix and Windows platforms, <a href="http://en.wikipedia.org/wiki/List_of_RAM_drive_software" target="_blank">RAM disks have been available for years</a>. They were once a necessity and a number of vendors still provide them for high performance IO environments.</p>
<p style="text-align:left;">Lets say (for arguments sake) Citrix and Microsoft decide to provide a snap-in to their hypervisor to allow native RAM disks (or a vendor writes one themselves!) and maybe, they even decide to provide RAM compression, Spill over to local disk, dedupe, and page sharing on this volume from the hypervisor stack&#8230;</p>
<p style="text-align:left;">Wouldn&#8217;t this extend provide all the benefits we&#8217;ve spoken about, without the need for a VM per host? And using Thin Provisioning allow all desktops to share the large pool of RAMdisk available?</p>
<p style="text-align:center;"><em>Yes, yes, it would.</em></p>
<p style="text-align:left;"><a href="/wp-content/uploads/2012/10/ramdisklocalcopy.png"><img class="aligncenter size-full wp-image-2414" title="ramdisklocalcopy" alt="" src="/wp-content/uploads/2012/10/ramdisklocalcopy.png" height="411" width="595" /></a></p>
<p style="text-align:center;"><em>Above is an example of how I would see this working.</em></p>
<p style="text-align:left;">So random pictures are fine and all, but what about the read IOPS negation technologies? and what about combining these with XenServer or Hyper-V?</p>
<p style="text-align:left;"><strong>XenServer and IntelliCache:</strong></p>
<p style="text-align:left;"><a href="/wp-content/uploads/2012/10/mcsramdiskintellicache.png"><img class="aligncenter size-full wp-image-2415" title="mcsramdiskintellicache" alt="" src="/wp-content/uploads/2012/10/mcsramdiskintellicache.png" height="308" width="595" /></a></p>
<p style="text-align:left;">Well there you have it now, all the benefits of a per VM filter, leveraging intellicache for reads and spilling out to local disk&#8230; RESULT!</p>
<p style="text-align:left;"><strong>Pro&#8217;s:</strong></p>
<ul>
<li>Read IOPS negation</li>
<li>Write IOPS negation</li>
<li>No Shared Storage required for running VM&#8217;s</li>
<li>Shared pool of RAM for all desktop&#8217;s to use.</li>
</ul>
<p><strong>Con&#8217;s:</strong></p>
<ul>
<li>A small one, but no migration of VM&#8217;s.</li>
</ul>
<p><strong>Provisioning server?</strong></p>
<p><a href="/wp-content/uploads/2012/10/pvsramdisk1.png"><img class="aligncenter size-full wp-image-2418" title="pvsramdisk" alt="" src="/wp-content/uploads/2012/10/pvsramdisk1.png" height="385" width="595" /></a></p>
<p>and again, all the benefits of a per VM filter, reads redirected via lan and spilling out to local disk&#8230; RESULT!</p>
<p><strong>Pro&#8217;s:</strong></p>
<ul>
<li>Write IOPS negation</li>
<li>No Shared Storage required for running VM&#8217;s</li>
<li>Shared pool of RAM for all desktop&#8217;s to use.</li>
</ul>
<p><strong>Con&#8217;s:</strong></p>
<ul>
<li>A small one, but no migration of VM&#8217;s.</li>
<li>No real read IOPS negation.</li>
</ul>
<p style="text-align:left;"><strong>And HyperV + CSV Cache?</strong></p>
<p style="text-align:left;">Well here&#8217;s an accumulation of my thoughts:</p>
<p style="text-align:left;"><a href="/wp-content/uploads/2012/10/hypvcsv.png"><img class="aligncenter size-full wp-image-2416" title="hypvcsv" alt="" src="/wp-content/uploads/2012/10/hypvcsv.png" height="464" width="595" /></a></p>
<p style="text-align:left;">So lets just talk for a second about what we are seeing&#8230; Utilizing a RAM disk with spill over, and copied vhd&#8217;s on boot we are removing the need for shared storage completely and hosting the IOPS from the hypervisor, natively without the need for additional VM&#8217;s.</p>
<p style="text-align:left;">And see that little icon down the bottom? Yep, that&#8217;s right, live migration from host to host thanks to <a href="http://blogs.technet.com/b/uspartner_ts2team/archive/2012/07/23/shared-nothing-live-migration-on-windows-server-2012.aspx" target="_blank">Microsofts Shared Nothing Live Migration</a>!</p>
<p><strong>Pro&#8217;s:</strong></p>
<ul>
<li>Some write IOPS negation</li>
<li>No Shared Storage required for running VM&#8217;s</li>
<li>Liv migration.</li>
<li>Shared pool of RAM for all desktop&#8217;s to use.</li>
<li>write back to local disk.</li>
</ul>
<p><strong>Con&#8217;s:</strong></p>
<ul>
<li>No full read IOPS negation.</li>
</ul>
<p style="text-align:left;"><strong>Review.</strong></p>
<p style="text-align:left;">I&#8217;m sure there&#8217;s loads of reading in here, and there will be tons of thought and questions after this blog post. This has been in my head for roughly 9 months now and it feels victorious to finally get it all down on paper.</p>
<p style="text-align:left;">At the end of the day, Ram Caching is the way of the future, you pay no maintenance on it, you keep your IOPS off your storage and with a little magic from Microsoft, or particularly Citrix. You could see these benefits.</p>
<p style="text-align:left;">If / When these technologies make it out to you, you could quite happily stick with Machine Creation services, leverage intellicache and your shared storage requirement could be a cheap NAS from any vendor. Provisioning services also see&#8217;s allot of benefits from this approach, but the real creme de la creme is in that intellicache feature.</p>
<p style="text-align:left;">The key functionality to these approaches is simple:</p>
<ul>
<li>Cache RAM</li>
<li><strong>Spill to disk</strong></li>
<li>Keep the differences on local storage if it spills.</li>
</ul>
<p style="text-align:left;"><strong>One last thing?</strong></p>
<p style="text-align:left;">In true Mark Templeton fashion, you know I have a one last thing. This actually hit me today while writing this post and to be honest, I&#8217;m so amazed by the potential of this idea I&#8217;m going to build it in the lab this weekend.</p>
<p style="text-align:left;">But until then, a teaser&#8230;</p>
<p style="text-align:left;"><a href="/wp-content/uploads/2012/10/teaser.png"><img class="aligncenter size-full wp-image-2421" title="teaser" alt="" src="/wp-content/uploads/2012/10/teaser.png" height="317" width="595" /></a></p>
<p style="text-align:left;">What if I told you there was already an overlay, freely available baked into a Microsoft technology that would allow you to overlay local storage in Hyper-V with RAM. A powerful API attached to it, and the ability to write specific files to the local disk, subverting the overlay only when needed?</p>
<ul>
<li>RAM disk type technology? &gt; yep</li>
<li>already available? &gt; yep</li>
<li>Powerful API? &gt; yep</li>
<li>already can spill to disk? &gt; yep</li>
</ul>
<p style="text-align:left;"><strong>Yep Yep Yep!</strong> check back in a few days.</p>
<p style="text-align:left;"><em>(If you know what it is already, keep it to yourself until I&#8217;ve gotten out of the lab!)</em></p>
<p><strong>What do you think?</strong></p>
<p>It doesn&#8217;t take a half baked enthusiast like me to see this potential and I&#8217;d be really eager to hear your comments on these approaches. If you would prefer to keep your comments offline, you can reach me on andrew@andrewmorgan.ie.</p>
]]></content:encoded>
			<wfw:commentRss>http://andrewmorgan.ie/2012/10/on-iops-shared-storage-and-a-fresh-idea-part-3-tying-it-all-together-in-the-stack/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Adding Windows Media Player Codec&#8217;s to Windows Thin PC.</title>
		<link>http://andrewmorgan.ie/2012/02/adding-windows-media-player-codecs-to-windows-thin-pc/</link>
		<comments>http://andrewmorgan.ie/2012/02/adding-windows-media-player-codecs-to-windows-thin-pc/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 09:28:14 +0000</pubDate>
		<dc:creator><![CDATA[andyjmorgan]]></dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[ThinKiosk]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[XenApp]]></category>
		<category><![CDATA[XenDesktop]]></category>
		<category><![CDATA[Citrix HDX Mediastream]]></category>
		<category><![CDATA[Codecs]]></category>
		<category><![CDATA[Media player]]></category>
		<category><![CDATA[WIndows Thin PC]]></category>

		<guid isPermaLink="false">http://andrewmorgan.ie/?p=1393</guid>
		<description><![CDATA[By default when you install windows thin pc, you get access to windows media player without codec&#8217;s. If you are using Windows Thin PC for Citrix products these codecs are vital for correct HDX Mediastream redirection.Below you will find a few quick and dirty steps to include the necessary codec&#8217;s in your Windows Thin PC image: &#160; Acquiring the Codec&#8217;s: &#160; 1: Head over to the microsoft download site and download the Windows Embedded Standard 7 Service Pack 1 Tookit (part&#8217;s 1 to 8) [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><img class="alignright" src="/wp-content/uploads/2012/01/winlogo.png?w=75&amp;h=75&amp;h=75" alt="" width="75" height="75" />By default when you install windows thin pc, you get access to windows media player without codec&#8217;s. If you are using Windows Thin PC for Citrix products these codecs are vital for correct HDX Mediastream redirection.Below you will find a few quick and dirty steps to include the necessary codec&#8217;s in your Windows Thin PC image:</p>
<p>&nbsp;</p>
<h3 style="text-align:center;">Acquiring the Codec&#8217;s:</h3>
<p>&nbsp;</p>
<p>1: Head over to the <a href="http://www.microsoft.com/download/en/details.aspx?id=11887" target="_blank">microsoft download site</a> and download the Windows Embedded Standard 7 Service Pack 1 Tookit (part&#8217;s 1 to 8)<br />
2: Once fully downloaded, run the Standard 7 SP1 Toolkit.part01.exe and extract the contents to a folder (e.g. <em>c:toolkit</em>)<br />
3: Once fully extracted, browse to C:toolkitStandard 7 SP1 ToolkitDSPackagesFeaturePack (where the extract folder was c:toolkit).<br />
4: In this folder, you will find the codec&#8217;s stored in folders beginning with &#8220;<em>x86~winemb-premiumcodecs</em></p>
<p><em></em><br />
<img class="aligncenter size-full wp-image-1394" title="folderview" src="/wp-content/uploads/2012/02/folderview.png" alt="" width="600" height="219" /></p>
<p>5: Make a new folder in your c: drive called codecs, and copy the contents of the above folders into this new folder. The folder should appear as below:</p>
<p><a href="/wp-content/uploads/2012/02/codecs.png"><img class="aligncenter size-full wp-image-1395" title="codecs" src="/wp-content/uploads/2012/02/codecs.png" alt="" width="491" height="189" /></a></p>
<p>&nbsp;</p>
<p>6: Once we have the codec&#8217;s we can now integrate them using two methods, we can add them to a current machine, or add them to an installer image. Both Method&#8217;s are included below:</p>
<p>&nbsp;</p>
<h3>Online Method:</h3>
<p>&nbsp;</p>
<p>1: From a Windows Thin PC, run the following command from an administrative command prompt:</p>
<pre>Dism.exe /Online /Add-Package /PackagePath:C:codecs /NoRestart

</pre>
<p>&nbsp;</p>
<h3>Integrating the Codec&#8217;s into an image:</h3>
<p>&nbsp;</p>
<p>1: Extract your ISO copy of the Windows Thin PC to <em>c:windows_thin_pc</em></p>
<p>2: create a new folder to mount the image to, called <em>c:mnt</em></p>
<p>3: Run the following command from an administrative command prompt:</p>
<pre>Dism.exe /Mount-Wim /WimFile:C:Windows_Thin_PCsourcesinstall.wim /index:1 /MountDir:c:Mnt
Dism /Image:c:Mnt /Add-Package /PackagePath:c:codecs
Dism.exe /Unmount-Wim /MountDir:c:Mnt /commit</pre>
<p>4: Once this completes, add your image back to Microsoft WDS, or write it to a usb key or DVD.</p>
<p>&nbsp;</p>
<p><strong>Note:</strong><em> if the command prompt reports DISM.exe is unavailable, grab a copy of the <a href="http://www.microsoft.com/download/en/details.aspx?id=5753" target="_blank">Microsoft WAIK</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://andrewmorgan.ie/2012/02/adding-windows-media-player-codecs-to-windows-thin-pc/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Configuring an &#8220;Unattended Install&#8221; shell extension for quick msi installation.</title>
		<link>http://andrewmorgan.ie/2011/12/configuring-an-unattended-install-shell-extension-for-quick-msi-installation/</link>
		<comments>http://andrewmorgan.ie/2011/12/configuring-an-unattended-install-shell-extension-for-quick-msi-installation/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 09:03:50 +0000</pubDate>
		<dc:creator><![CDATA[andyjmorgan]]></dc:creator>
				<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://andrewmorgan.ie/?p=1221</guid>
		<description><![CDATA[We&#8217;ve all been there, A list of msi&#8217;s necessary for a clients application and clicking next next next begins to wear thin. For me I had 7 servers to install 4 msi&#8217;s and scripting wasn&#8217;t an option as the software in question couldn&#8217;t be run in a non-interactive session. To alleviate the issue, I added a simple shell extension to perform unattended installs of each of the msi&#8217;s: I&#8217;ve made the registry file available here for download should you also [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>We&#8217;ve all been there, A list of msi&#8217;s necessary for a clients application and clicking next next next begins to wear thin. For me I had 7 servers to install 4 msi&#8217;s and scripting wasn&#8217;t an option as the software in question couldn&#8217;t be run in a non-interactive session.</p>
<p>To alleviate the issue, I added a simple shell extension to perform unattended installs of each of the msi&#8217;s:</p>
<p><a href="/wp-content/uploads/2011/12/unattended-install.png"><img class="aligncenter size-full wp-image-1222" title="unattended install" src="/wp-content/uploads/2011/12/unattended-install.png" alt="" width="284" height="331" /></a></p>
<p>I&#8217;ve made the registry file available <a href="http://www.box.com/s/hfchfxh1o75dr583gj97">here</a> for download should you also be stuck with this task at some point.</p>
<p>The registry file is very simple as you can see below:</p>
<p><a href="/wp-content/uploads/2011/12/regdetails.png"><img class="aligncenter size-full wp-image-1223" title="regdetails" src="/wp-content/uploads/2011/12/regdetails.png" alt="" width="600" height="127" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://andrewmorgan.ie/2011/12/configuring-an-unattended-install-shell-extension-for-quick-msi-installation/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>how to disable Abobe Flash on a per user basis:</title>
		<link>http://andrewmorgan.ie/2011/05/how-to-disable-abobe-flash-on-a-per-user-basis/</link>
		<comments>http://andrewmorgan.ie/2011/05/how-to-disable-abobe-flash-on-a-per-user-basis/#comments</comments>
		<pubDate>Thu, 05 May 2011 21:22:03 +0000</pubDate>
		<dc:creator><![CDATA[andyjmorgan]]></dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Misc]]></category>
		<category><![CDATA[Server Based Computing]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[XenApp]]></category>
		<category><![CDATA[Adobe Flash]]></category>

		<guid isPermaLink="false">http://andymorgan.wordpress.com/?p=416</guid>
		<description><![CDATA[Had a requirement recently to disable flash on a user by user basis in our published desktop environment, this key wasnt readily available on the internet so here it is for anyone else wishing to do the same: [HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExtSettings{D27CDB6E-AE6D-11CF-96B8-444553540000}] "Flags"=dword:00000001 "Version"="*"]]></description>
				<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-417" title="Flash-8-icon" src="/wp-content/uploads/2011/04/flash-8-icon.png" alt="" width="75" height="75" /></p>
<p>Had a requirement recently to disable flash on a user by user basis in our published desktop environment, this key wasnt readily available on the internet so here it is for anyone else wishing to do the same:</p>
<pre>[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExtSettings{D27CDB6E-AE6D-11CF-96B8-444553540000}]
"Flags"=dword:00000001
"Version"="*"</pre>
]]></content:encoded>
			<wfw:commentRss>http://andrewmorgan.ie/2011/05/how-to-disable-abobe-flash-on-a-per-user-basis/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Remove shell extensions after installing Adobe Acrobat</title>
		<link>http://andrewmorgan.ie/2009/01/remove-combine-supported-files-in-acrobat-after-installing-acrobat-8/</link>
		<comments>http://andrewmorgan.ie/2009/01/remove-combine-supported-files-in-acrobat-after-installing-acrobat-8/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 16:41:04 +0000</pubDate>
		<dc:creator><![CDATA[andyjmorgan]]></dc:creator>
				<category><![CDATA[Batch Scripting]]></category>
		<category><![CDATA[Citrix]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Server Based Computing]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[XenApp]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Context Menu]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://andymorgan.wordpress.com/?p=235</guid>
		<description><![CDATA[A pet peeve of mine are context menu extensions&#8230; Why software vendors decide to include non optional context menu addons are besides me! A good example of this would be Adobe. when right clicking  on an office document Adobe decided  &#8220;Combine supported files in acrobat&#8221; to be we all must have, fine in the wild&#8230; but not so good in a shared desktop environment. To remove this from your Citrix environment / Desktop simply run this command: REGSVR32 /u "C:Program [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><img class="alignright wp-image-942 " title="Adobe_Air_Logo" src="http://andrewmorgan.ie/wp-content/uploads/2011/10/adobe_air_logo.jpg" alt="" width="107" height="107" />A pet peeve of mine are context menu extensions&#8230; Why software vendors decide to include non optional context menu addons are besides me! A good example of this would be Adobe.</p>
<p>when right clicking  on an office document Adobe decided  &#8220;Combine supported files in acrobat&#8221; to be we all must have, fine in the wild&#8230; but not so good in a shared desktop environment.</p>
<p>To remove this from your Citrix environment / Desktop simply run this command:</p>
<pre>REGSVR32 /u "C:Program FilesAdobeAcrobat 9.0Acrobat ElementsContextMenu.dll.</pre>
<p>If you also wish to remove the New &gt; file type associations that Adobe decide to push in, heres a script to do so:</p>
<pre>REG DELETE HKEY_CLASSES_ROOT.xdpAcroExch.XDPDocShellNew /f
 REG DELETE HKEY_CLASSES_ROOT.xdpShellNew /f</pre>
<h4>Update:</h4>
<p>With the move to 64 bit platforms, a new dll has been put in place:</p>
<p>C:Program Files (x86)AdobeAcrobat 9.0Acrobat Elementscontextmenu64.dll</p>
<p>This dll add&#8217;s the following items to the context menu:</p>
<ul>
<li>Convert to Adobe PDF</li>
<li>Convert to Adobe PDF and Email.</li>
</ul>
<p>If you wish to remove these, run the following command:</p>
<pre>REGSVR32 /u "C:Program Files (x86)AdobeAcrobat 9.0Acrobat ElementsContextMenu64.dll"</pre>
]]></content:encoded>
			<wfw:commentRss>http://andrewmorgan.ie/2009/01/remove-combine-supported-files-in-acrobat-after-installing-acrobat-8/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
